CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Parcours tableau

Hersage
Hersage
Niveau 16
11 septembre 2011 à 18:49:11

Bonjour,

Je souhaiterai avoir une petite aide au sujet d'un code permettant le parcours d'un tableau à 2 dimensions en vertical, et un autre en diagonale.

En fait je fais le jeu du puissance 4, je voudrai parcourir tout le tableau à chaque fois qu'un joueur met son pion pour savoir si une ligne est alignée.

J'ai pensé à deux boucle for imbriqué, mais le parcours n'est pas bon à chaque fois :(

caelacanthe
caelacanthe
Niveau 10
11 septembre 2011 à 18:58:54

déja, pour tester les diagonales, il te suffit de ne parcourir qu'une partie du tableau:

http://www.noelshack.com/m/1/1/sanstitre-10a4c46919.png

en l'occurence, les cases vertes (dans le cas des diagonales qui vont dans ce sens-là).

pour chaque case en (i, j), tu regardes si les cases en (i+1, j+1), (i+2, j+2), (i+3, j+3) ont un pion de la même couleur que la case d'origine. donc oui,les boucles for imbriquées peuvent aider. :oui:

pareil pour les verticales, tu n'as besoin de tester qu'une partie du tableau, donc les quatre premières lignes, et tu les testes de haut en bas. :hap:

Hersage
Hersage
Niveau 16
11 septembre 2011 à 19:11:15

Si j'écris :

for (i=0; i<NCASES; i++)
for (j=NCASE; j>0; j--)

Le truc c'est qu'ici on ne parcours pas en diagonale, on parcours une ligne même si on test (i+1, j+1), (i+2, j+2), (i+3, j+3).

En verticale, je pourrai tester seulement la verticale où le joueur met son pion (horizontale/diagonale aussi), sans boucle. Mais si mon tableau fait 11x11 par exemple, il faudrait voir tous les cas où on dépasserait les bords du tableau. Donc quitte à prendre plus de temps, je préférerai parcourir tout le tableau à chaque coup.

Kaoron
Kaoron
Niveau 9
11 septembre 2011 à 19:38:46

«Mais si mon tableau fait 11x11 par exemple, il faudrait voir tous les cas où on dépasserait les bords du tableau. Donc quitte à prendre plus de temps, je préférerai parcourir tout le tableau à chaque coup.»

Plutôt que comparer un indice avec les bornes du tableau, tu préfères faire un parcours complet ? Bien hélas, ça ne va pas t'épargner la comparaison de deux entiers.

Puissance N, ça se teste en observant à chaque coup au maximum 7*(N-1) valeurs, (N-1 cases) pour chaque axe dans les deux sens, sauf vertical ou ça ne sert à rien de regarder au dessus du pion qu'on vient de poser et ce quelle que soit la taille du plateau.

Nightmarez
Nightmarez
Niveau 9
11 septembre 2011 à 20:07:15

Le truc que tu peux faire est de parcourir ton tableau de facon lineraire, c'est a dire case par case a la suite, puis une fois que tu trouves un pion, tu verifies si il y'a un pion de la meme couleur dans les cases adjacentes. Si il y'a un pion de meme couleur, tu prend la soustraction des deux coordonnes des deux pions qui te donnent un vecteur directeur, et tu verifie ensuite dans le sens de ce vecteur jusqu'a 4 fois.

C'est un peu plus complique mais moins bourrin, je pense.

Hersage
Hersage
Niveau 16
11 septembre 2011 à 20:14:25

La stratégie du parcours du tableau à chaque coup réaliser par un joueur - 3 parcours complets du tableau (horizontale, puis verticale puis diagonale dans les 2 sens) - est certes très coûteuse, mais je n'ai qu'un seul test de comparaison. Là où je pourrai en avoir plus si je ne fais pas de boucle.
En même temps, on ne joue pas sur une grille d'un million ...

J'ai mes deux fonctions de parcours complet du tableau en horizontale et verticale, je peine actuellement sur celui de la diagonale :(

Kaoron
Kaoron
Niveau 9
12 septembre 2011 à 11:42:14

Un parcours diagonal à partir des deux coins haut d'un tableau (n,m), ça doit donner un truc comme ça :
pour i=0; i<max(n,m); i++
pour j=0; j<i+1; j++
x1 = i-j
x2 = n-(x1)
if x1 < n && j < m : tab[i-j][j]
if x2 >=0 && j < m : tab[n -(i-j)][j]
finpour
finpour

« La stratégie du parcours du tableau à chaque coup réaliser par un joueur - 3 parcours complets du tableau (horizontale, puis verticale puis diagonale dans les 2 sens) - est certes très coûteuse, mais je n'ai qu'un seul test de comparaison. Là où je pourrai en avoir plus si je ne fais pas de boucle.
En même temps, on ne joue pas sur une grille d'un million ... »

Haha, ce bobard.

fonction test_victoire(tab,x,y,c):

hor=0
ver=0
dia1=0
dia2=0

pour i=-3, i<4, i++:

xinbounds = x+i>0 && x+i<n
yinbounds = y+i>0 && y+i<n
ryinbounds = y-i>0 && y-i<n

if xinbounds && tab[x+i][y]==c : hor++
else : hor=0
if yinbounds && tab[x][y+i]==c : ver++
else : ver=0
if xinbounds && yinbounds && tab[x+i][y+i]==c : dia1++
else : dia1=0
if xinbounds && ryinbounds && tab[x+i][y-i]==c : dia2++
else : dia2=0

if hor>3 || ver>3 || dia1>3 || dia2>3 : return True

finpour

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment