package carte.belote;

/**
 * classe pour tester un embryon de jeu de belote
 *
 * @author Matthias Colin
 * @version 1.0 (31/05/2011)
 */ 

import java.util.*;
import carte.*;

public class TestBelote {

	/**
	 * afficher sur la sortie standard une série de cartes (jeu, main, pli, pioche, etc ..)
	 * @param cartes les cartes à itérer pour l'affichage
	 */
	private static void displayGame(Iterable<Carte> cartes) {
		displayGame(cartes.iterator());
	}
	
	/**
	 * afficher sur la sortie standard une série de cartes (jeu, main, pli, pioche, etc ..)
	 * @param un Iterateur sur les cartes à afficher
	 */
	private static void displayGame(Iterator<Carte> it) {
		System.out.print(">:");
		while (it.hasNext()) {
			Carte carte = it.next();
			System.out.print(" " + carte + " :");
		}
		System.out.println("<");
	}
	
	/**
	 * programme principal
	 */
	public static void main(String[] args) {
		// savoir si le jeu est fini
		//boolean encore = true;
		
		// création n'un nouveau jeu
		Jeu jeu = new Jeu();
		// affichage
		displayGame(jeu);
		displayGame(jeu.descendingIterator());
		displayGame(jeu.shuffleIterator());
		displayGame(jeu.shuffleIterator());
		
		// distribution des 5 premières cartes à 4 joueurs
		// et retournement de la carteproposée à l'atout
		List<Main> mains = Belote.initialiserMains();
		Carte atoutPossible = Belote.distribuerDebut(jeu,mains);
		for (Main main : mains) {
			displayGame(main);
		}
		System.out.println("Atout : " + atoutPossible);
		
		// 2 tours de choix -> simulation puis distribution de la suite des cartes
		System.out.println("Le joueur 2 prend la carte " + atoutPossible);
		Belote.distribuerFin(jeu,mains,atoutPossible,2);
		Famille atout = Famille.Pique;
		for (Main main : mains) {
			displayGame(main);
		}
		
		// simulation un tour de jeu
		Tour tour = new Tour(new Carte(Valeur.Dix, Famille.Coeur), Famille.Pique);
		tour.jouer(new Carte(Valeur.As, Famille.Carreau));
		tour.jouer(new Carte(Valeur.Roi, Famille.Coeur));
		tour.jouer(new Carte(Valeur.Sept, Famille.Coeur));
		displayGame(tour);
		System.out.println("Carte gagnante : " + tour.carteGagnante());
		
		// simulation un tour de jeu
		Tour tour2 = new Tour(new Carte(Valeur.Dix, Famille.Coeur), Famille.Pique);
		tour2.jouer(new Carte(Valeur.As, Famille.Carreau));
		tour2.jouer(new Carte(Valeur.Roi, Famille.Coeur));
		tour2.jouer(new Carte(Valeur.Sept, Famille.Pique));
		displayGame(tour2);
		System.out.println("Carte gagnante : " + tour2.carteGagnante());
		
		// simulation un tour de jeu
		Tour tour3 = new Tour(new Carte(Valeur.Dix, Famille.Pique), Famille.Pique);
		tour3.jouer(new Carte(Valeur.As, Famille.Carreau));
		tour3.jouer(new Carte(Valeur.As, Famille.Pique));
		tour3.jouer(new Carte(Valeur.Valet, Famille.Pique));
		displayGame(tour3);
		System.out.println("Carte gagnante : " + tour3.carteGagnante());
	}
}