Petit problème pour programmation de Puissance 4 [Résolu/Fermé]

Signaler
Messages postés
22
Date d'inscription
dimanche 25 septembre 2011
Statut
Membre
Dernière intervention
5 mai 2014
-
Messages postés
19
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
26 octobre 2018
-
Salut!
Je suis en Terminale S avec spécialité ISN et mon équipe a choisi de programmer Puissance 4. Voilà, pour l'instant on a très bien avancé, mais il y a un petit problème sur les vérifications horizontales et verticales qui permettent en quelque sorte ici d'arbitrer le jeu. Mon problème c'est que j'ai les deux fonctions en place sauf que lorsque je joue, et que j'aligne 4 pions, il n'y a rien qui se passe, les fonctions ne se manifestent pas. Je suis sur Java's cool. Je mets mon programme à disposition ici. Si c'est possible de le corriger ou de m'indiquer les erreurs que j'ai commis ça serait sympa. Voilà, merci d'avance. :)



final int demarrage = 0;

final int jeuEnCours = 1;

final int finDuJeu = 2;

final int quitterJeu = 3;

final int jeuEnPause = 4;

final int joueurGagne = 5;

final int joueurPerd = 6;

final int arbitrage = 7;

final int TEMPO_CHARGEMENT = 5000;

final int TEMPO_PARTIE = 6000;

// variables globales
int plateau[][] = new int [7][6];

int case0 = 0;

int case1 = 0;

int case2 = 0;

int case3 = 0;

int case4 = 0;

int case5 = 0;

int case6 = 0;

int colonne;

int status;
int ligne;

void pageDePresentation() {
println("*******************************************************************");
println("*******************************************************************");
println("*******************************************************************");
println("*******************************************************************");
println("**********BIENVENUE SUR PUISSANCE 4 NOUVELLE GENERATION!!**********");
println("*******************************************************************");
println("*******************************************************************");
println("*******************************************************************");
println("*******************************************************************");
println("********************************************************");
println("*************");
println("*******************************************************************");
println("*******************************************************************");
println("*******************************************************************");
println("*******************************************************************");
println("************************Veuillez patienter*************************");
println("***********************Chargement en cours!************************");
println("*******************************************************************");
println("*******************************************************************");
println("*******************************************************************");
println("*******************************************************************");
sleep(30);
clear();
}

// Vérifie si la colonne choisie est remplie
void verifColonnesRemplies() {
if (((colonne ==0) && (case0 >5)) || ((colonne ==1) && (case1 >5)) || ((colonne ==2) && (case2 >5)) || ((colonne ==3) && (case3 >5)) || ((colonne ==4) && (case4 >5)) || ((colonne ==5) && (case5 >5)) || ((colonne ==6) && (case6 >5))) {
println("");
println("La colonne que vous avez choisi est remplie, veuillez choisir une colonne autre que celle(s) qui sont remplie(s)");
colonne =-1;
}
}

// Vérifie s'il y a un alignement horizontal
void verifHorizontale() {
int i, j;
for (i =0; i <4; i ++) {
for (j =0; j <6; j ++) {
if ((plateau[i][j] ==1) && (plateau[i +1][j] ==1) && (plateau[i +2][j] ==1) && (plateau[i +3][j] ==1)) {
status = arbitrage;
}
}
}
}

// Vérifie s'il y a un alignement vertical
void verifVerticale() {
int i, j;
for(i=0; i<7;i++){
for(j=0; j<3;j++){
if ((plateau[i][j] ==1) && (plateau[i][j+1] ==1) && (plateau[i][j+2] ==1)&& (plateau[i][j+3] ==1) ) {
status = arbitrage;
}
}


}
}

void faireJouerJoueur() {

// On demande au joueur de choisir une colonne
colonne = readInteger("A vous de jouer! Veuillez choisir une colonne");
verifColonnesRemplies();

switch(colonne){
case 0: plateau[colonne][case0] =1; // Sur la colonne choisie, la première case prend la valeur de 1
plateau[colonne][case0] = plateau[colonne][case0 ++ ]; // Lors que la case est choisie, on lui ajoute 1 pour qu'on puisse jouer sur la case d'au dessus
break;
case 1 :plateau[colonne][case1] =1;
plateau[colonne][case1] = plateau[colonne][case1 ++ ];
break;
case 2 : plateau[colonne][case2] =1;
plateau[colonne][case2] = plateau[colonne][case2 ++ ];
break;
case 3 : plateau[colonne][case3] =1;
plateau[colonne][case3] = plateau[colonne][case3 ++ ];
break;
case 4 :plateau[colonne][case4] =1;
plateau[colonne][case4] = plateau[colonne][case4 ++ ];
break;
case 5 :plateau[colonne][case5] =1;
plateau[colonne][case5] = plateau[colonne][case5 ++ ];
break;
case 6 :plateau[colonne][case6] =1;
plateau[colonne][case6] = plateau[colonne][case6 ++ ];
break;
default:println("Veuillez retaper votre choix");
}



}

