Puissance4

cindoo Messages postés 27 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 11 janvier 2012 - 14 juin 2010 à 12:55
cindoo Messages postés 27 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 11 janvier 2012 - 15 juin 2010 à 15:14
J'ai un algorithme du jeu Puissance 4 a faire mais je n'arrive pas a places les pions diagonalement
si quelqu'un peut maider je vous envoie ce que j'ai deja fait si jamais y'a un erreur vous pouvez me le dire
merci


public class P4
{
public static void main (String [ ] Argv )
{
int nbColonnes = 7 ; // <=> largeur , abscisse ( x )
int nbLignes = 6 ; // <=> hauteur , ordonnee ( y )
int [][] plateau = new int [ nbColonnes ] [ nbLignes ] ;

int [] hauteur = new int [7];// variable pour dire a quel hauteur on en est
for (int i=0;i<7;i=i+1)
{
hauteur [i] = 0;
}

final int JOUEUR_1 = 1 ; // code associé au joueur 1
final int JOUEUR_2 = 2 ; // code associé au joueur 2

// Initialisation des cases du plateau à 0
initPlateau (plateau) ;

// Creation et initialisation de l’interface graphique
Puissance4GUI gui = new Puissance4GUI ( plateau ) ;

gui.modifierMessage ( "c’est parti! " ) ;

System.out.println ( "Appuyer sur ENTREE pour continuer " ) ;
Saisie.litexte ();

while (i!=42 ) // A AJOUTER 4 JETONS ALLIGNÉS
{
for (i=1;i<42;i=i+1)
{
if (i=0%2)
{
System.out.println ( "Joueur 1 : saisissez le numéro de la colonne où vous souhaitez déposer le jeton " ) ;
int nbColonne = Saisie.litentier();
if (hauteur[nbColonne-1] > 5)
{
System.out.println ( "Joueur 1 : la colonne" + nbColonne-1 +" est complète! Saisissez une autre colonne...") ;
nbColonne = Saisie.litentier();
plateau [hauteur[nbColonne-1]] [nbColonne-1] = JOUEUR_1;
gui.rafraichirCase ( hauteur[nbColonne-1] , nbColonne -1) ;
else
{
plateau [hauteur[nbColonne-1]] [nbColonne-1] = JOUEUR_1;
gui.rafraichirCase ( hauteur[nbColonne-1] , nbColonne-1) ;
}
}
hauteur[nbColonne-1] = hauteur[nbColonne-1]+1;

else
{
System.out.println ( "Joueur 2 : saisissez le numéro de la colonne où vous souhaitez déposer le jeton " ) ;
int nbColonne = Saisie.litentier();
if (hauteur[nbColonne-1] > 5)
{
System.out.println ( "Joueur 2 : la colonne" + nbColonne-1 +" est complète! Saisissez une autre colonne...") ;
nbColonne = Saisie.litentier();
plateau [hauteur[nbColonne-1]] [nbColonne-1] = JOUEUR_2;
hauteur[nbColonne-1] = hauteur[nbColonne-1]+1;
gui.rafraichirCase ( hauteur[nbColonne-1] , nbColonne-1) ;
else
{
plateau [hauteur[nbColonne-1]] [nbColonne-1] = JOUEUR_2;
hauteur[nbColonne-1] = hauteur[nbColonne-1]+1;
gui.rafraichirCase ( hauteur[nbColonne-1] , nbColonne-1) ;
}
}
}
}
}
}
}


// Initialisation de la matrice de donnees
public static void initPlateau ( int [ ] [ ] matrice )
{
for ( int col = 0 ; col < matrice.length ; col ++)
{
for ( int lig = 0 ; lig < matrice[0].length ; lig ++)
{
matrice [ col ] [ lig ] = 0;
}
}
}


// fonction qui reconnait 4 cases verticales
//joueur 1
public static boolean caseVertJ1(int [][] plateau)
{
boolean quatre = false;
for (int i = 0; i<7 ; i=i+1)
{
if (plateau[4][i]!=0 && plateau[4][i]!=2 && plateau[3][i]!=0 && plateau[3][i]!=2)
{
for (int j = 0; j<3;j=j+1)
{
if (plateau [j][i] == plateau [j+1][i] && plateau [j][i] == plateau [j+2][i] && plateau [j][i] == plateau [j+3][i] && plateau [j][i] == 1)
{
quatre=true;
}
}
}
}
return quatre;
}

// joueur 2
public static boolean caseVertJ1(int [][] plateau)
{
boolean quatre = false;
for (int i = 0; i<7 ; i=i+1)
{
if (plateau[4][i]!=0 && plateau[4][i]!=1 && plateau[3][i]!=0 && plateau[3][i]!=1)
{
for (int j = 0; j<3;j=j+1)
{
if (plateau [j][i] == plateau [j+1][i] && plateau [j][i] == plateau [j+2][i] && plateau [j][i] == plateau [j+3][i] && plateau [j][i] == 2)
{
quatre=true;
}
}
}
}
return quatre;
}

// fonction qui reconnait 4 cases horizontales
//joueur 1
public static boolean casesHJ1(int [][] plateau)
{
boolean quatre = false;
for (int i = 0; i<6 ; i=i+1)
{
if (plateau[3][i]!=0 && plateau[3][i]!=2)
{
for (int j = 0; j<4;j=j+1)
{
if (plateau [i][j] == plateau [i][j+1] && plateau [i][j] == plateau [i][j+2] && plateau [i][j] == plateau [i][j+3] && plateau [i][j] == 1)
{
quatre=true;
}
}
}
}
return quatre;
}

//joueur 2
public static boolean casesHJ2(int [][] plateau)
{
boolean quatre = false;
for (int i = 0; i<6 ; i=i+1)
{
if (plateau[3][i]!=0 && plateau[3][i]!=1)
{
for (int j = 0; j<4;j=j+1)
{
if (plateau [i][j] == plateau [i][j+1] && plateau [i][j] == plateau [i][j+2] && plateau [i][j] == plateau [i][j+3] && plateau [i][j] == 2)
{
quatre=true;
}
}
}
}
return quatre;
}

// fonction qui reconnait 4 cases diagonales
public static boolean caseD(int [][] plateau)
{

}
}

