/** * Distribue le reste des cartes. 2 cartes pour celui qui a pris à l'atout et 3 cartes pour les * autres. * * @param joueurPrend joueur ayant pris a l'atout */ private void distribuerDeuxiemeTour(Joueur joueurPrend) { Joueur premierJoueur = table.joueurSuivant(joueurDonneur); this.joueurCourant = table.joueurSuivant(joueurDonneur); int nbCarte = 2; do { for (int i = 0; i < nbCarte; i++) { this.joueurCourant .getMain() .ajouter(table.getPaquet().retirerPremiereCarte(), this.table.getCouleurAtout()); } if (this.joueurCourant != joueurPrend) { // voir .equals() this.joueurCourant .getMain() .ajouter(table.getPaquet().retirerPremiereCarte(), this.table.getCouleurAtout()); } this.joueurCourant = table.joueurSuivant(this.joueurCourant); } while (this.joueurCourant != premierJoueur); }
/** Permet de récupérer les cartes dans la main des joueurs. */ private void recupererCartesMain() { Joueur premierJoueur = this.joueurCourant; do { for (Carte carte : joueurCourant.getMain().hashtableToList()) { this.table.getPaquet().ajouter(carte); joueurCourant.getMain().supprimer(carte); } this.joueurCourant = table.joueurSuivant(this.joueurCourant); } while (this.joueurCourant != premierJoueur); }
/** * Permet de distribuer les cartes du paquet aux joueurs. * * @param nbCarte nombre de cartes à distribuer */ private void distribuer(int nbCarte) { Joueur premierJoueur = this.joueurCourant; do { for (int i = 0; i < nbCarte; i++) { this.joueurCourant .getMain() .ajouter(table.getPaquet().retirerPremiereCarte(), this.table.getCouleurAtout()); } this.joueurCourant = table.joueurSuivant(this.joueurCourant); } while (this.joueurCourant != premierJoueur); }
/** * Deuxieme tour de table pour proposer aux joueurs de prendre à l'atout à une autre couleur. * * @return Renvoit le jouer qui a pris, null le cas échéant. */ private Joueur quiPrendDeuxiemeDonne() { this.table.setCouleurAtout(null); Joueur joueurPrend = null; int i = 0; while (this.table.getCouleurAtout() == null && i < 4) { Terminal.ecrireStringln( "---------DEUXIEME DONNE----------\nJoueur courant : " + joueurCourant); this.table.setCouleurAtout(joueurCourant.prendDeuxiemeDonne()); Terminal.ecrireStringln("\ncouleur Choisie :" + this.table.getCouleurAtout()); if (this.table.getCouleurAtout() == null) { joueurCourant = table.joueurSuivant(joueurCourant); } else { joueurPrend = joueurCourant; } i++; } return joueurPrend; }
/** * Premier tour de table pour proposer aux joueurs de prendre à l'atout la carte retournée. * * @return Renvoit le jouer qui a pris, null le cas échéant. */ private Joueur quiPrendPremiereDonne() { Joueur joueurPrend = null; int i = 0; // tend que personne n'a pris ET que tout le monde n'as pas été interrogé while (joueurPrend == null && i < 4) { Terminal.ecrireStringln( "---------PREMIERE DONNE----------\nJoueur courant : " + this.joueurCourant + "\nCarte retournée:" + this.table.getCarteRetournee()); if (joueurCourant.prendPremiereDonne()) { joueurPrend = joueurCourant; this.table.setCouleurAtout(this.table.getCarteRetournee().getCouleur()); Terminal.ecrireStringln(joueurCourant + " PREND"); } else { Terminal.ecrireStringln(joueurCourant + " PASSE"); } i++; joueurCourant = table.joueurSuivant(joueurCourant); } return joueurPrend; }
/** Jouer un pli. */ private void jouerUnPli() { if (this.joueurCourant.getMain().getTailleMain() == 1) { this.table.nouveauPliCourant(true); } else { this.table.nouveauPliCourant(false); } Carte carteJouee = null; while (this.table.getPliCourant().size() < 4) { // Au premier tour avant de jouer quoi que ce soit, on analyse son jeu (juste pour voir les // annonces belote et re pour le moment) if (this.joueurCourant.getMain().getTailleMain() == 8) this.joueurCourant.analyserSonJeu(); carteJouee = joueurCourant.jouerPli(); this.table.jouerCarte(carteJouee, joueurCourant); joueurCourant = table.joueurSuivant(joueurCourant); } Terminal.ecrireStringln( "-------PLI FINI------\nJoueurMaitre : " + this.table.getPliCourant().getJoueurMaitre()); this.table .getEquipeDuJoueur(this.table.getPliCourant().getJoueurMaitre()) .ajouterPliRemporte(this.table.getPliCourant()); joueurCourant = this.table.getPliCourant().getJoueurMaitre(); }
/** Lancement de la partie. */ public void debuterPartie() { this.joueurPrend = null; int jouer = 1; while (jouer == 1) { while (!this.partieFinie()) { switch (etat) { case PremiereDistribution: initIAForManche(); Terminal.ecrireStringln("Donneur : " + this.joueurDonneur); this.joueurCourant = table.joueurSuivant(this.joueurDonneur); distribuer(3); distribuer(2); this.table.retournerUneCarte(); etat = EtatPartieEnum.PremierTourDonne; break; case PremierTourDonne: this.joueurPrend = quiPrendPremiereDonne(); if (this.joueurPrend == null) { etat = EtatPartieEnum.DeuxiemeTourDonne; } else { this.table.attribuerCarteRetourneeA(this.joueurPrend); etat = EtatPartieEnum.DeuxiemeDistribution; } break; case DeuxiemeTourDonne: this.joueurPrend = quiPrendDeuxiemeDonne(); if (this.joueurPrend == null) { // Personne n'a pris, on re-distribue les cartes // on récupère les cartes recupererCartesMain(); this.table.remettreCarteRetourneeDansLePaquet(); // on mélange this.table.getPaquet().melanger(50); etat = EtatPartieEnum.PremiereDistribution; } else { this.table.attribuerCarteRetourneeA(this.joueurPrend); // TODO ça devrait aller dans distribuerDeuxiemeTour // ou au moins dans le case DeuxiemeDistribution Terminal.ecrireStringln( "----FIN DE LA DONNE-----\n" + this.joueurPrend.toString() + " a pris à : " + this.table.getCouleurAtout()); etat = EtatPartieEnum.DeuxiemeDistribution; } break; case DeuxiemeDistribution: distribuerDeuxiemeTour(this.joueurPrend); this.joueurCourant = table.joueurSuivant(joueurDonneur); etat = EtatPartieEnum.PhaseDePli; break; case PhaseDePli: jouerUnPli(); if (this.joueurCourant.getMain().getTailleMain() == 0) { /** *************** FIN DE LA MANCHE **************** */ determinerScoreMancheCourante(); this.joueurPrend = null; remettreLesPlisDansLeTas(); this.table.reinitialiserLesAnnonces(); this.joueurDonneur.coupe(this.table.getPaquet()); this.joueurDonneur = table.joueurSuivant(this.joueurDonneur); etat = EtatPartieEnum.PremiereDistribution; } else { etat = EtatPartieEnum.PhaseDePli; } break; } } Terminal.ecrireStringln("FIN DE LA PARTIE \n---------------------"); Terminal.ecrireStringln("Voulez-vous rejouer ? (oui - 1 / non - 0)"); jouer = Terminal.lireInt(); // reinitialiser les scores dans equipes this.table.getEquipes().get(0).resetScorePartie(); this.table.getEquipes().get(1).resetScorePartie(); } Terminal.ecrireStringln("Merci d'avoir joue a notre jeu !"); }