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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Puissance 4 - Processing

n°2272359
TotalRecal​l
Posté le 29-12-2015 à 09:22:06  profilanswer
 

Reprise du message précédent :
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.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
mood
Publicité
Posté le 29-12-2015 à 09:22:06  profilanswer
 

n°2272371
Viince06
Posté le 29-12-2015 à 11:42:45  profilanswer
 

J'ai essayé de faire quelque chose, je ne suis que débutant.
Il faudrait que tu m'éclaircisses un peu :jap:

n°2272373
TotalRecal​l
Posté le 29-12-2015 à 11:50:47  profilanswer
 

Trouve un puissance 4 tout fait sur le web et regarde comment sont fait les tests de fin de partie, ça t'aidera à trouver le bon algo si tu n'y arrives pas tout seul.
Au final c'est juste une histoire de boucles et de tests (dans le principe tu es sur la bonne voie même si ton implémentation n'est pas juste) donc tu comprendras.

 

Mais tu n'es plus très loin, surtout avec mes indications ci-dessus d'une part pour corriger tes if et d'autre part pour faire attention de ne plus sortir de ton tableau. Indice : rien ne t'oblige à aller jusque 6 et 7 dans tes boucles, le tout c'est que toutes les cases de ton tableau soient vérifiées...

 

Il y aurait de meilleures implémentations que la tienne mais tel que tu es parti tu peux faire fonctionner celle-ci sans faire des efforts démesurés.


Message édité par TotalRecall le 29-12-2015 à 11:55:06

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2272374
Viince06
Posté le 29-12-2015 à 11:53:05  profilanswer
 

J'ai déjà chercher, je ne trouve aucun Puissance 4 fait en entier

n°2272375
Viince06
Posté le 29-12-2015 à 11:53:36  profilanswer
 

Si tu en as déjà vu un, je serai preneur pour comprendre

n°2272376
TotalRecal​l
Posté le 29-12-2015 à 11:57:00  profilanswer
 

Non j'en ai pas. J'ai édité mon post après coup en rajoutant quelques conseils.
J'ai l'impression que tes devoirs te gavent mais ça n'est pas en redemandant sans rien présenter de plus qu'on t'aidera davantage, essaie au moins de suivre mes conseils pour corriger ton code et on pourra avancer petit à petit [:spamafote]
Et si tu n'as pas compris un point de mon explication tu peux tjs redemander.


Message édité par TotalRecall le 29-12-2015 à 11:58:13

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2272378
Viince06
Posté le 29-12-2015 à 13:02:54  profilanswer
 

Pourquoi dis-tu ça ? C'est certainement le métier que j'aimerai faire à l'avenir! (je ne suis qu'en Terminale)
Ce n'est pas que ça me gave, loin de là !
C'est juste que quand je cherche sur le Web, je ne trouve rien de très instructif ...
Et que si je ne sais pas faire telle ou telle chose, que veux-tu que je fasse ?  
Écrire n'importe quoi ?
Le truc c'est que souvent je comprends EN VOYANT les choses, pas forcément quand on me l'explique ... :jap:

n°2272413
TotalRecal​l
Posté le 29-12-2015 à 16:12:41  profilanswer
 

Viince06 a écrit :

Pourquoi dis-tu ça ? C'est certainement le métier que j'aimerai faire à l'avenir! (je ne suis qu'en Terminale)
Ce n'est pas que ça me gave, loin de là !
C'est juste que quand je cherche sur le Web, je ne trouve rien de très instructif ...
Et que si je ne sais pas faire telle ou telle chose, que veux-tu que je fasse ?
Écrire n'importe quoi ?
Le truc c'est que souvent je comprends EN VOYANT les choses, pas forcément quand on me l'explique ... :jap:

 

C'est bizarre parce qu'en cherchant juste "puissance 4 java" j'ai eu subitement l'impression que le puissance 4 était le jeu le plus populaire du
web.

 

Donc en gros tu trouves la solution une fois qu'on t'a donné la solution [:autobot]

 