void faireJouerOrdi() {

// Pareil que pour la fonction faireJouerJoueur() mais cette fois la colonne est choisie aléatoirement
colonne = random(0, 7);

if (colonne ==0) {
plateau[colonne][case0] =2;
}
if (colonne ==1) {
plateau[colonne][case1] =2;
}
if (colonne ==2) {
plateau[colonne][case2] =2;
}
if (colonne ==3) {
plateau[colonne][case3] =2;
}
if (colonne ==4) {
plateau[colonne][case4] =2;
}
if (colonne ==5) {
plateau[colonne][case5] =2;
}
if (colonne ==6) {
plateau[colonne][case6] =2;
}

if (colonne ==0) {
plateau[colonne][case0] = plateau[colonne][case0 ++ ];
}
if (colonne ==1) {
plateau[colonne][case1] = plateau[colonne][case1 ++ ];
}
if (colonne ==2) {
plateau[colonne][case2] = plateau[colonne][case2 ++ ];
}
if (colonne ==3) {
plateau[colonne][case3] = plateau[colonne][case3 ++ ];
}
if (colonne ==4) {
plateau[colonne][case4] = plateau[colonne][case4 ++ ];
}
if (colonne ==5) {
plateau[colonne][case5] = plateau[colonne][case5 ++ ];
}
if (colonne ==6) {
plateau[colonne][case6] = plateau[colonne][case6 ++ ];
}
}

void main() {
// Déclaration des variables
int i;
int j;
int choixMenu = 0;
int choixDemarrage = 0;

int status =0;
// Page de présentation
pageDePresentation();
// Demande du nom du joueur
String nom = readString("Quel est votre nom?");
//Menu principal
println(" ");
println(" ");
println(" ");
println(" ");
println(" BIENVENUE SUR PUISSANCE 4 " + nom + " ");
println(" ");
println(" ");
println(" ");
println(" ");
println(" 1/ Jouer ");
println(" 2/ Quitter ");
println(" ");
println(" ");
println(" ");
println(" ");
println(" ");
println(" ");
println(" ");
println(" ");
// Choix de l'événement
while ((choixMenu !=1) && (choixMenu !=2)) {
choixMenu = readInteger("Veuillez taper 1 ou 2");
switch(choixMenu) {
case 1 : println("Ok on va jouer");
status = demarrage;
break;
case 2 : println("Ok, on va quitter");
status = quitterJeu;
break;
default : println("Veuillez retaper votre choix");
}
}
// Choix de(s) option(s) du jeu
while ((status == demarrage) && (choixDemarrage !=1) && (choixDemarrage !=2)) {
choixDemarrage = readInteger("Voulez vous commencer en premier? Taper 1 pour oui ou 2 pour non.");
switch(choixDemarrage) {
case 1 : println("C'est compris, vous commencez en premier!");
break;
case 2 : println("C'est compris, vous ne jouez pas en premier!");
break;
default : println("Veuillez retaper votre choix.");
}
}
if (status == quitterJeu) {
// A coder
}
if ((choixDemarrage == 1) || (choixDemarrage == 2)) {
status = jeuEnCours;
}
clear();
//Entrée en jeu
if (status == jeuEnCours) {
// Réglage du tableau
for (i = 0; i <7; i ++) {
for (j = 0; j <6; j ++) {
plateau[i][j] = 0;
}
}
// Affichage du tableau avec des cases vides
println("|*****|*****|*****|*****|*****|*****|*****|");
for (j =5; j >=0; j --) {
for (i =0; i <7; i ++) {
print("| " + plateau[i][j] + " ");
}
println("|");
println("|*****|*****|*****|*****|*****|*****|*****|");
}
println("");
println("| 0 | 1 | 2 | 3 | 4 | 5 | 6 |");
while (status != arbitrage) {
if (choixDemarrage ==1) {
faireJouerJoueur();
faireJouerOrdi();
} else if (choixDemarrage ==2) {
faireJouerOrdi();
faireJouerJoueur();
}
verifVerticale();
verifHorizontale();
if (status == arbitrage) {
break;
}
clear();
println("|*****|*****|*****|*****|*****|*****|*****|");
for (j =5; j >=0; j --) {
for (i =0; i <7; i ++) {
print("| " + plateau[i][j] + " ");
}
println("|");
println("|*****|*****|*****|*****|*****|*****|*****|");
}
println("");
println("| 0 | 1 | 2 | 3 | 4 | 5 | 6 |");
}
}
}



