import java.util.ArrayList;
import java.util.Scanner;
class Joueur {
private ArrayList<Pion> listePion;
private ArrayList<Pion> pionsCaptures;
private static int nbJoueur = 0;
private int numero;
private int nbpions[];
this.nom = s;
this.listePion = new ArrayList<Pion>();
this.pionsCaptures = new ArrayList<Pion>();
Joueur.nbJoueur++;
this.numero = Joueur.nbJoueur;
this.nbpions = new int[]{4,4};
}
public void placeFantomeDebut(int numCase, Tablier t, boolean gentil) {
//fonction pour que le joueurplace ses fantomes en d�but de partie
int nbreste[] = new int[]{4 - this.nbpions[0], 4 - this.nbpions[1]};
int j;
if (this.numero == 1) {
j = 0; // si c'est le joueur 1 il place les fantomes en bas (ligne 0 et 1)
} else {
j = t.getTaille() - 2; // sinon il les place en haut (deux dernieres lignes)
}
for(int i = 1; i < t.getTaille() - 1; i++) {
if((nbreste[0] > 0 && !(gentil)) || (nbreste[1] > 0 && gentil)) {
this.listePion.add(new Pion(i, j , this, gentil));
this.nbpions[(gentil) ? 0 : 1]++; // Opérateur ternaire : si gentil vrai, alors renvoyer 0 sinon 1 (si je ne me suis pas trompée pour l'indice)
nbreste[(gentil) ? 0 : 1]--;
System.
out.
println("Le pion a �t� plac� sur la case " + i
+ j
); } else {
System.
out.
println("Vous ne pouvez pas placer le pion ici."); }
}
System.
out.
println(this.
afficheFantomeAPlacer(nbreste
[0], nbreste
[1]) ); }
//reste a faire : deplacement, manger et ajouter liste des captures (retir � l'autre)
//faire le cas gagne si sors un gentil fant�me
public String caseDeplace
(Pion p, Tablier t
) { String[] listeMvt
= new String[p.
mouvementsPossibles(t
)[0].
length]; // on va y stocker les coordon�es de type A1, V5...
System.
out.
println("Les mouvements possible pour ce pion sont les cases :"); for(int i = 0; i < listeMvt.length; i++) {
String a
= new Character((char)(p.
mouvementsPossibles(t
)[i
][0] + 65)).
toString(); // code ASCII listeMvt
[i
] = a
+ Integer.
toString(p.
mouvementsPossibles(t
)[i
][1]); // on met la lettre et le chiffre
System.
out.
println(listeMvt
[i
]); }
boolean pasDeplace=true;
String posi
=listeMvt
[0];//posi = premier des mvt possibles while(pasDeplace) {//tant qu'on a pas fait le d�placement :
Scanner sc
= new Scanner
(System.
in); System.
out.
println("\n" + this.
nom + ", sur quelle case voulez-vous d�placer ce pion?"); posi = sc.nextLine();// on scanne
for(int i = 0; i < listeMvt.length; i++) {
if(listeMvt[i] == posi) {
System.
out.
println("\n Vous allez d�placer votre pion sur la case "+posi
); Tablier.Case avant = t.getCase(p.getCoordonnees()[0],p.getCoordonnees()[1]);
Tablier.Case apres = t.getCase(p.mouvementsPossibles(t)[i][0],
p.mouvementsPossibles(t)[i][1]);
Pion a = avant.prendPion();
apres.posePion(a);
pasDeplace = false;
}
}
System.
out.
println("D�placement impossible..."); sc.close();
}
return posi;
}
public boolean aGagne() {
int nbGPris = 0;
int nbMPoss = 0;
for(Pion p : this.pionsCaptures) {
if(p.estGentil()) {
nbGPris++;
}
}
for(Pion p: this.listePion) {
if(!p.estGentil()){
nbMPoss++;
}
}
if(nbGPris == 4 || nbMPoss == 0) {
return true;
}
return false;
}
public String afficheFantomeAPlacer
(int resteG,
int resteM
) { return (this.nom + " il vous reste " + resteG + " fantomes gentils et " + resteM + " fantomes m�chants � placer");
}
public int getNumero() {
return this.numero;
}
}
class Pion {
private int[] coordonnees;
private Joueur joueur; //remplacer par joueur et non int
private boolean gentil;
public Pion(int lettre, int chiffre, Joueur j, boolean type){
this.coordonnees = new int[2];
this.coordonnees[0] = lettre;
this.coordonnees[1] = chiffre;
this.joueur = j;
this.gentil = type;
}
public int[][] mouvementsPossibles(Tablier t){
int[][] listeCase = new int[2][];
int i = 0;
//====== Mouvement horizontal======
if(this.coordonnees[1] - t.getTaille() - 1 > 0) {
//si le pion n'est pas sur la ligne la plus basse
listeCase[i][0] = this.coordonnees[0];
listeCase[i][1] = this.coordonnees[1] + 1;
i++;
//on stocke la case en haut dns la liste des mvt;
}
if(this.
coordonnees[1]-Math.
pow(t.
getTaille(),
2)-1>0) { //si le pion n'est pas sur la ligne la plus haute
listeCase[i][0] = this.coordonnees[0];
listeCase[i][1] = this.coordonnees[1] - 1;
i++;
//on stocke la case en haut dns la liste des mvt;
}
//==========Mouvement vertical=======
if(this.coordonnees[0] % 6 != 0) {
//si le pion n'est pas sur la colonne la plus � gauche
listeCase[i][0] = this.coordonnees[0] + 1;
listeCase[i][1] = this.coordonnees[1];
i++;
//on stocke la case � gauche dns la liste des mvt;
}
if(this.coordonnees[0] % 5 != 0) {
//si le pion n'est pas sur la colonne la plus � droite
listeCase[i][0] = this.coordonnees[0] - 1;
listeCase[i][1] = this.coordonnees[1];
i++;
//on stocke la case � droite dns la liste des mvt;
}
return listeCase;
}
public boolean peutBouger(int lettre, int chiffre, Tablier t) {
for(int i : this.mouvementsPossibles(t)[0]) {
if(lettre == i){
for(int j : this.mouvementsPossibles(t)[1]) {
if(chiffre==j) {//si la case est un d�placement possible,
if(t.getCase(i, j).getPion().joueur.getNumero() != this.joueur.getNumero()) {
//v�rifier qu'il n'y a pas un pion appartenant au joueuer qui joue
return true;
}
}
}
}
}
return false;
}
public int[] getCoordonnees() {
return this.coordonnees;
}
public void mange(Pion p) {
this.coordonnees = p.coordonnees;
p.coordonnees[0] = -1;//coordonn�es de p n'existent plus
p.coordonnees[1] = -1;
// faire agrandire liste pion mang� dans joueuer;
}
public int appartientAuJoueur() {
return this.joueur.getNumero();
}
public boolean estGentil() {
return this.gentil;
}
}
class Tablier {
//================== CLASSE CASE===================================
public class Case {
private int[] coordonnees; // les coordonn�es de la case
private Pion fantome; // le pion qu'elle contient (peut etre null)
private boolean sortie; //1 si c'est une des cases de sortie, 0 sinon
public Case(int lettre, int chiffre, boolean sortie) {
this.coordonnees = new int[2];
this.coordonnees[0] = lettre; //cette coodon�e correspond � la lettre du tablier
this.coordonnees[1] = chiffre; //cette coodon�e correspond au chiffre du tablier
this.fantome = null; // au d�part les cases sont vides
this.sortie = sortie;
}
public boolean posePion(Pion p) {
if(this.fantome == null) { //si la case est vide
this.fantome = p;// on place le pion
return true; // on confirme que l'action a �t� faite
}
if(this.fantome.appartientAuJoueur() != p.appartientAuJoueur()) {
//si le pion contenu sur la case de d�placement appartien � un autre joueur
Pion estMange = this.prendPion(); //Le pion de la case va �tre pris
this.fantome = p;//on replace le pion par le mangeur
p.mange(estMange);
return true; // on dit que le pion a boug�
}
return false; // si rien de tout �a n'a �t� fait, on informe que le pion n'a pas �t� boug�
}
public Pion prendPion() {//On retire le pion de la case et on retourne le pion retir�
Pion pris = this.fantome;
if(this.fantome != null) {
this.fantome = null;
}
return pris;
}
public Pion getPion() {
return this.fantome;
}
public boolean estSortie() {
return this.sortie;
}
public int[] getCoord() {
return this.coordonnees;
}
public boolean estVide() {
return this.fantome == null;
}
}
//=============================FIN CLASSE CASE=============================
private Case[][] cases;
private int taille;
public Tablier(int i) {
this.taille = i;
this.cases = new Case[i][i];// on cr�e un tablier de taille ixi
for(int lettre = 0; lettre < this.cases.length; lettre++)
for(int chiffre = 0; chiffre < this.cases[lettre].length; chiffre++)//parcours tablier
this.cases[lettre][chiffre] = new Case(lettre, chiffre,
((lettre == 0 && chiffre == 0) ||
(lettre == (this.cases.length - 1) && chiffre == (this.cases.length - 1)) ||
(lettre == 0 && chiffre == (this.cases[lettre].length - 1)) ||
(lettre == (this.cases.length - 1) && chiffre == 0)));
//pour mettre les cases correspondantes.
//Le bool�en de case.sortie est d�termin� par les corredonn�es de la case
}
public Case[][] getToutesLesCases(){
return this.cases;
}
public Case getCase(int i, int j){
return this.cases[i][j];
}
public int getTaille(){
return this.taille;
}
}