示例#1
0
  private void annuler() {
    // Recuperation du contexte precedent
    System.out.println("moteur : annuler");
    precD = f.annuler();
    if (precD != null) {
      precD.setRefairePossible(true);
      // Mise a jour du contexte courant
      liaison.setDonnees(precD);

      for (int o = 0; o < d.getNbJoueurs(); o++) {
        ordi[o] = new Ordinateur(liaison.getDonnees(), precD.getJoueurs()[o].getDifficulte());
      }
      // ordi = new Ordinateur(liaison.getDonnees());

      // Recuperation des coordonnees du pengouin
      Coordonnees cx = precD.getCoordPingouinAcc();

      // Mise a jour des cases accessibles
      if (cx != null) {
        precD.getTerrain().annulerCasesAccessibles(cx);
      }
      tabj = precD.getJoueurs();
      //			System.out.println("JC : "+tabj[precD.getJoueurCourant()].getNom());
      //			System.out.println("PR : "+tabj[precD.getJoueurCourant()].getPingouinsRestants());
      d = precD;
    }
  }
示例#2
0
  public Moteur(Liaison l) {
    this.liaison = l;

    this.d = l.getDonnees();

    this.continuer = true;
    this.f = new Fonctionnalites(d);

    d.setJoueurCourant(0);
    ordi = new Ordinateur[d.getNbJoueurs()];

    for (int c = 0; c < d.getNbJoueurs(); c++) {
      ordi[c] = new Ordinateur(d, d.getJoueurs()[c].getDifficulte());
    }
  }
示例#3
0
  private void refaire() {
    // Recuperation du contexte precedent
    precD = f.refaire();
    if (precD != null) {
      precD.setAnnulerPossible(true);
      // Mise a jour du contexte courant
      liaison.setDonnees(precD);
      d = precD;

      if (!precD.isJeuFini()) {
        for (int o = 0; o < d.getNbJoueurs(); o++) {
          ordi[o] = new Ordinateur(liaison.getDonnees(), precD.getJoueurs()[o].getDifficulte());
        }
      }
    }
  }
示例#4
0
  private void placerPingouin() {
    // Recuperation du contexte courant
    copieDP = liaison.getDonnees().copie();

    if (d.getJoueurs()[d.getJoueurCourant()].getDifficulte()
        != ordi[d.getJoueurCourant()].getDifficulte()) {
      ordi[d.getJoueurCourant()] =
          new Ordinateur(d, d.getJoueurs()[d.getJoueurCourant()].getDifficulte());
    }

    if (tabj[d.getJoueurCourant()].estOrdi()) ordi[d.getJoueurCourant()].placerPingouin();
    // Recuperation des coordonnees du pengouin
    Coordonnees ci = d.getCoordPingouinInitial();

    // Placement du pengouin
    if (tabj[d.getJoueurCourant()].ajouterPengouin(ci) < 0) {
      System.out.println(tabj[d.getJoueurCourant()].getNom() + " : Placement impossible");
      return;
    } else {
      d.setAnnulerPossible(true);

      // Sauvegarde du contexte avant placement pour une eventuelle recuperation
      f.empilerAnnuler(copieDP);

      // Si tous les placements sont termines, l'indiquer aux autres
      if (placementTermine()) {
        d.setPlacementPingouinTermine(placementTermine());
        d.getTerrain().verifierBlocages(tabj);
        //			f.viderAnnuler();
      }
      //		System.out.println(placementTermine());

      // Mise a jour du joueur courant
      if (d.getJoueurCourant() == d.getNbJoueurs() - 1) {
        d.setJoueurCourant(0);
      } else {
        d.setJoueurCourant(d.getJoueurCourant() + 1);
      }
    }
  }
示例#5
0
  public void run() {

    do {
      liaison.attendre();

      d = liaison.getDonnees();
      tabj = d.getJoueurs();

      //        	if(a == Action.Sauvegarder || a == Action.Charger
      //        	|| a == Action.JouerCoup || a == Action.CaseAccessibles
      //        	|| a == Action.AnnulerCaseAccessibles){
      //        		f.viderRefaire();
      //        	}
      if (d.isViderPile()) {
        f.viderRefaire();
      }
      d.setViderPile(false);

      liaison.setActionPrec(d.getAction());

      System.out.println("[Moteur] Action : " + d.getAction());
      switch (d.getAction()) {
        case ListerFichiers: // Liste des fichiers sauvegardes
          String[] s = f.listerFichier();
          d.setListeFichier(s);

          break;

        case Charger:
          System.out.println("[Moteur] Charger() --> perso ? : " + d.isPartiePerso());
          this.charger();
          break;

        case ChargerApercu:
          this.chargerApercu();
          break;

        case Sauvegarder:
          this.sauvegarder();
          break;

        case CaseAccessibles:
          // Recuperation des coordonnees du pengouin
          Coordonnees c = d.getCoordPingouinAcc();

          // Mise a jour des cases accessibles
          d.getTerrain().casesAccessibles(c);

          break;

        case AnnulerCaseAccessibles:
          // Recuperation des coordonnees du pengouin
          Coordonnees cA = d.getCoordPingouinAcc();

          // Mise a jour des cases accessibles
          d.getTerrain().annulerCasesAccessibles(cA);

          break;

        case JouerCoup:
          this.jouerCoup();
          break;

        case Annuler:
          this.annuler();
          break;

        case Refaire:
          this.refaire();
          break;

        case Conseil:
          this.conseil();
          break;

        case PlacerPingouin:
          this.placerPingouin();
          break;

        case Quitter:
          continuer = false;
          break;

        case SupprimerSauvegarde:
          this.supprimerSauvegarde();
          break;

        default:
          break;
      }
      liaison.notifierMiseAJour();
    } while (continuer);
  }
示例#6
0
  private void jouerCoup() {
    // Recuperation du contexte courant
    copieDP = liaison.getDonnees().copie();

    if (d.getJoueurs()[d.getJoueurCourant()].getDifficulte()
        != ordi[d.getJoueurCourant()].getDifficulte()) {
      ordi[d.getJoueurCourant()] =
          new Ordinateur(d, d.getJoueurs()[d.getJoueurCourant()].getDifficulte());
    }
    // Recuperation des coordonnees Depart et arrivee
    if (tabj[d.getJoueurCourant()].estOrdi()) {
      //			System.out.println("[Moteur] Coup de l'ordi");
      ordi[d.getJoueurCourant()].prochainCoup();
    }

    //		System.out.println("[moteur jouer coup] coup de l'ordi : depart :" + d.getCoordPingouinDep()
    // + " arrivee : " + d.getCoordPingouinArr());
    Coordonnees cd = d.getCoordPingouinDep();
    Coordonnees ca = d.getCoordPingouinArr();
    //		System.out.println("[moteur jouer coup] coup recupere : depart :" + cd + " arrivee : " +
    // ca);

    if (cd != null && ca != null) {
      // Deplacement du pengouin
      if (tabj[d.getJoueurCourant()].deplacerPingouin(cd, ca) < 0) {
        System.out.println(tabj[d.getJoueurCourant()].getNom() + " : Deplacement impossible");
        return;
      } else {
        d.setAnnulerPossible(true);
      }
    } else {
      return;
    }

    // Sauvegarde du contexte avant deplacement pour une eventuelle recuperation
    f.empilerAnnuler(copieDP);

    // Mise a jour du joueur courant
    if (d.getJoueurCourant() == d.getNbJoueurs() - 1) {
      d.setJoueurCourant(0);
    } else {
      d.setJoueurCourant(d.getJoueurCourant() + 1);
    }

    // on v�rifie si le joueur suivant peut jouer, si ce n'est pas le cas il passe son tour
    // tant qu'on a pas trouv� un joueur pouvant jouer on passe au suivant
    // si tous les joueurs ne peuvent pas jouer c'est fini
    int n = d.getNbJoueurs();
    while (d.getJoueurs()[d.getJoueurCourant()].getPingouinsRestants() <= 0 && n > 0) {
      if (d.getJoueurCourant() == d.getNbJoueurs() - 1) {
        d.setJoueurCourant(0);
      } else {
        d.setJoueurCourant(d.getJoueurCourant() + 1);
      }
      n--;
    }

    // on v�rifie si tous les joueurs sont bloqu�s
    // si c'est le cas on ramasse les derni�res tuiles et trouve le gagnant
    if (n == 0) {
      d.getTerrain().ramasserTuilesFin(tabj);
      d.setGagnant(d.getTerrain().gagnantPartie(tabj));
      System.out.println("Le gagnant est: " + d.getGagnant().getNom() + "!!!");
      d.setJeuFini(true);
    }
    System.out.println("JC : " + tabj[d.getJoueurCourant()].getNom());
    System.out.println("PR : " + tabj[d.getJoueurCourant()].getPingouinsRestants());
  }