Bon j'avoue c'est un peu long comme programme :p

4 réponses

Messages postés
9687
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
21 juin 2020
1 181
Salut,
c'est du C++ ça ? final ne fait pas partie des mots clefs C++.
println n'est pas une fonction C++ standard.
Ton programme est mal écrit, il n'est pas évolutif, trop de cas particuliers de conditions de bords etc.
En plus, il n'est pas indenté (utilise les balises de code disponible parmi les styles de mise en forme).
Ton choix de passer par une variable globale "status" est peu judicieux et rend le code difficile à lire. Utilise les retours de fonction, c'est mieux.
Tu vérifies juste si tu as gagné, pas si l'ordi a gagné.
Messages postés
22
Date d'inscription
dimanche 25 septembre 2011
Statut
Membre
Dernière intervention
5 mai 2014

En fait c'est du Java's cool, d'ou la présence des finals et println.
Mais bon, j'ai résolu le problème en utilisant plein de trucs. Bref, merci beaucoup pour la réponse et bien sur je prendrais en compte vos indications pour améliorer le programme.
Messages postés
1
Date d'inscription
vendredi 21 mars 2014
Statut
Membre
Dernière intervention
21 mars 2014

Salut, j'essaye de faire un puissance 4 moi aussi avec javascool et je voulait savoir qu'est ce que vous avez changé pour que le programme soit fonctionnel. Je ne suis pas parti exactement comme vous mais ça pourrait m'aider.
Merci.
En fait, j'ai tout modifié, j'ai enlevé presque tout les "status". J'ai optimisé le programme. C'est surtout le status d'arbitrage qui m'a gêné, je l'ai enlevé et je l'ai remplacé par un simple if.
Messages postés
19
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
26 octobre 2018

Bonjour,

Toujours en TS/ISS/P4, mais plus court, deux filles :


void grille(String color) {
int x1 = -20;
int x2 = 20;
int y1 = -20;
int y2 = 20;
int nbl = (int)Math.floor(40 / N);
// écartement, nombre de pixels entre deux lignes.

int nbc = (int)Math.floor(40 / N);
// écartement, nombre de pixels entre deux colonnes.

for (int i = 0; i <= N; i = i + 1) {
hline( -20 + nbl * i, color);
}
for (int i = 0; i <= N; i = i + 1) {
vline( -20 + nbc * i, color);
}
}

void vline(int y, String color) { //GRILLE
// Lignes verticales.
for (int i = -20; i <= 20; i = i + 1) {
setPixel(y, i, color);
}
}

void hline(int x, String color) { //GRILLE
for (int i = -20; i <= 20; i = i + 1) {
// Lignes horizontales.
setPixel(i, x, color);
}
}

public static int N =5; // Nombre de lignes et de colonnes. Peut être changé.


void main() {
reset(20, 20);
String svc;
svc = "blue";
grille(svc);
int case_ = (40 / N) * (40 / N);
}

Merci !
Messages postés
19
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
26 octobre 2018

Erreur de syntaxe ligne 1 :
cannot access java.lang.Math
bad class file: java\lang\Math.class(java\lang:Math.class)
class file has wrong version 52.0, should be 50.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
import static java.lang.Math.*;import static org.javascool.macros.Macros.*;import static org.javascool.macros.Stdin.*;import static org.javascool.macros.Stdout.*;import static org.javascool.proglets.javaProg.Functions.*;public class JvsToJavaTranslated1 implements Runnable{ private static final long serialVersionUID = 1L; public void run() { try{ main(); } catch(Throwable e) { if (e.toString().matches(".*Interrupted.*"))println("\n-------------------\nProgramme arrêté !\n-------------------\n"); else println("\n-------------------\nErreur lors de l'exécution de la proglet\n"+org.javascool.core.Jvs2Java.report(e)+"\n-------------------\n");} }public static void main(String[] usage) { new org.javascool.widgets.MainFrame().reset("javaProg démo", 700, 600, org.javascool.core.ProgletEngine.getInstance().setProglet("javaProg").getProgletPane()).setRunnable(new JvsToJavaTranslated1());}
^