Processing - Puissance4 - Java - Programmation
Marsh Posté le 01-04-2019 à 11:41:00
C'est assez simple, tu représentes ton terrain de jeu comme un tableau de 6*7 cases, et tu définis un code, par exemple : 0 = case vide, 1 = jeton rouge, 2 = jeton jaune.
Tu te retrouves en mémoire avec un truc de ce genre :
0000000
0000000
0000000
0001000
0012000
0121200
Il faut que tu fasses un algo qui recherche une suite de 4 1 ou 4 2. Pour ce faire, l'approche bête, c'est de faire le tour de ton tableau, et dès que tu croises un 1 ou un 2, tu regardes ce qu'il y a autour et t'en déduis s'il fait partie d'une série.
Marsh Posté le 01-04-2019 à 15:24:13
Je viens de me renseigner sur Processing, visiblement t'es pas un informaticien donc je vais développer un peu l'algo de recherche :
Résumé : regarde ton tableau comme ça
1 2 3 4 5 6 7
6 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 2 3 4 5 6 7
6 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 2 3 4 5 6 7
6 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 2 3 4 5 6 7
6 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
En vert, les cases que tu dois vérifier pour les coups verticaux, en rouge les coups horizontaux et en jaune les coups en diago. Pour chaque case, tu examines la couleur du pion (s'il y en a un), et tu regardes la couleur des pions posés sur les cases adjacentes en fonction du scénario. Si les 4 cases examinées sont de la même couleur, bingo, c'est gagné.
Edit : Il manquait les diagonales vers la gauche (en bleu)
Marsh Posté le 01-04-2019 à 16:49:31
Sans vraiment réfléchir au problème, je ferai autrement, à chaque coup joué, je vérifierai si des jetons identiques se trouvent autour en faisant des boucles tant que vers le bas jusqu'à temps d'avoir 3 autres jetons identiques ou un jeton différent. Dans le premier cas on arrête la partie, sinon on vérifie horizontalement, combien à droite ? Combien à gauche ? (boucles imbriquées pour maximiser à 3 itérations au total)
Puis de même dans les diagonales.
Marsh Posté le 01-04-2019 à 17:01:34
MaybeEijOrNot a écrit : Sans vraiment réfléchir au problème, je ferai autrement, à chaque coup joué, je vérifierai si des jetons identiques se trouvent autour en faisant des boucles tant que vers le bas jusqu'à temps d'avoir 3 autres jetons identiques ou un jeton différent. Dans le premier cas on arrête la partie, sinon on vérifie horizontalement, combien à droite ? Combien à gauche ? (boucles imbriquées pour maximiser à 3 itérations au total) |
Approche globale vs contextuelle.
C'est une autre solution, plus efficace mais certainement un poil plus complexe à mettre en place pour un novice total, où il devra notamment faire attention à ne pas sortir du tableau.
Marsh Posté le 17-04-2019 à 19:18:58
Salut
Je ne sais pas quelle est la meilleure façon de procéder (débutant inside)
J'avais codé un programme pour résoudre un Boggle sur codingame, et je faisais le tour des lettres environnantes pour trouver un mot. Pour ne pas dépasser de la grille et me retrouver avec des out of bound j'avais entouré la grille (de 4 x 4 pour un boggle) avec des tirets (-) (donc ensuite 6 x 6)
Code :
|
Ensuite javais 4 methodes presque identiques pour passer le truc "à la moulinette" (fallait que je gère les lettres blacklistées lorsque déja utilisées). Je mets le code, ça peut peut être donner des idées (si c'est nul dites le je le vire )
Code :
|
Marsh Posté le 17-04-2019 à 19:23:57
Et fallait trouver "repus" ou "super" ?
Marsh Posté le 13-02-2019 à 20:56:39
Bonjour, j'ai un devoir à rendre pour la rentrée, je dois réaliser un Puissance4 avec Processing.
Mon problème est de trouver lorsque 4 point d'une couleur sont alignés, je sais qu'on peut utiliser un tableau avec int[][] mais je ne comprends pas comment l'utiliser.
Est-ce que quelqu'un peut m'aider ?
Mon code :
int x=-50, y=-50, c, n=0, ligne1=0, ligne2=0, ligne3=0, ligne4=0, ligne5=0, ligne6=0, ligne7=0;
PImage Grille;
void setup()
{
size(1200,900);
background(#FFFFFF);
Grille = loadImage("Grille.png" );
image(Grille,250,200,700,650);
}
void mousePressed()
{
n=n+1;
ligne();
}
void draw()
{
if(n%2==0)
{
if(mousePressed)
{
ellipse(x,y,85,88);
fill(#F00000);
locMouseX();
c();
}
}
else
{
if(mousePressed)
{
ellipse(x,y,85,88);
fill(#FFF033);
locMouseX();
c();
}
}
}
//----------------------------------------------------------------------------------
void locMouseX() // trouve la colonne de la souris
{
if (mouseX >= 250 && mouseX < 350)
{
c=1;
}
if (mouseX >= 350 && mouseX < 450)
{
c=2;
}
if (mouseX >= 450 && mouseX < 550)
{
c=3;
}
if (mouseX >= 550 && mouseX < 650)
{
c=4;
}
if (mouseX >= 650 && mouseX < 750)
{
c=5;
}
if (mouseX >= 750 && mouseX < 850)
{
c=6;
}
if (mouseX >= 850 && mouseX < 950)
{
c=7;
}
}
//-------------------------------------------------------------------------------
void c()
{
if (c==1)
{
x=301;
y=792-ligne1;
}
if (c==2)
{
x=401;
y=792-ligne2;
}
if (c==3)
{
x=501;
y=792-ligne3;
}
if (c==4)
{
x=600;
y=792-ligne4;
}
if (c==5)
{
x=699;
y=792-ligne5;
}
if (c==6)
{
x=798;
y=792-ligne6;
}
if (c==7)
{
x=897;
y=792-ligne7;
}
}
//-------------------------------------------------------------------------
void ligne()
{
if (c==1)
{
if(ligne1<535)
{
ligne1=ligne1+107;
}
else
{
n=n+1;
}
}
if (c==2)
{
if(ligne2<535)
{
ligne2=ligne2+107;
}
else
{
n=n+1;
}
}
if (c==3)
{
if(ligne3<535)
{
ligne3=ligne3+107;
}
else
{
n=n+1;
}
}
if (c==4)
{
if(ligne4<535)
{
ligne4=ligne4+107;
}
else
{
n=n+1;
}
}
if (c==5)
{
if(ligne5<535)
{
ligne5=ligne5+107;
}
else
{
n=n+1;
}
}
if (c==6)
{
if(ligne6<535)
{
ligne6=ligne6+107;
}
else
{
n=n+1;
}
}
if (c==7)
{
if(ligne7<535)
{
ligne7=ligne7+107;
}
else
{
n=n+1;
}
}
}
Message édité par wyking le 13-02-2019 à 21:07:16