cm-2016-10-14-isn-squelette-avance-pour-le-puissance-4

publicité
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 !
Téléchargement