fork download
  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3.  
  4. class Joueur {
  5.  
  6. private String nom;
  7. private ArrayList<Pion> listePion;
  8. private ArrayList<Pion> pionsCaptures;
  9. private static int nbJoueur = 0;
  10. private int numero;
  11. private int nbpions[];
  12.  
  13.  
  14. public Joueur(String s) {
  15. this.nom = s;
  16. this.listePion = new ArrayList<Pion>();
  17. this.pionsCaptures = new ArrayList<Pion>();
  18. Joueur.nbJoueur++;
  19. this.numero = Joueur.nbJoueur;
  20. this.nbpions = new int[]{4,4};
  21. }
  22.  
  23. public void placeFantomeDebut(int numCase, Tablier t, boolean gentil) {
  24. //fonction pour que le joueurplace ses fantomes en d�but de partie
  25. int nbreste[] = new int[]{4 - this.nbpions[0], 4 - this.nbpions[1]};
  26. int j;
  27. if (this.numero == 1) {
  28. j = 0; // si c'est le joueur 1 il place les fantomes en bas (ligne 0 et 1)
  29. } else {
  30. j = t.getTaille() - 2; // sinon il les place en haut (deux dernieres lignes)
  31. }
  32. for(int i = 1; i < t.getTaille() - 1; i++) {
  33. if((nbreste[0] > 0 && !(gentil)) || (nbreste[1] > 0 && gentil)) {
  34. this.listePion.add(new Pion(i, j , this, gentil));
  35. 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)
  36. nbreste[(gentil) ? 0 : 1]--;
  37. System.out.println("Le pion a �t� plac� sur la case " + i + j);
  38. } else {
  39. System.out.println("Vous ne pouvez pas placer le pion ici.");
  40. }
  41. }
  42. System.out.println(this.afficheFantomeAPlacer(nbreste[0], nbreste[1]) );
  43. }
  44.  
  45. //reste a faire : deplacement, manger et ajouter liste des captures (retir � l'autre)
  46. //faire le cas gagne si sors un gentil fant�me
  47.  
  48. public String caseDeplace(Pion p, Tablier t) {
  49. String[] listeMvt = new String[p.mouvementsPossibles(t)[0].length];
  50. // on va y stocker les coordon�es de type A1, V5...
  51. System.out.println("Les mouvements possible pour ce pion sont les cases :");
  52. for(int i = 0; i < listeMvt.length; i++) {
  53. String a = new Character((char)(p.mouvementsPossibles(t)[i][0] + 65)).toString(); // code ASCII
  54. listeMvt[i] = a + Integer.toString(p.mouvementsPossibles(t)[i][1]);
  55. // on met la lettre et le chiffre
  56. System.out.println(listeMvt[i]);
  57. }
  58. boolean pasDeplace=true;
  59. String posi=listeMvt[0];//posi = premier des mvt possibles
  60. while(pasDeplace) {//tant qu'on a pas fait le d�placement :
  61. Scanner sc = new Scanner(System.in);
  62. System.out.println("\n" + this.nom + ", sur quelle case voulez-vous d�placer ce pion?");
  63. posi = sc.nextLine();// on scanne
  64. for(int i = 0; i < listeMvt.length; i++) {
  65. if(listeMvt[i] == posi) {
  66. System.out.println("\n Vous allez d�placer votre pion sur la case "+posi);
  67. Tablier.Case avant = t.getCase(p.getCoordonnees()[0],p.getCoordonnees()[1]);
  68. Tablier.Case apres = t.getCase(p.mouvementsPossibles(t)[i][0],
  69. p.mouvementsPossibles(t)[i][1]);
  70. Pion a = avant.prendPion();
  71. apres.posePion(a);
  72. pasDeplace = false;
  73. }
  74. }
  75. System.out.println("D�placement impossible...");
  76. sc.close();
  77. }
  78. return posi;
  79. }
  80.  
  81. public boolean aGagne() {
  82. int nbGPris = 0;
  83. int nbMPoss = 0;
  84. for(Pion p : this.pionsCaptures) {
  85. if(p.estGentil()) {
  86. nbGPris++;
  87. }
  88. }
  89. for(Pion p: this.listePion) {
  90. if(!p.estGentil()){
  91. nbMPoss++;
  92. }
  93. }
  94. if(nbGPris == 4 || nbMPoss == 0) {
  95. return true;
  96. }
  97. return false;
  98. }
  99.  
  100. public String afficheFantomeAPlacer(int resteG, int resteM) {
  101. return (this.nom + " il vous reste " + resteG + " fantomes gentils et " + resteM + " fantomes m�chants � placer");
  102. }
  103.  
  104. public int getNumero() {
  105. return this.numero;
  106. }
  107. }
  108.  
  109.  
  110. class Pion {
  111.  
  112. private int[] coordonnees;
  113. private Joueur joueur; //remplacer par joueur et non int
  114. private boolean gentil;
  115.  
  116. public Pion(int lettre, int chiffre, Joueur j, boolean type){
  117. this.coordonnees = new int[2];
  118. this.coordonnees[0] = lettre;
  119. this.coordonnees[1] = chiffre;
  120. this.joueur = j;
  121. this.gentil = type;
  122. }
  123.  
  124. public int[][] mouvementsPossibles(Tablier t){
  125. int[][] listeCase = new int[2][];
  126. int i = 0;
  127. //====== Mouvement horizontal======
  128. if(this.coordonnees[1] - t.getTaille() - 1 > 0) {
  129. //si le pion n'est pas sur la ligne la plus basse
  130. listeCase[i][0] = this.coordonnees[0];
  131. listeCase[i][1] = this.coordonnees[1] + 1;
  132. i++;
  133. //on stocke la case en haut dns la liste des mvt;
  134. }
  135. if(this.coordonnees[1]-Math.pow(t.getTaille(),2)-1>0) {
  136. //si le pion n'est pas sur la ligne la plus haute
  137. listeCase[i][0] = this.coordonnees[0];
  138. listeCase[i][1] = this.coordonnees[1] - 1;
  139. i++;
  140. //on stocke la case en haut dns la liste des mvt;
  141. }
  142. //==========Mouvement vertical=======
  143. if(this.coordonnees[0] % 6 != 0) {
  144. //si le pion n'est pas sur la colonne la plus � gauche
  145. listeCase[i][0] = this.coordonnees[0] + 1;
  146. listeCase[i][1] = this.coordonnees[1];
  147. i++;
  148. //on stocke la case � gauche dns la liste des mvt;
  149. }
  150. if(this.coordonnees[0] % 5 != 0) {
  151. //si le pion n'est pas sur la colonne la plus � droite
  152. listeCase[i][0] = this.coordonnees[0] - 1;
  153. listeCase[i][1] = this.coordonnees[1];
  154. i++;
  155. //on stocke la case � droite dns la liste des mvt;
  156. }
  157. return listeCase;
  158. }
  159.  
  160. public boolean peutBouger(int lettre, int chiffre, Tablier t) {
  161. for(int i : this.mouvementsPossibles(t)[0]) {
  162. if(lettre == i){
  163. for(int j : this.mouvementsPossibles(t)[1]) {
  164. if(chiffre==j) {//si la case est un d�placement possible,
  165. if(t.getCase(i, j).getPion().joueur.getNumero() != this.joueur.getNumero()) {
  166. //v�rifier qu'il n'y a pas un pion appartenant au joueuer qui joue
  167. return true;
  168. }
  169. }
  170. }
  171. }
  172. }
  173. return false;
  174. }
  175.  
  176. public int[] getCoordonnees() {
  177. return this.coordonnees;
  178. }
  179.  
  180. public void mange(Pion p) {
  181. this.coordonnees = p.coordonnees;
  182. p.coordonnees[0] = -1;//coordonn�es de p n'existent plus
  183. p.coordonnees[1] = -1;
  184. // faire agrandire liste pion mang� dans joueuer;
  185. }
  186.  
  187. public int appartientAuJoueur() {
  188. return this.joueur.getNumero();
  189. }
  190.  
  191. public boolean estGentil() {
  192. return this.gentil;
  193. }
  194. }
  195.  
  196. class Tablier {
  197.  
  198. //================== CLASSE CASE===================================
  199. public class Case {
  200.  
  201. private int[] coordonnees; // les coordonn�es de la case
  202. private Pion fantome; // le pion qu'elle contient (peut etre null)
  203. private boolean sortie; //1 si c'est une des cases de sortie, 0 sinon
  204.  
  205. public Case(int lettre, int chiffre, boolean sortie) {
  206. this.coordonnees = new int[2];
  207. this.coordonnees[0] = lettre; //cette coodon�e correspond � la lettre du tablier
  208. this.coordonnees[1] = chiffre; //cette coodon�e correspond au chiffre du tablier
  209. this.fantome = null; // au d�part les cases sont vides
  210. this.sortie = sortie;
  211. }
  212.  
  213. public boolean posePion(Pion p) {
  214. if(this.fantome == null) { //si la case est vide
  215. this.fantome = p;// on place le pion
  216. return true; // on confirme que l'action a �t� faite
  217. }
  218. if(this.fantome.appartientAuJoueur() != p.appartientAuJoueur()) {
  219. //si le pion contenu sur la case de d�placement appartien � un autre joueur
  220. Pion estMange = this.prendPion(); //Le pion de la case va �tre pris
  221. this.fantome = p;//on replace le pion par le mangeur
  222. p.mange(estMange);
  223. return true; // on dit que le pion a boug�
  224. }
  225. return false; // si rien de tout �a n'a �t� fait, on informe que le pion n'a pas �t� boug�
  226. }
  227.  
  228. public Pion prendPion() {//On retire le pion de la case et on retourne le pion retir�
  229. Pion pris = this.fantome;
  230. if(this.fantome != null) {
  231. this.fantome = null;
  232. }
  233. return pris;
  234. }
  235. public Pion getPion() {
  236. return this.fantome;
  237. }
  238. public boolean estSortie() {
  239. return this.sortie;
  240. }
  241.  
  242. public int[] getCoord() {
  243. return this.coordonnees;
  244. }
  245.  
  246. public boolean estVide() {
  247. return this.fantome == null;
  248. }
  249. }
  250. //=============================FIN CLASSE CASE=============================
  251. private Case[][] cases;
  252. private int taille;
  253.  
  254. public Tablier(int i) {
  255. this.taille = i;
  256. this.cases = new Case[i][i];// on cr�e un tablier de taille ixi
  257. for(int lettre = 0; lettre < this.cases.length; lettre++)
  258. for(int chiffre = 0; chiffre < this.cases[lettre].length; chiffre++)//parcours tablier
  259. this.cases[lettre][chiffre] = new Case(lettre, chiffre,
  260. ((lettre == 0 && chiffre == 0) ||
  261. (lettre == (this.cases.length - 1) && chiffre == (this.cases.length - 1)) ||
  262. (lettre == 0 && chiffre == (this.cases[lettre].length - 1)) ||
  263. (lettre == (this.cases.length - 1) && chiffre == 0)));
  264. //pour mettre les cases correspondantes.
  265. //Le bool�en de case.sortie est d�termin� par les corredonn�es de la case
  266. }
  267.  
  268. public Case[][] getToutesLesCases(){
  269. return this.cases;
  270. }
  271. public Case getCase(int i, int j){
  272. return this.cases[i][j];
  273. }
  274.  
  275. public int getTaille(){
  276. return this.taille;
  277. }
  278. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
spoj: The program compiled successfully, but main class was not found.
      Main class should contain method: public static void main (String[] args).
stdout
Standard output is empty