Bon, je suis sympa, je reprend ton code ci-dessus et je le modifie sans changer fondamentalement la logique sous jacente (qui comme je le disais pourrait être pensée autrement et meilleure en terme de perfs, mais dans un cas comme celui là à l'usage on ne verra pas la différence.

 

D'autres solutions pourraient être d'utiliser une sorte de compteur des cases adjacentes, un algo récursif, des ruptures de séquence dès qu'une case ne colle plus trop mais on va laisser tomber tt ça pour rester sur qqch comme ton exemple...

 
Code :
  1. int gain() {
  2.   for (int x = 0; x < 4; x++) {       
  3.     for (int y = 0; y < 3; y++) {
  4.       for(int joueur = 1; joueur < 2; joueur++)
  5. if (MemeValeur(joueur, board[x][y], board[x][y+1], board[x][y+2], board[x][y+3])          //Verticale
  6. || MemeValeur(joueur, board[x][y], board[x+1][y], board[x+2][y], board[x+3][y])          //Horizontale
  7. || MemeValeur(joueur, board[x][y], board[x+1][y+1] ,board[x+2][y+2], board[x+3][y+3])        //diagonale descendante
  8. || MemeValeur(joueur, board[x+3][y], board[x+2][y+1] yboard[x+1][y+2], board[x][y+3])) //diagonale ascendante
  9. {
  10. return joueur;
  11. }
  12. else
  13. {
  14. return 0;
  15. }
  16. }
  17. bool MemeValeur(int joueur, int a, int b, int c, int d) // Renvoie vrai si TOUTES les variables passées ont la même valeur
  18. {
  19. return joueur == a && a == b && b == c && c == d;
  20. }
 

Je PENSE que ça fait ce que tu veux : ça doit parcourir tout le tableau sans en sortir et tester les différentes positions possibles.
Si tu n'aimes pas la fonction MemeValeur tu peux la supprimer et mettre à la place un troupeau de test d'égalités comme elle fait elle même.
Attention, je n'ai pas vérifié si mes x et mes y correspondent bien à ce qu'ils sont sensés être (et je pense que non :D), c'était confus dans ton exemple plus haut vu que encore une fois ligne et colonne avaient l'air inversés.
Tu noteras que j'ai limité la valeur max des incréments x et y pour prendre en compte les "+1", "+2" et cie.

 

Tu seras peut être surpris de ne voir qu'un seul if et la troisieme boucle "joueur" pour essayer "1" et "2". C'est pour éviter d'avoir à tester les deux joueurs dans deux if séparés. Là aussi il y avait d'autres solutions.

 

PS : j'ai fait ça en express et je ne garantis RIEN, à toi de réfléchir et tester.

Message cité 1 fois
Message édité par TotalRecall le 29-12-2015 à 16:15:35

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2272416
Viince06
Posté le 29-12-2015 à 16:19:13  profilanswer
 

TotalRecall a écrit :

C'est bizarre parce qu'en cherchant juste "puissance 4 java" j'ai eu subitement l'impression que le puissance 4 était le jeu le plus populaire du  
web.


 
Oui il y a beaucoup de liens sur le Puissance 4 mais aucun qui ne me donne réellement d'explications !

n°2272419
Viince06
Posté le 29-12-2015 à 16:33:45  profilanswer
 

Les X et Y correspondent, mais j'ai un erreur de semicolon (parenthèses je pense dans ce cas, mais je n'arrive pas à la résoudre) :fou:

mood
Publicité
Posté le 29-12-2015 à 16:33:45  profilanswer
 

n°2272420
TotalRecal​l
Posté le 29-12-2015 à 16:38:17  profilanswer
 

semicolon c'est point virgule. En me relisant vite fait je ne vois pas où, de tte façon ton compilo doit te le dire...

 

edit : ah tiens, il manque une virgule au milieu du dernier test dans le if. C'est peut être ça, en tout cas ça marcherait mieux avec :whistle:.


Message édité par TotalRecall le 29-12-2015 à 16:39:41

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2272429
Viince06
Posté le 29-12-2015 à 19:35:15  profilanswer
 

Je l'avais trouvé.
J'ai une autre erreur sur cette ligne

Code :
  1. boolean MemeValeur(int joueur, int a, int b, int c, int d){


 
"unexpected token : boolean"

n°2272591
Viince06
Posté le 01-01-2016 à 23:52:50  profilanswer
 

Sinon, comment remplacer les chiffres par des images de pion ??
 
j'ai essayé de remplacer les "fill" par des "images" mais comment mettre le pion à la position du chiffre?
 

Code :
  1. PImage GrillePuissance4, PionJaune, PionRouge;
  2. void setup() {
  3. GrillePuissance4 = loadImage("GrillePuissance4.PNG" );
  4.   PionJaune = loadImage("PionJaune.png" );
  5.   PionRouge = loadImage("PionRouge.png" );
  6. }
  7. for (int y = 0; y < 6; y++) {
  8.       int contenuCase = board[x][y];
  9.       if (contenuCase == 0) fill(255);         // case vide : blanc
  10.       if (contenuCase == 1) fill(255, 0, 0);   // case 1    : pion rouge
  11.       if (contenuCase == 2) fill(255, 255, 0); // case 2    : pion jaune
  12.       text(contenuCase, TAILLE*(x+1), TAILLE*(y+4));


 
Comme ça ? mais quelles positions ?

Code :
  1. if (contenuCase == 1) image(PionRouge, ?? , ?? , 50, 50);


Message édité par Viince06 le 01-01-2016 à 23:54:02
n°2272606
TotalRecal​l
Posté le 02-01-2016 à 11:34:14  profilanswer
 

Si une case fait 50px de large et haut (constante TAILLE), alors la case [x,y] commencera à la position [x*TAILLE, y*TAILLE].
Donc qqch comme :
if (contenuCase == 1) image(PionRouge, x*TAILLE, y*TAILLE, 50, 50);
 
La méthode "fill" m'intrigue, en admettant qu'elle génère un carré de 50px de côté de la couleur elle devrait prendre en argument la position x,y où le dessiner. A moins qu'elle ne soit faite pour dessiner progressivement là où elle n'est pas encore passée.
Là elle prend juste le code de la couleur (format luminance ou format RGB).


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2272615
Viince06
Posté le 02-01-2016 à 15:31:11  profilanswer
 

TotalRecall a écrit :

if (contenuCase == 1) image(PionRouge, x*TAILLE, y*TAILLE, 50, 50);


 
ça ne fonctionne pas, j'ai essayé de tout bidouiller mais l'image du jeton ne se met pas à la place du chiffre
 
Regardes : le pion devrait se mettre sur le "1" : https://i.gyazo.com/777e440830901e2dbbb4ed2802bd4bff.png
 
D'ailleurs, comment je fais pour enlever les chiffres qui sont en haut et sur le coté droit (que le prof a mis pour se repérer) ?
Et comment mettre une image de grille de Puissance 4 en fond et que les cases s’adaptent à celui-ci ?


Message édité par Viince06 le 02-01-2016 à 17:15:52
n°2272620
TotalRecal​l
Posté le 02-01-2016 à 23:02:08  profilanswer
 

En regardant et en réfléchissant 3 secondes tu comprendras que le décalage entre le rond et le 1 est égal au décalage induit en horizontal par la bande noire à gauche et en vertical par les chiffres + bandes noires en haut...

 

Evidemment : le calcul x*TAILLE, y*TAILLE part du principe que la grille commence en haut à gauche, là il faut rajouter un offset, à la grosse louche 55px en X et 160 en Y.

Message cité 1 fois
Message édité par TotalRecall le 02-01-2016 à 23:03:56

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2272622
Viince06
Posté le 02-01-2016 à 23:47:00  profilanswer
 

TotalRecall a écrit :

En regardant et en réfléchissant 3 secondes tu comprendras que le décalage entre le rond et le 1 est égal au décalage induit en horizontal par la bande noire à gauche et en vertical par les chiffres + bandes noires en haut...
 
Evidemment : le calcul x*TAILLE, y*TAILLE part du principe que la grille commence en haut à gauche, là il faut rajouter un offset, à la grosse louche 55px en X et 160 en Y.


 
C'est bon finalement j'avais trouvé seul avant ta réponse.


Message édité par Viince06 le 02-01-2016 à 23:52:44
n°2272623
Viince06
Posté le 03-01-2016 à 00:03:03  profilanswer
 

Par contre, je n'arrive toujours pas depuis tout à l'heure à ajuster les colonnes et les lignes au format de l'image de la grille de jeu .... :cry:
 
Dès que j'augmente la taille du texte (qui forment enfaite les cases), les colonnes bougent littéralement de place ... quand je clique sur un colonne, c'est celle d'à côté qui est prise en compte ..
 
Comment faire ? :??:


Message édité par Viince06 le 03-01-2016 à 00:04:41
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

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