예제 #1
0
파일: Jedi.java 프로젝트: teliwal/groupe27
 public Jedi(String groupe) {
   super("Jedi_" + num++, groupe);
   this.caracts.put(Caracteristique.DON, 50);
   this.caracts.put(Caracteristique.VIE, Calculs.valeurCaracAleatoire(Caracteristique.VIE));
   this.caracts.put(
       Caracteristique.INITIATIVE, Calculs.valeurCaracAleatoire(Caracteristique.INITIATIVE));
   this.caracts.put(Caracteristique.FORCE, Calculs.valeurCaracAleatoire(Caracteristique.FORCE));
 }
예제 #2
0
파일: Arene.java 프로젝트: clem822/bl
  @Override
  public boolean ramassePotion(int refRMI, int refPotion) throws RemoteException {
    boolean res = false;

    VuePersonnage vuePersonnage = personnages.get(refRMI);
    VuePotion vuePotion = potions.get(refPotion);

    if (vuePersonnage.isActionExecutee()) {
      // si une action a deja ete executee
      logActionDejaExecutee(refRMI);

    } else {
      // sinon, on tente de jouer l'interaction
      int distance =
          Calculs.distanceChebyshev(vuePersonnage.getPosition(), vuePotion.getPosition());

      // on teste la distance entre le personnage et la potion
      if (distance <= Constantes.DISTANCE_MIN_INTERACTION) {
        new Ramassage(this, vuePersonnage, vuePotion).interagit();
        personnages.get(refRMI).executeAction();

        res = true;
      } else {
        logger.warning(
            Constantes.nomClasse(this),
            nomRaccourciClient(refRMI)
                + " a tente d'interagir avec "
                + vuePotion.getElement().getNom()
                + ", alors qu'il est trop eloigne !\nDistance = "
                + distance);
      }
    }

    return res;
  }
  public void executeStrategie(HashMap<Integer, Point> voisins) throws RemoteException {
    // arene
    IArene arene = console.getArene();

    // reference RMI de l'element courant
    int refRMI = 0;

    // position de l'element courant
    Point position = null;

    try {
      refRMI = console.getRefRMI();
      position = arene.getPosition(refRMI);
    } catch (RemoteException e) {
      e.printStackTrace();
    }

    if (voisins.isEmpty()) { // je n'ai pas de voisins, j'erre
      console.setPhrase("J'erre...Seul");
      arene.deplace(refRMI, 0);

    } else {
      int refCible = Calculs.chercheElementProche(position, voisins);
      int distPlusProche = Calculs.distanceChebyshev(position, arene.getPosition(refCible));

      Element elemPlusProche = arene.elementFromRef(refCible);
      Point pointC = arene.getPosition(refCible);

      if (distPlusProche <= Constantes.DISTANCE_MIN_INTERACTION + 1) {
        // courir !
        console.setPhrase("Je m'eloigne de cette potion ");
        arene.fuir(refRMI, pointC);

      } else { // si voisins, mais plus eloignes = POTION
        if (elemPlusProche instanceof Potion) {
          // pas de crainte a avoir
          console.setPhrase("J'erre...");
          arene.deplace(refRMI, 0);
        } else {
          pointC = arene.getPosition(refCible);
          arene.poserPotion(refRMI, pointC);
        }
      }
    }
  }
예제 #4
0
파일: Arene.java 프로젝트: clem822/bl
  /**
   * Verifie que les deux elements sont voisins, l'element courant etant un personnage. Pour etre un
   * voisin : ils doivent etre differents, ils doivent etre a une distance inferieure ou egale a la
   * vision, il doivent etre actifs.
   *
   * @param courant personnage courant
   * @param voisin element voisin
   * @return vrai si l'element donne est bien un voisin
   */
  private boolean estVoisin(VuePersonnage courant, VueElement<?> voisin) throws RemoteException {
    boolean res =
        courant.getElement().estVivant()
            && Calculs.distanceChebyshev(voisin.getPosition(), courant.getPosition())
                <= Constantes.VISION;

    if (voisin instanceof VuePersonnage) { // potion
      res =
          res
              && ((VuePersonnage) voisin).getElement().estVivant()
              && voisin.getRefRMI() != courant.getRefRMI();
    }

    return res;
  }
  public void lancerPotionTeleportation(int port, String ipArene) {
    String nom = "Téléportation";

    // TODO remplacer la ligne suivante par votre numero de groupe
    String groupe = "G7";

    // creation du logger
    LoggerProjet logger = null;
    try {
      logger = new LoggerProjet(true, "potion_" + nom + groupe);
    } catch (IOException e) {
      e.printStackTrace();
      System.exit(ErreurLancement.suivant);
    }

    // lancement de la potion
    try {
      IArene arene = (IArene) java.rmi.Naming.lookup(Constantes.nomRMI(ipArene, port, "Arene"));

      logger.info("Lanceur", "Lancement de la potion sur le serveur...");

      // caracteristiques de la potion
      HashMap<Caracteristique, Integer> caracts = new HashMap<Caracteristique, Integer>();
      caracts.put(Caracteristique.VIE, 0);
      caracts.put(Caracteristique.FORCE, 0);
      caracts.put(Caracteristique.INITIATIVE, 0);
      caracts.put(Caracteristique.ESQUIVE, 0);
      caracts.put(Caracteristique.DEFENSE, 0);
      caracts.put(Caracteristique.BOUCLIER, 0);

      // ajout de la potion
      arene.ajoutePotion(new Potion(nom, groupe, caracts), Calculs.positionAleatoireArene());
      logger.info("Lanceur", "Lancement de la potion reussi");

    } catch (Exception e) {
      logger.severe("Lanceur", "Erreur lancement :\n" + e.getCause());
      e.printStackTrace();
      System.exit(ErreurLancement.suivant);
    }
  }
예제 #6
0
파일: Arene.java 프로젝트: clem822/bl
  public boolean Vampirise(int refRMI, int refRMIAdv) throws RemoteException {
    boolean res = false;

    VuePersonnage client = personnages.get(refRMI);
    VuePersonnage clientAdv = personnages.get(refRMIAdv);

    if (personnages.get(refRMI).isActionExecutee()) {
      // si une action a deja ete executee
      logActionDejaExecutee(refRMI);

    } else {
      // sinon, on tente de jouer l'interaction
      IConsole console = consoleFromRef(refRMI);
      IConsole consoleAdv = consoleFromRef(refRMIAdv);

      int distance =
          Calculs.distanceChebyshev(
              personnages.get(refRMI).getPosition(), personnages.get(refRMIAdv).getPosition());

      // on teste la distance entre les personnages
      if (distance <= Constantes.DISTANCE_MIN_INTERACTION) {
        Personnage pers = (Personnage) elementFromRef(refRMI);
        Personnage persAdv = (Personnage) elementFromRef(refRMIAdv);

        // on teste que les deux personnages soient en vie
        if (pers.estVivant() && persAdv.estVivant()) {
          console.log(
              Level.INFO,
              Constantes.nomClasse(this),
              "Je decoupe " + nomRaccourciClient(refRMIAdv));
          consoleAdv.log(
              Level.INFO,
              Constantes.nomClasse(this),
              "Je me fait massacrer par " + nomRaccourciClient(refRMI));

          logger.info(
              Constantes.nomClasse(this),
              nomRaccourciClient(refRMI)
                  + " attaque "
                  + nomRaccourciClient(consoleAdv.getRefRMI()));

          new Vampirise(this, client, clientAdv).interagit();
          personnages.get(refRMI).executeAction();

          // si l'adversaire est mort
          if (!persAdv.estVivant()) {
            setPhrase(refRMI, "Je tue " + nomRaccourciClient(consoleAdv.getRefRMI()));
            console.log(
                Level.INFO, Constantes.nomClasse(this), "Je tue " + nomRaccourciClient(refRMI));

            logger.info(
                Constantes.nomClasse(this),
                nomRaccourciClient(refRMI) + " tue " + nomRaccourciClient(consoleAdv.getRefRMI()));
          }

          res = true;
        } else {
          logger.warning(
              Constantes.nomClasse(this),
              nomRaccourciClient(refRMI)
                  + " a tente d'interagir avec "
                  + nomRaccourciClient(refRMIAdv)
                  + ", alors qu'il est mort...");

          console.log(
              Level.WARNING,
              Constantes.nomClasse(this),
              nomRaccourciClient(refRMIAdv) + " est deja mort !");
        }
      } else {
        logger.warning(
            Constantes.nomClasse(this),
            nomRaccourciClient(refRMI)
                + " a tente d'interagir avec "
                + nomRaccourciClient(refRMIAdv)
                + ", alors qu'il est trop eloigne... Distance de chebyshev = "
                + distance);

        console.log(
            Level.WARNING,
            "AVERTISSEMENT ARENE",
            nomRaccourciClient(refRMIAdv) + " est trop eloigne !\nDistance = " + distance);
      }
    }

    return res;
  }
예제 #7
0
  public static void main(String[] args) {
    String nom = "Assassin";

    // TODO remplacer la ligne suivante par votre numero de groupe
    String groupe = "G10";

    // nombre de tours pour ce personnage avant d'etre deconnecte
    // (30 minutes par defaut)
    // si negatif, illimite
    int nbTours = Constantes.NB_TOURS_PERSONNAGE_DEFAUT;

    // init des arguments
    int port = Constantes.PORT_DEFAUT;
    String ipArene = Constantes.IP_DEFAUT;

    if (args.length > 0) {
      if (args[0].equals("--help") || args[0].equals("-h")) {
        ErreurLancement.aide(usage);
      }

      if (args.length > 2) {
        ErreurLancement.TROP_ARGS.erreur(usage);
      }

      try {
        port = Integer.parseInt(args[0]);
      } catch (NumberFormatException e) {
        ErreurLancement.PORT_NAN.erreur(usage);
      }

      if (args.length > 1) {
        ipArene = args[1];
      }
    }

    // creation du logger
    LoggerProjet logger = null;
    try {
      logger = new LoggerProjet(true, "personnage_" + nom + groupe);
    } catch (IOException e) {
      e.printStackTrace();
      System.exit(ErreurLancement.suivant);
    }

    // lancement du serveur
    try {
      String ipConsole = InetAddress.getLocalHost().getHostAddress();

      logger.info("Lanceur", "Creation du personnage...");

      // caracteristiques du personnage
      HashMap<Caracteristique, Integer> caracts = new HashMap<Caracteristique, Integer>();
      // seule la force n'a pas sa valeur par defaut (exemple)
      caracts.put(Caracteristique.FORCE, 80);
      caracts.put(Caracteristique.VIE, 20);
      caracts.put(Caracteristique.INITIATIVE, 80);

      Point position = Calculs.positionAleatoireArene();

      new StrategieAssassin(
          ipArene, port, ipConsole, nom, groupe, caracts, nbTours, position, logger);
      logger.info("Lanceur", "Creation du personnage reussie");

    } catch (Exception e) {
      logger.severe("Lanceur", "Erreur lancement :\n" + e.getCause());
      e.printStackTrace();
      System.exit(ErreurLancement.suivant);
    }
  }