예제 #1
0
파일: Arene.java 프로젝트: clem822/bl
  /**
   * Ajoute l'increment donne a la caracteristique donne de l'element correspondant a la vue donnee.
   * L'increment peut etre positif ou negatif.
   *
   * @param vuePersonnage client a mettre a jour
   * @param carac caracteristique a mettre a jour
   * @param increment increment a ajouter a la valeur de la caracteristique courante
   * @throws RemoteException
   */
  public void incrementeCaractElement(
      VuePersonnage vuePersonnage, Caracteristique carac, int increment) throws RemoteException {

    int refRMI = vuePersonnage.getRefRMI();
    IConsole console = consoleFromRef(refRMI);
    Personnage pers = vuePersonnage.getElement();

    if (carac == Caracteristique.VIE && increment < 0) {
      increment = (increment * (100 - pers.getCaract(Caracteristique.ARMURE))) / 100;
    }

    // increment de la caracteristique
    pers.incrementeCaract(carac, increment);

    if (pers.estVivant()) {
      if (increment < 0) {
        console.log(
            Level.INFO,
            Constantes.nomClasse(this),
            "J'ai perdu " + -increment + " points de " + carac);

        if (carac == Caracteristique.VIE) {
          setPhrase(refRMI, "Ouch, j'ai perdu " + increment + " points de vie.");
        }

      } else {
        console.log(
            Level.INFO,
            Constantes.nomClasse(this),
            "J'ai gagne " + increment + " points de " + carac);
      }
    }
  }
예제 #2
0
파일: Arene.java 프로젝트: clem822/bl
  /** Affiche le classement de la partie dans le logger. */
  private void logClassement() {
    List<VuePersonnage> classement = getPersonnagesClassement();

    String msg = "";
    int i = 1;

    for (VuePersonnage vue : classement) {
      msg += "\n" + i + " : " + vue.getElement().getNomGroupe() + " " + vue.getPhrase();
      i++;
    }

    logger.info(Constantes.nomClasse(this), "Classement :" + msg);
  }
예제 #3
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;
  }
예제 #4
0
파일: Arene.java 프로젝트: clem822/bl
  /**
   * Renvoie la liste des references triees par ordre de passage en fonction de l'initiative.
   *
   * @return liste de toutes les references des personnages de la partie, ordonnee par initiative
   *     (decroissante)
   */
  private List<Integer> getSortedRefs() {
    // on cree une priority queue de paires reference RMI/initiative du
    // personnage
    // en ajoutant des paires dans la queue, elles automatiquement seront
    // classees en suivant leur methode compareTo
    Queue<PaireRefRMIIntitiative> queueRefsInitiative = new PriorityQueue<PaireRefRMIIntitiative>();

    for (VuePersonnage client : personnages.values()) {
      queueRefsInitiative.offer(
          new PaireRefRMIIntitiative(
              client.getRefRMI(), client.getElement().getCaract(Caracteristique.INITIATIVE)));
    }

    // on recupere juste les references
    List<Integer> listeRefsTriees = new ArrayList<Integer>();

    while (!queueRefsInitiative.isEmpty()) {
      listeRefsTriees.add(queueRefsInitiative.poll().getRef());
    }

    return listeRefsTriees;
  }
예제 #5
0
파일: Arene.java 프로젝트: clem822/bl
  @Override
  public void deconnecte(int refRMI, String cause, String phrase) throws RemoteException {
    // enregistrement des infos de la console lors de sa deconnexion,
    // le but etant de garder des informations sur les deconnectes
    VuePersonnage vuePersonnage = personnages.get(refRMI);

    vuePersonnage.getElement().tue(); // au cas ou ce ne serait pas une mort "naturelle"
    vuePersonnage.setTourMort(tour);
    setPhrase(refRMI, "MORT >_< (" + phrase + ")");

    // ajout a la liste des morts
    personnagesMorts.add(vuePersonnage);

    try {
      // fermeture de la console en donnant la raison
      consoleFromRef(refRMI).deconnecte(cause);

    } catch (UnmarshalException e) {
      e.printStackTrace();
    }

    // suppression de la liste des vivants
    ejectePersonnage(refRMI);
  }