Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1653 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Puissance 4 - Processing

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Puissance 4 - Processing

n°2272070
Viince06
Posté le 21-12-2015 à 14:50:01  profilanswer
 

Bonjour,
 
je dois faire un Puissance 4 sous Processing pour la rentrée. Or je dois vous avouer que j'ai du mal à finir.
Le professeur nous a en effet fait une partie, mais je dois finir.
 
Si vous pourriez m'aider à comprendre, cela serait vraiment cool !
Je dois faire la partie "gain()", "placementPossible(int colonne)", "indexProchainPion(int colonne)", "int nbrCasesVides()" & "placePion(int couleur, int colonne)"
 
Voici le lien de mon document : http://www.mediafire.com/download/ [...] sance4.pde
 
Merci !  :jap:

mood
Publicité
Posté le 21-12-2015 à 14:50:01  profilanswer
 

n°2272071
TotalRecal​l
Posté le 21-12-2015 à 14:51:33  profilanswer
 

Et en gros tu as fait quoi déjà / tu bloques sur quoi ?


---------------
Topic .Net - C# @ Prog
n°2272074
Viince06
Posté le 21-12-2015 à 15:01:31  profilanswer
 

TotalRecall a écrit :

Et en gros tu as fait quoi déjà / tu bloques sur quoi ?


 
Télécharge le fichier, c'est mon programme.
 
Je dois faire la partie gain, mais je ne comprends pas comment coder :
 
- alignement de 4 pions (vertical, horizontal, diagonal) = victoire",  
 
- le nombre de cases vides dans le plateau de jeu
 
- si la pose d'un pion est possible dans une colonne
 
et enfin niveau graphique, comment coder que : afficher un pion jaune à la place du chiffre 1, et afficher un pion rouge à la place du chiffre 2 (via des images insérées avec PImage)

n°2272075
Viince06
Posté le 21-12-2015 à 15:05:40  profilanswer
 

/********************************************************************************/
/********************************************************************************/
/******************************* PUISSANCE 4 ************************************/
/********************************************************************************/
/********************************************************************************/
 
 
int ROUGE = 1;   // un pion rouge est représenté par un 1
int JAUNE = 2;   // un pion jaune est représenté par un 2
int ENCOURS = JAUNE; // les jaunes commencent
PImage GrillePuissance4, PionJaune, PionRouge;
 
int TAILLE = 50; // la taille des caractères pour l'affichage du tableau en mode texte
 
int[][] board;   // un tableau à 2 entrées représentant le plateau de jeu
boolean partieFinie = false; // devient true quand la partie est terminée
 
 
void setup() {
  size (700, 650);
  board = new int[7][6]; // largeur 7, hauteur 6
  initialiseBoard();
  GrillePuissance4 = loadImage("GrillePuissance4.PNG" );
  PionJaune = loadImage("PionJaune.png" );
  PionRouge = loadImage("PionRouge.png" );
   
}
 
 
void draw() {
  if (partieFinie) {
    println("La partie est terminée" );
    println("Appuyez sur une touche" );
    if (keyPressed) {
      exit();
    }
  } else {
    afficheBoard();
    testFinDePartie();
  }
}
 
void initialiseBoard() {
  for (int colonne = 0; colonne < 7; colonne++)
    for (int ligne = 0; ligne < 6; ligne++) board[colonne][ligne] = 0;
}
 
void mousePressed() {
  int colonne = (int)(mouseX-TAILLE)/TAILLE; // on détermine dans quelle colonne on a cliqué
  if (colonne > 6) colonne = 6;  // si on clique trop à droite, on reste sur la colonne de droite
  println("on place dans la colonne "+colonne);
  if (placementPossible(colonne)) {  // s'il est possible de placer le pion...
    placePion(ENCOURS, colonne);     // on le place...
    if (ENCOURS == ROUGE) ENCOURS = JAUNE; // et dans ce cas, le tour d'après
    else ENCOURS = ROUGE;                  // ce sera un pion de l'autre couleur
  } else println("Le placement est impossible !" ); // si le placement n'est pas possible,
  // on balance un message d'erreur dans la console
}
 