2 réponses

cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
14 juin 2010 à 21:47
Salut,
Bon ce n'étais pas la question mais quelques pistes de trucs pouvant être améliorer :
Par exemple les méthodes de détection sont quasiment identique, pourquoi ne pas rajouter la variable associée au joueur en paramètre de la fonction.
Et pourquoi ne utiliser "1" et "2" alors que les constantes JOUEUR_1 et JOUEUR_2 ont été définies (enfin il faudrait les mettre en constante de classe).
Il serait également possible d'utiliser un peu plus le modèle objet avec une classe Plateau par exemple.
Pour en revenir au problème, il serait sans doute intéressant d'utiliser des calculs sur les matrices mais comme sinon un truc genre :
for (int i = 0; i<NB_COLONNES-NB_ALIGNE ; i++)
{
  for (int j = 0; j<NB_LIGNE-NB_ALIGNE; j++)
  {
    boolean victoire = true;
    for (int k = 0; k < NB_ALIGNE; k++)
    {
      if ( plateau[i+k][j+k] != idJoueur ) {
        victoire = false;
        break;
      }
    }
    if (victoire)
    {
        return true;
    }
  }
}

devrait fonctionner (en faisant de même pour les diagonales dans l'autre sens.
Cdt
 
0
cindoo Messages postés 27 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 11 janvier 2012
15 juin 2010 à 15:14
j'ai reussi a placer mesp ions en diagonales cependant mon programme ne compile pas je retrouve ces messages d'erreurs et je suis bloker merci de m'aider...

Puissance4.java:185: cannot find symbol
symbol : class Puissance4GUI
location: class Puissance4
Puissance4GUI gui = new Puissance4GUI ( plateau);
^
Puissance4.java:185: cannot find symbol
symbol : class Puissance4GUI
location: class Puissance4
Puissance4GUI gui = new Puissance4GUI ( plateau);
^
Puissance4.java:190: cannot find symbol
symbol : variable Saisie
location: class Puissance4
Saisie.litexte ();
^
Puissance4.java:198: cannot find symbol
symbol : variable Saisie
location: class Puissance4
int nbColonne = Saisie.litentier();
^
Puissance4.java:201: operator - cannot be applied to java.lang.String,int
System.out.println ( "Joueur 1 : la colonne" + nbColonne-1 +" est pleine! Choisissez une autre colonne") ;
^
Puissance4.java:202: cannot find symbol
symbol : variable Saisie
location: class Puissance4
nbColonne = Saisie.litentier();
^
Puissance4.java:217: nbColonne is already defined in main(java.lang.String[])
int nbColonne = Saisie.litentiers();
^
Puissance4.java:217: cannot find symbol
symbol : variable Saisie
location: class Puissance4
int nbColonne = Saisie.litentiers();
^
Puissance4.java:220: operator - cannot be applied to java.lang.String,int
System.out.println ( "Joueur 2 : la colonne" + nbColonne-1 +" est pleine!choisissez une autre colonne") ;
^
Puissance4.java:221: cannot find symbol
symbol : variable Saisie
location: class Puissance4
nbColonne = Saisie.litentiers();


je vous envois mon algorithme :

public class Puissance4
{

// Initialisation de la matrice de donnees
public static void initPlateau ( int [][] matrice )
{
for ( int col = 0 ; col < matrice.length ; col ++)
{
for ( int lig = 0 ; lig < matrice[0].length ; lig ++)
{
matrice [ col ] [ lig ] = 0;
}
}
}


// fonction qui reconnait 4 cases verticales
//joueur 1
public static boolean verticalJ1(int [][] plateau)
{
boolean alignement = false;
for (int i = 0; i<7 ; i=i+1)
{
for (int j = 0; j<3;j=j+1)
{
if (plateau [j][i] == plateau [j+1][i] && plateau [j][i] == plateau [j+2][i] && plateau [j][i] == plateau [j+3][i] && plateau [j][i] == 1)
{
alignement=true;
}
}
}

return alignement;
}

// joueur 2
public static boolean verticalJ2(int [][] plateau)
{
boolean alignement = false;
for (int i = 0; i<7 ; i=i+1)
{
for (int j = 0; j<3;j=j+1)
{
if (plateau [i][j] == plateau [i+1][j] && plateau [i][j] == plateau [i+2][j] && plateau [i][j] == plateau [i+3][j] && plateau [i][j] == 2)
{
alignement=true;
}
}
}

return alignement;
}

// fonction qui reconnait 4 cases horizontales
//joueur 1
public static boolean horizontalJ1(int [][] plateau)
{
boolean alignement = false;
for (int i = 0; i<6 ; i=i+1)
{
for (int j = 0; j<4;j=j+1)
{
if (plateau [i][j] == plateau [i][j+1] && plateau [i][j] == plateau [i][j+2] && plateau [i][j] == plateau [i][j+3] && plateau [i][j] == 1)
{
alignement=true;
}
}
}

return alignement;
}

//joueur 2
public static boolean horizontalJ2(int [][] plateau)
{
boolean alignement = false;
for (int i = 0; i<6 ; i=i+1)

{
for (int j = 0; j<4;j=j+1)
{
if (plateau [i][j] == plateau [i][j+1] && plateau [i][j] == plateau [i][j+2] && plateau [i][j] == plateau [i][j+3] && plateau [i][j] == 2)
{
alignement=true;
}
}
}

return alignement;
}

// fonction qui reconnait 4 cases diagonales
// joueur 1
public static boolean diagonal1(int [][] plateau)
{

boolean alignement=false;
for (int i=0; i<3;i=i+1)
{
for(int j=0;j<4;j=j+1)
{
if (plateau[i][j]==plateau[i+1][j+1] && plateau[i][j]==1 && plateau[i][j]==plateau[i+2][j+2] && plateau[i][j]==plateau[i+3][j+3])
{
alignement=true;
}
}
}
return alignement;
}



public static boolean diagonal2(int [][] plateau)
{
boolean alignement=false;
for(int i=0; i>3;i=i-1)
{
for (int j;j<4;j=j+1)
{
if (plateau[i][j]==plateau[i-1][j+1] && plateau[i][j]==plateau[i-2][j+2] && plateau[i][j]==plateau[i-3][j+3] && plateau[i][j]==1)
{
alignement=true;
}
}
}
return alignement;
}

//joueur2


public static boolean diag1(int[] [] plateau)
{
boolean alignement=false;
for (int i=0; i<3;i=i+1)
{
for(int j=0;j<4;j=j+1)
{
if (plateau[i][j]==plateau[i+1][j+1] && plateau[i][j]==2 && plateau[i][j]==plateau[i+2][j+2] && plateau[i][j]==plateau[i+3][j+3])
{
alignement=true;
}
}
}
return alignement;
}



public static boolean diag2(int[][] plateau)
{
boolean alignement=false;
for(int i=0; i>3;i=i-1)
{
for (int j;j<4;j=j+1)
{
if(plateau[i][j]==plateau[i-1][j+1] && plateau[i][j]==plateau[i-2][j+2] && plateau[i][j]==plateau[i-3][j+3] && plateau[i][j]==2)
{
alignement=true;
}
}
}
return alignement;
}

public static void main (String [] Argv )
{
int nbColonnes = 7 ; // <=> largeur , abscisse ( x )
int nbLignes = 6 ; // <=> hauteur , ordonnee ( y )
int [][] plateau = new int [ nbColonnes ] [ nbLignes ] ;

int [] hauteur = new int [7];// variable précisant le hauteur
for (int i=0;i<7;i=i+1)
{
hauteur [i] = 0;
}

final int J1 = 1 ; // joueur 1
final int J2 = 2 ; // joueur 2

// Initialisation des cases du plateau à 0
initPlateau (plateau) ;

// initialisation de l’interface graphique
Puissance4GUI gui = new Puissance4GUI ( plateau);

gui.modifierMessage ( "Le jeu commence!" ) ;

System.out.println ( "Appuyer sur ENTREE pour continuer " ) ;
Saisie.litexte ();

int nbcase=0;

while (nbcase!=42 )
{

System.out.println ( "Joueur 1 : choisissez le colonne où vous voulez placer le jeton " ) ;
int nbColonne = Saisie.litentier();
if (hauteur[nbColonne-1] > 5)
{
System.out.println ( "Joueur 1 : la colonne" + nbColonne-1 +" est pleine! Choisissez une autre colonne") ;
nbColonne = Saisie.litentier();
plateau [hauteur[nbColonne-1]] [nbColonne-1] = J1;
gui.rafraichirCase ( hauteur[nbColonne-1] , nbColonne-1) ;
}
else
{
plateau [hauteur[nbColonne-1]] [nbColonne-1] = J1;
gui.rafraichirCase ( hauteur[nbColonne-1] , nbColonne-1) ;
}

hauteur[nbColonne-1] = hauteur[nbColonne-1]+1;



System.out.println ( "Joueur 2 : choisissez le colonne où vous voulez placer le jeton " ) ;
int nbColonne = Saisie.litentiers();
if (hauteur[nbColonne-1] > 5)
{
System.out.println ( "Joueur 2 : la colonne" + nbColonne-1 +" est pleine!choisissez une autre colonne") ;
nbColonne = Saisie.litentiers();
plateau [hauteur[nbColonne-1]] [nbColonne-1] = J2;
hauteur[nbColonne-1] = hauteur[nbColonne-1]+1;
gui.rafraichirCase ( hauteur[nbColonne-1] , nbColonne-1) ;
}
else
{
plateau [hauteur[nbColonne-1]] [nbColonne-1] = J2;
hauteur[nbColonne-1] = hauteur[nbColonne-1]+1;
gui.rafraichirCase ( hauteur[nbColonne-1] , nbColonne-1) ;
}
}
}
}
0
Rejoignez-nous