Petit problème pour programmation de Puissance 4

Résolu/Fermé
indianboy33 Messages postés 22 Date d'inscription dimanche 25 septembre 2011 Statut Membre Dernière intervention 5 mai 2014 - Modifié par indianboy33 le 19/02/2014 à 11:42
Leydorn Messages postés 19 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 26 octobre 2018 - 23 avril 2015 à 18:08
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
A voir également:

4 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 févr. 2014 à 11:58
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é.
0
indianboy33 Messages postés 22 Date d'inscription dimanche 25 septembre 2011 Statut Membre Dernière intervention 5 mai 2014
19 févr. 2014 à 12:19
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.
0
ThomasBan Messages postés 1 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 21 mars 2014
21 mars 2014 à 16:38
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.
0
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.
0
Leydorn Messages postés 19 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 26 octobre 2018
23 avril 2015 à 17:42
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 !
0
Leydorn Messages postés 19 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 26 octobre 2018
23 avril 2015 à 18:08
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());}
^
0