void testFinDePartie() {      // détermine si la partie est terminée...
   
  if (gain() == 1) {
    println("Les ROUGES GAGNENT !!!" );
    partieFinie = true;
  }
  if (gain() == 2) {
    println("Les JAUNES GAGNENT !!!" );
    partieFinie = true;
  }
  if (gain() == -1) {
    println("La partie est nulle..." );
    partieFinie = true;
  }
}
 
int gain() {
   
  if (.........................) return 1;  // renvoie 1 si les rouges ont gagnés
  else {  
    return 0;
  }
   
  if (.........................) return 2;  // renvoie 2 si les jaunes ont gagnés
  else {  
    return 0;
   
 
    if (nbrCasesVides()==0) return -1; // renvoie -1 si la partie est nulle, c'est à dire qu'il n'est plus possible de placer un pion
  else {
    return 0;                         // renvoie 0 si personne ne gagne pour le moment mais que la partie continue
  }
}
 
boolean placementPossible(int colonne) {
  if (                                                         // VRAI s'il est possible de placer un pion dans la colonne
}
 
int indexProchainPion(int colonne) {
  // renvoi l'index de la case où arriverait un pion si on le plaçait sur le colonne
  // en question
  //// ON SUPPOSE QUE LE PLACEMENT EST POSSIBLE ET A ETE TESTE AVANT

}
 
int nbrCasesVides() {
  // renvoi le nombres de cases qui peuvent encore contenir un pion
}
 
void placePion(int couleur, int colonne) {
  // place un pion de la couleur donnée dans la colonne en question
  // ON SUPPOSE QUE LE PLACEMENT EST POSSIBLE ET A ETE TESTE AVANT

  board[colonne][indexProchainPion(colonne)] = couleur;
}

 
 
 
void afficheBoard() {
  textSize(TAILLE);
  image(GrillePuissance4);
  for (int x = 0; x < 7; x++) {
    fill (125);
    text (x, TAILLE*(x+1), TAILLE*2);
    if (x<6) text (x, TAILLE*9, TAILLE*(x+4));
    for (int y = 0; y < 6; y++) {
      int contenuCase = board[x][y];
      if (contenuCase == 0) fill(255);         // case vide : blanc
      if (contenuCase == 1) fill(255, 0, 0);   // case 1    : pion rouge
      if (contenuCase == 2) fill(255, 255, 0); // case 2    : pion jaune
      text(contenuCase, TAILLE*(x+1), TAILLE*(y+4));
    }
  }
}


Message édité par Viince06 le 21-12-2015 à 15:06:51
n°2272077
TotalRecal​l
Posté le 21-12-2015 à 15:26:22  profilanswer
 

Oui enfin, ça c'est l'énoncé, pas ce que tu as fait [:bluelightneon]


---------------
Topic .Net - C# @ Prog
n°2272081
Viince06
Posté le 21-12-2015 à 15:53:24  profilanswer
 

TotalRecall a écrit :

Oui enfin, ça c'est l'énoncé, pas ce que tu as fait [:bluelightneon]


 
Je dois faire tout ce qui est en rouge ..
mais c'est ce que je disais + haut, je ne comprends pas comment coder ce qu'il y a en rouge, c-a-d :
 
- alignement de 4 pions (vertical, horizontal, diagonal) = victoire",  
 
- le nombre de cases vides dans le plateau de jeu  
 
- si la pose d'un pion est possible dans une colonne  
 
et enfin niveau graphique, comment coder que : afficher un pion jaune à la place du chiffre 1, et afficher un pion rouge à la place du chiffre 2 (via des images insérées avec PImage)


Message édité par Viince06 le 21-12-2015 à 15:54:39
n°2272121
Chelmi18
Posté le 22-12-2015 à 09:01:54  profilanswer
 

Ce que TotalRecall veut te dire et ce que je vais te dire de manière moins subtile : On ne fera pas le devoir à ta place !! :non:  
 
Il faut au minimum avoir déjà essayé de faire quelque chose si tu veux de l'aide !!!
 
Poster un énoncé et dire merci ne suffit pas.
 
Essaye de coder quelque chose et reviens si tu as un message d'erreur ou besoin d'aide sur une syntaxe précise ! :hello:

n°2272122
TotalRecal​l
Posté le 22-12-2015 à 09:33:10  profilanswer
 

Merci, je commençais à fatiguer et puis c'est pas drôle d'être le rabat joie de service :o


---------------
Topic .Net - C# @ Prog
n°2272124
Viince06
Posté le 22-12-2015 à 09:49:05  profilanswer
 

Nan mais j'ai bien compris ! D'ailleurs je ne viens pas sur un forum pour que l'on me fasse le travail !
 
Le problème ici, c'est que je ne sais pas du tout comment dire à la machine que 4 pions sont alignés par exemple, ou comment dire qu'il n'y a pu de place dans la colonne ... Et je pense que c'est la base!
Si vous arrivez à m'expliquer cela, je comprendrai sûrement  comment faire je pense ! :jap:

n°2272125
TotalRecal​l
Posté le 22-12-2015 à 09:59:58  profilanswer
 

Il y a des trucs qui paraissent quand même ultra faciles, genre nbrCasesVides() il suffit de parcourir ton tableau board et compter les vides...
Fais déjà tout ce que tu peux et on t'aidera pour les trucs plus ardus, genre les alignements. Mais si tu sais te déplacer dans ton tableau le reste c'est juste un peu de maths très basiques et d'algo.


---------------
Topic .Net - C# @ Prog
mood
Publicité
Posté le 22-12-2015 à 09:59:58  profilanswer
 

n°2272126
Viince06
Posté le 22-12-2015 à 10:27:19  profilanswer
 

TotalRecall a écrit :

Il y a des trucs qui paraissent quand même ultra faciles, genre nbrCasesVides() il suffit de parcourir ton tableau board et compter les vides...
Fais déjà tout ce que tu peux et on t'aidera pour les trucs plus ardus, genre les alignements. Mais si tu sais te déplacer dans ton tableau le reste c'est juste un peu de maths très basiques et d'algo.


 
 
J'ai commencé la programmation il y a seulement 3 mois.
Certains choses peuvent te paraitrent faciles alors que pour d'autres non ...

n°2272128
TotalRecal​l
Posté le 22-12-2015 à 10:37:56  profilanswer
 

C'est évident, mais si on t'a donné l'exo tu devrais avoir les bases non, et sinon des questions précises ?

 

Exemple pour compter les cases vides, tu parcours le tableau et tu incrémentes un compteur à chaque fois que tu en vois une.

 

Parcourir le tableau :

Code :
  1. for (int x = 0; x < 7; x++) {
  2.     for (int y = 0; y < 6; y++) {
  3.     }
  4.   }


Tester si une case est vide :

Code :
  1. int contenuCase = board[x][y];
  2.       if (contenuCase == 0)
  3.          // case vide : incrémenter le compteur
  4.          casesVides++;


Au début tu déclares le compteur ("casesVides" ), tu l'initialises à 0, et à la fin tu le renvoies.

 

Et je n'ai rien écrit ou utilisé qui ne se trouve pas exactement tel quel dans ton début de programme.

 

Le truc c'est qu'on veut bien t'aider, mais pas faire à ta place. Pour ça il faut que tu essaies des trucs (même faux) et pose des questions spécifiques.


Message édité par TotalRecall le 22-12-2015 à 10:40:23

---------------
Topic .Net - C# @ Prog
n°2272130
Viince06
Posté le 22-12-2015 à 11:07:17  profilanswer
 

Ok je comprends!
 
Ensuite pour ce qui concerne la possibilité de placer un pion dans la colonne, je dois aussi parcourir le tableau en Y pour savoir si il reste des 0 (et que donc on puisse mettre un pion ou non) ?

n°2272132
TotalRecal​l
Posté le 22-12-2015 à 11:11:49  profilanswer
 

Logiquement pas besoin de "parcourir" en fait, il suffit de tester la case la plus en haut de la colonne.  
Donc index 0 ou 6 selon comment ton tableau est utilisé pour former la grille du jeu (la flemme de chercher dans le code).


---------------
Topic .Net - C# @ Prog
n°2272133
Viince06
Posté le 22-12-2015 à 11:13:06  profilanswer
 

Avec un if ?
Si index 0 == 0 alors je peux jouer
Sinon non
 
??

n°2272134
Viince06
Posté le 22-12-2015 à 11:14:20  profilanswer
 

(Car justement je dois faire l'indexProchainPion, pour dire où sera le prochain pion dans la colonne)

n°2272135
TotalRecal​l
Posté le 22-12-2015 à 11:15:09  profilanswer
 

Je n'ai pas décortiqué le code mais oui monsieur c'est l'idée [:yann39].
Par contre ça te renvoie juste l'information de si la colonne contient au moins une place vide, pour trouver sur quelle ligne là il y a bien un parcours à faire (chercher la DERNIERE case contenant 0 et renvoyer l'index de sa ligne).

 

Mentalement tu arrives à te représenter l'ensemble ?
Tu comprends pourquoi pour faire placementPossible() il n'était pas nécessaire de tout parcourir ? Le code est plus optimisé comme ça : tu testes juste une seule position.

 

Ca fera déjà trois méthodes de faites ;)


Message édité par TotalRecall le 22-12-2015 à 11:17:26

---------------
Topic .Net - C# @ Prog
n°2272136
Viince06
Posté le 22-12-2015 à 11:17:15  profilanswer
 

Pas évident, je vais essayer ... :heink:

n°2272137
TotalRecal​l
Posté le 22-12-2015 à 11:18:15  profilanswer
 

N'hésite pas à poster ici le code des trois méthodes quand tu auras fini si tu veux des remarques.


---------------
Topic .Net - C# @ Prog
n°2272138
Viince06
Posté le 22-12-2015 à 11:18:36  profilanswer
 

Le truc c'est qu'enfaite, en version "phrase" je sais me le représenter, mais c'est pour le retranscrire en langage processing que j'ai du mal

n°2272139
TotalRecal​l
Posté le 22-12-2015 à 11:21:58  profilanswer
 

Ecrire l'algo et conceptualiser le truc mentalement c'est la première étape, et très importante. Le code viendra naturellement avec la pratique.


---------------
Topic .Net - C# @ Prog
n°2272140
Viince06
Posté le 22-12-2015 à 11:25:33  profilanswer
 

Bon j'essaye & je reviens vers toi !

n°2272141
TotalRecal​l
Posté le 22-12-2015 à 11:27:05  profilanswer
 

Vu que c'est un truc très visuel petit conseil si tu peines : représente ta grille (ligne / colonne avec les indexes) sur un papier.
Ca pourra peut être t'aider à voir comment faire tes parcours et tester tes cas.
Apres ecrire les boucles et les if devrait aller vite.


Message édité par TotalRecall le 22-12-2015 à 11:31:05

---------------
Topic .Net - C# @ Prog
n°2272179
Viince06
Posté le 22-12-2015 à 17:25:26  profilanswer
 

Pour le nombreCasesVides(), je fais ça ?
 

Code :
  1. int casesRemplies = 0;
  2. int nbrCasesVides() { // renvoi le nombres de cases qui peuvent encore contenir un pion
  3.       for (int x = 0; x < 7; x++) {
  4.         for (int y = 0; y < 6; y++) {
  5.      
  6.     int contenuCase = board[x][y];
  7.           if (contenuCase == 0)
  8.               casesRemplies++;  // case vide : incrémenter le compteur
  9.     }
  10.   }
  11.   return 42 - casesRemplies;
  12. }

Message cité 1 fois
Message édité par Viince06 le 22-12-2015 à 17:35:41
n°2272182
Viince06
Posté le 22-12-2015 à 17:35:06  profilanswer
 

Pour le placementPossible(), je dois faire comme ça ?? :
 

Code :
  1. boolean placementPossible(int colonne) {
  2.     if ( board[1][] = 0)
  3.         placementPossible = true    // VRAI s'il est possible de placer un pion dans la colonne
  4.   }

Message cité 1 fois
Message édité par Viince06 le 22-12-2015 à 17:36:47
n°2272183
TotalRecal​l
Posté le 22-12-2015 à 17:43:10  profilanswer
 

Viince06 a écrit :

Pour le nombreCasesVides(), je fais ça ?
 

Code :
  1. int casesRemplies = 0;
  2. int nbrCasesVides() { // renvoi le nombres de cases qui peuvent encore contenir un pion
  3.       for (int x = 0; x < 7; x++) {
  4.         for (int y = 0; y < 6; y++) {
  5.      
  6.     int contenuCase = board[x][y];
  7.           if (contenuCase == 0)
  8.               casesRemplies++;  // case vide : incrémenter le compteur
  9.     }
  10.   }
  11.   return 42 - casesRemplies;
  12. }



- "contenuCase == 0" correspond à une case vide, pourquoi tu la considères comme remplie ? Et quand bien même quel est l'intérêt de compter les remplies et faire une soustraction après ? Compte directement les vide !
- casesRemplies n'a pas besoin d'être une variable globale, elle doit être dans la méthode.
- La méthode doit retourner la valeur calculée
 
Donc j'aurai plutôt fait :  

Code :
  1. int nbrCasesVides() { // renvoi le nombres de cases qui peuvent encore contenir un pion
  2. int casesVides = 0;
  3.       for (int x = 0; x < 7; x++) {
  4.         for (int y = 0; y < 6; y++) {
  5.      
  6.     int contenuCase = board[x][y];
  7.           if (contenuCase == 0)
  8.               casesVides++;  // case vide : incrémenter le compteur
  9.     }
  10.   }
  11. return casesVides;
  12. }


Toujours sous réserve que "0" veuille bien dire case vide comme je l'ai compris.


---------------
Topic .Net - C# @ Prog
n°2272184
TotalRecal​l
Posté le 22-12-2015 à 17:45:54  profilanswer
 

Viince06 a écrit :

Pour le placementPossible(), je dois faire comme ça ?? :
 

Code :
  1. boolean placementPossible(int colonne) {
  2.     if ( board[1][] = 0)
  3.         placementPossible = true    // VRAI s'il est possible de placer un pion dans la colonne
  4.   }




 
et "colonne" il sert à quoi ?  
Et c'est quoi cet index vide à droite ?  
Et c'est quoi ce "= 0" : c'est pas une comparaison ça, c'est une affectation !
Ta méthode ne renvoie pas de valeur ! Tu peux renvoyer directement le résultat du test conditionnel.
 
Donc pour moi :

Code :
  1. boolean placementPossible(int colonne) {
  2.     return board[0][colonne] == 0;  // VRAI s'il est possible de placer un pion dans la colonne
  3.   }


---------------
Topic .Net - C# @ Prog
n°2272185
TotalRecal​l
Posté le 22-12-2015 à 17:47:59  profilanswer
 

Dernier point en plus des deux posts ci-dessus :  
Puisque tu as des constantes comme int ROUGE = 1 et cie, j'en ajouterai une "int VIDE = 0;" et je l'utiliserai partout où il faut.
De plus je vois que même dans l'énoncé les constantes ne sont pas toujours utilisées (méthode afficheBoard()).


---------------
Topic .Net - C# @ Prog
n°2272186
Viince06
Posté le 22-12-2015 à 17:56:52  profilanswer
 

Oui désolé j'avais oublié le double égal !
et les [] vides, enfaite, c'était pour dire la colonne ! Quand je t'ai envoyé le message, je n'avais pas encore mis le [c] enfaite sorry !

n°2272187
Viince06
Posté le 22-12-2015 à 17:58:17  profilanswer
 

TotalRecall a écrit :

Dernier point en plus des deux posts ci-dessus :  
Puisque tu as des constantes comme int ROUGE = 1 et cie, j'en ajouterai une "int VIDE = 0;" et je l'utiliserai partout où il faut.
De plus je vois que même dans l'énoncé les constantes ne sont pas toujours utilisées (méthode afficheBoard()).


 
 
Le truc, c'est que c'est le prof qui a fait le début (l'énoncé comme tu dis), donc si ce que tu dis n'est pas utilisé, je n'y peux rien ^^

n°2272188
Viince06
Posté le 22-12-2015 à 17:59:45  profilanswer
 

Donc pour résumer, on en est là :
 

Code :
  1. if (nbrCasesVides()==0) return -1; // renvoie -1 si la partie est nulle, c'est à dire qu'il n'est plus possible de placer un pion
  2.     else {
  3.       return 0;                         // renvoie 0 si personne ne gagne pour le moment mais que la partie continue
  4.     }
  5.   }
  6.   boolean placementPossible(int colonne) {
  7.     return board[colonne][0] == 0;  // VRAI s'il est possible de placer un pion dans la colonne
  8.   }
  9.   int indexProchainPion(int colonne) {
  10.     // renvoi l'index de la case où arriverait un pion si on le plaçait sur le colonne
  11.     // en question
  12.     //// ON SUPPOSE QUE LE PLACEMENT EST POSSIBLE ET A ETE TESTE AVANT
  13.   }
  14.   int nbrCasesVides() { // renvoi le nombres de cases qui peuvent encore contenir un pion
  15.     int casesVides = 0;
  16.     for (int x = 0; x < 7; x++) {
  17.       for (int y = 0; y < 6; y++) {
  18.         int contenuCase = board[x][y];
  19.         if (contenuCase == 0)
  20.           casesVides++;  // case vide : incrémenter le compteur
  21.       }
  22.     }
  23.     return casesVides;
  24.   }
  25.   void placePion(int couleur, int colonne) {
  26.     board[colonne][indexProchainPion(colonne)] = couleur; // place un pion de la couleur donnée dans la colonne en question
  27.     // ON SUPPOSE QUE LE PLACEMENT EST POSSIBLE ET A ETE TESTE AVANT
  28.   }


Message édité par Viince06 le 22-12-2015 à 18:13:13
n°2272189
TotalRecal​l
Posté le 22-12-2015 à 18:05:48  profilanswer
 

Je viens de voir que dans ma solution pour placementPossible j'ai inversé ligne/colonne [:slackerbitch]. Et tu as recopié tel quel :pfff:.
C'était pour voir si tu suivais bien sûr [:amel_the_white]


Message édité par TotalRecall le 22-12-2015 à 18:06:02

---------------
Topic .Net - C# @ Prog
n°2272190
Viince06
Posté le 22-12-2015 à 18:10:17  profilanswer
 

D'ailleurs je crois qu'il faut inverser colonne & ligne car dans le void setup, j'ai mis 7 de largeur (donc les colonnes) puis 6 de hauteur (donc les lignes)
 

Code :
  1. board = new int[7][6]; // largeur 7, hauteur 6


 
Du coup je suppose qu'il faut faire ça (à moins que ça ne soit pareil du moment que je marque bien "[colonne]"?) :  

Code :
  1. boolean placementPossible(int colonne) {
  2.     return board[colonne][0] == 0;


 
 
Juste une petite question "graphique" avant de continuer : comment je fais pour remplacer le fond noir par une image de grille de jeu de Puissance 4 et qu'elle coïncide avec les colonnes ??
(Ps : j'ai déjà mis les photos dans un dossier "data" dans le dossier où est enregistrer le programme)
 
Et comment je fais pour remplacer les "1" par une image de pion rouge & les "2" par une image de pion jaune ?
 
j'ai déjà déclarer les images mais comment les attribuer ?

Code :
  1. PImage GrillePuissance4, PionJaune, PionRouge;
  2. void setup() {
  3.   size (700, 650);
  4.   board = new int[7][6]; // 7 lignes, 6 colonnes
  5.   initialiseBoard();
  6.   GrillePuissance4 = loadImage("GrillePuissance4.PNG" );
  7.   PionJaune = loadImage("PionJaune.png" );
  8.   PionRouge = loadImage("PionRouge.png" );


 
EDIT : Ah bah tiens, je l'avais vu pour l'inversement, je viens de le marquer dans ce message xD


Message édité par Viince06 le 22-12-2015 à 18:11:11
n°2272191
Viince06
Posté le 22-12-2015 à 18:17:45  profilanswer
 

Mais dans une fonction boolean, il ne faut pas mettre soit TRUE soit FALSE ?
 
Edit : si je ne réponds pas rapidement, c'est que je suis parti en vacances & que je n'ai pas internet tout le temps

Message cité 1 fois
Message édité par Viince06 le 22-12-2015 à 18:29:40
n°2272206
Viince06
Posté le 23-12-2015 à 15:05:33  profilanswer
 

UP  :jap:

n°2272224
TotalRecal​l
Posté le 24-12-2015 à 11:55:20  profilanswer
 

Viince06 a écrit :

Mais dans une fonction boolean, il ne faut pas mettre soit TRUE soit FALSE ?

 

Edit : si je ne réponds pas rapidement, c'est que je suis parti en vacances & que je n'ai pas internet tout le temps

 

Quand tu écris
   

Code :
  1. return board[colonne][0] == 0;
 

L'expression à la droite du return sera évaluée pour savoir si elle vaut vrai ou faux.
Tu peux écrire n'importe quoi à côté de return tant que ce n'importe quoi renvoie un type qui correspond à celui retourné par ta méthode.
Donc ça revient à ecrire
   

Code :
  1. if(board[colonne][0] == 0)
  2.                 return true
  3.            else 
  4.                 return false;


Mais en beaucoup plus court et moins moche.

 


Pour ta question de dessin je dirai que la méthode afficheBoard() (appelée par draw()) semble parcourir et redessiner la board complète, donc ton programme gère déjà la MAJ de ce qui est affiché apres chaque coup.


Message édité par TotalRecall le 24-12-2015 à 11:58:02

---------------
Topic .Net - C# @ Prog
n°2272234
Viince06
Posté le 24-12-2015 à 15:02:59  profilanswer
 

Pour ta question de dessin je dirai que la méthode afficheBoard() (appelée par draw()) semble parcourir et redessiner la board complète, donc ton programme gère déjà la MAJ de ce qui est affiché apres chaque coup.[/quotemsg]
 
 
Oui mais comment je remplace les "1"par des pions rouges et les "2" par des pions jaunes ?
Je remplace les "fill" par les images de pions ?
 

Code :
  1. void afficheBoard() {
  2.     textSize(TAILLE);
  3.     image(GrillePuissance4);
  4.     for (int x = 0; x < 7; x++) {
  5.       fill (125);
  6.       text (x, TAILLE*(x+1), TAILLE*2);
  7.       if (x<6) text (x, TAILLE*9, TAILLE*(x+4));
  8.       for (int y = 0; y < 6; y++) {
  9.         int contenuCase = board[x][y];
  10.         if (contenuCase == 0) fill(255);         // case vide : blanc
  11.         if (contenuCase == 1) fill(255, 0, 0);   // case 1    : pion rouge
  12.         if (contenuCase == 2) fill(255, 255, 0); // case 2    : pion jaune
  13.         text(contenuCase, TAILLE*(x+1), TAILLE*(y+4));
  14.       }
  15.     }
  16.   }


 
 
Ensuite pour la fonction gain, tu as une idée de comment dire que 4 pions sont alignés pour "gain()" ?
Et pour indexProchainPion() ??
 
 
Pour le nbrCasesVides() j'ai fais ça :

Code :
  1. int nbrCasesVides() { // renvoi le nombres de cases qui peuvent encore contenir un pion
  2.     int casesVides = 42; //42 cases vides au début
  3.     for (int x = 0; x < 7; x++) {
  4.       for (int y = 0; y < 6; y++) {
  5.         int contenuCase = board[x][y];
  6.         if (contenuCase == 0)
  7.           casesVides--;  // au début elles sont toutes vides, donc 42 cases vides
  8.         // ensuite, il y en a de moins en moins jusqu'à ce qu'il n'y en ait plus
  9.       }
  10.     }
  11.     return casesVides;
  12.   }


Message édité par Viince06 le 24-12-2015 à 15:05:20
n°2272312
Viince06
Posté le 27-12-2015 à 23:47:11  profilanswer
 

UP.
Aidez moi svp

n°2272313
Viince06
Posté le 28-12-2015 à 00:09:56  profilanswer
 

Pour la partie gain(), j'ai fais ça  
 
mais j'ai une erreur qui dit : "The operator == is undefined for the argument type(s) boolean, int"
 

Code :
  1. int gain() {
  2.   for (int x = 0; x < 7; x++) {          //on parcourt le tableau
  3.     for (int y = 0; y < 6; y++) {
  4.      
  5.     if ((board[ligne][colonne] == board[ligne][colonne+1]   ==board[ligne][colonne+2]    == board[ligne][colonne+3]          //Verticale
  6.        ||board[ligne][colonne] == board[ligne+1][colonne]   ==board[ligne+2][colonne]    == board[ligne+3][colonne]          //Horizontale
  7.        ||board[ligne][colonne] == board[ligne+1][colonne+1] ==board[ligne+2][colonne+2]  == board[ligne+3][colonne+3]        //diagonale descendante
  8.        ||board[ligne][colonne] == board[ligne-1][colonne+1] ==board[ligne-2][colonne+2]  == board[ligne-3][colonne+3]) ==1)  //diagonale ascendante
  9.         return 1;  // renvoie 1 si les rouges ont gagnés
  10.       else {
  11.         return 0;
  12.       }
  13.      if ((board[ligne][colonne] == board[ligne][colonne+1]   == board[ligne][colonne+2]   == board[ligne][colonne+3]         //Verticale
  14.         ||board[ligne][colonne] == board[ligne+1][colonne]   == board[ligne+2][colonne]   == board[ligne+3][colonne]         //Horizontale
  15.         ||board[ligne][colonne] == board[ligne+1][colonne+1] == board[ligne+2][colonne+2] == board[ligne+3][colonne+3]       //diagonale descendante
  16.         ||board[ligne][colonne] == board[ligne-1][colonne+1] == board[ligne-2][colonne+2] == board[ligne-3][colonne+3]) ==2) //diagonale ascendante  
  17.         return 2;  // renvoie 2 si les jaunes ont gagnés
  18.       else {
  19.         return 0;
  20.       }


Message édité par Viince06 le 28-12-2015 à 00:19:13
n°2272359
TotalRecal​l
Posté le 29-12-2015 à 09:22:06  profilanswer
 

Salut,  
Comme je t'ai expliqué plus haut (même si le contexte n'était pas le même), un test comme "a == b" renvoie un booléen.  
Donc en écrivant "a == b == c" c'est comme si tu faisais "true == c", ce qui n'a aucun sens car tu compares alors un booléen (true) avec un entier (c) d'où le fait que le compilo t'engueule.
 
Pour faire ce test il faut le décomposer en deux étapes "a == b && b == c" par exemple, ou bien faire une méthode (pour la lisibilité).
 
Mais dans ton cas pas mal de soucis :
- il y a des façons de rendre ce bazard fortement plus lisible (déjà rien qu'en stockant le résultat d'exécution du premier if dans une variable pour tester ensuite si elle vaut un ou deux, tu éviterais le deuxième if).
- dans ta boucle tu appelles tes variables x/y, dans tes tests ligne/colonne, faut te décider.
- ton algo va péter à l'exécution : tu parcours la totalité du tableau en x et y et à côté de façon tu fais des opérations comme "colonne + qqch" : quand ta boucle tu arriveras à la dernière colonne, tu vas essayer de te balader "qqch" colonnes plus loin, alors que ça n'existe pas.


---------------
Topic .Net - C# @ Prog
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Puissance 4 - Processing

 

Sujets relatifs
Create a transaction-processing programProcessing gestion multi-coeur
Calcul de puissance de n[Projet/Help] Space invader spécial SW Processing.
matlab image processing toolbox : redressement d'imageCalcul puissance acoustique
(Python) Codage Puissance 4 + affichage consoleecrire un programme (pascal) qui calcule X puissance n ?!!!
[C] Puissance 4 arbres de possibilitéProcessing: la prog graphique expérimentale et amusante
Plus de sujets relatifs à : Puissance 4 - Processing


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR