ISN - Squelette de code bien avancé pour le « Puissance 4 » Les élèves en question n’étaient encore qu’à puissance 1, y’avait urgence. ⊲ Ce code est basé sur le code d’élèves, lui même dérivé du code du « Tic-Tac-Toe » déjà fourni. C’est une base à copier/coller dans javascool, à finir, et à améliorer ! /************************************** * Déclaration des variables globales * **************************************/ int cases[][] = new int[6][7]; /************************* * Fonctions d’affichage * *************************/ void initialisationGrille() { //on initialise la grille for (int i = 0; i < 6; i ++) for (int j = 0; j < 7; j ++) cases[i][j] =0; } String afficheCase(int entier) { //on choisis la valeur de "entier" pour lesquelles seront affichées x ou o switch(entier) { case 0 : return " "; case 1 : return "x"; case 2 : return "o"; default : return " "; } } void affichageGrille() { clear(); //on affiche la grille for (int i = 5; i >=0; i --) { for (int j =0; j <7; j ++) print("|" + afficheCase(cases[i][j])); println("|"); } println("---------------"); } /******************************* * Fonctions de gestion du jeu * *******************************/ int choixColonne(int c) { //a modifier encore pour vérifier qu’une colonne soit plein ou pas ! int i =0, j =7,joueur = c %2 +1; //là il faudra un boolean pleine = true avant la boucle while (pleine) println("A vous de jouer, joueur " + joueur); while (j <0 || j >6) j = readInteger("Choisissez la colonne dans laquelle vous mettez votre jeton while (cases [i][j] > 0) i ++; //un && i<6 à rajouter sinon ça va planter ... essayez de forcer sur une colonne... cases[i][j] = joueur; /* si i fait pas 6 et sinon ? Il faudra encore un while (pleine == true) bien placée * qui d’ailleurs revient à while (pleine) * si on peut remplir cases[i][j], alors pleine = false * sinon on recommence */ return (c +1); } int partieTerminee() { return 0; /* evidemment il faut programmer les tests pour voir si c’est fini ou pas * répondre 1 si joueur 1 a gagné et return 2 si c’est l’autre et 0 si on continue ! * il faut tester lignes, colonnes et diagonales ;-) */ } /*********************** * Programme principal * ***********************/ void main() { int compteur =0; initialisationGrille(); while (compteur < 42 && partieTerminee() == 0) { //six fois sept ? ou une autre question affichageGrille(); compteur = choixColonne(compteur); } affichageGrille(); /* et là écrire qui a gagné ... ou pas ! */ } Exemple d’exécution | | | | | | | | | | | | | | | | | | | | | |o| | | |o| | |o|x| | | |o|o|o|o|x| | |x|x|o|x|x|x|x| --------------A vous de jouer, joueur 1 Notez que la victoire n’est pas encore gérée... | | | | | |o| | | | | | | |x| | | | | | | |o| | | |o| |X|o|x| | | |o|o|o|o|x| | |x|x|o|x|x|x|x| --------------A vous de jouer, joueur 2 ------------------Erreur lors de l’exécution de la proglet java.lang.ArrayIndexOutOfBoundsException: 6 .choixColonne(JvsToJavaTranslated2.java:48) .main(JvsToJavaTranslated2.java:77) .run(JvsToJavaTranslated2.java:84) ------------------... et que si l’on instiste sur l’avant dernière colonne, la numéro 5, ça pose problème !