Probleme d'algo puissance 4

raziel62 Messages postés 53 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 17 septembre 2005 - 9 mars 2005 à 15:34
cqui789 Messages postés 261 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 18 mai 2009 - 10 mars 2005 à 01:04
salut,



je suis en train de faire un puissance 4 en vb6. mais je bloque pour voir qu´il y a 4 pions alignés ou non.



donc je vous explique ce que j´ai fait:



j´ai fait le jeu avec des images indexées (avec drag and drop) mais lorsque le joueur
met un pion, ça remplie aussi un tableau a deux dimensions tab(-2 to
10, -2 to 10)

normalement le joueur peut mettre des pions que entre 1 et 7 mais
j´ai rajouter une " bordure" de 3 pour pouvoir comparer car sinon j´ai
un message d´erreur.



le premier nombre c´est la collone et le deuxieme la ligne.



maintenant il ne reste plus qu´a ecrire l´algo mais j´aimerai faire
un truc propre et pas une succession de IF j'ai compté 16 cas differents ou on peut avoir 4 pions alignés. Quelqu´un a une idée?



merci

6 réponses

DomCabana Messages postés 14 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 9 mars 2005
9 mars 2005 à 17:32
Dans un cas semblable j'avais prix les 2 premières cases, si pareil, je prend 3 case, si pareil je prend 4 case, si pareil bingo

donc bouclé par deux case surveillé pour la dernière pour ne pas dépassé
répété pour le sens des lignes soit verticale, horizontale et diagonale

il te faudra peut-être utilisé le modulo à certain endroit.
0
raziel62 Messages postés 53 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 17 septembre 2005
9 mars 2005 à 18:20
ok merci je pense que c'est ce que j'ai fait un peu pret :



j'ai fait quatres tests deux pour les diagonales et deux pour
l'orizontal et le vertical. Ca marche mais si quelqun a une idée pour
simplifier le code ...



Tabl(collone, ligne) permet de determiner quel est le pion du joueur qui a jouer en dernier.



For j = -3 To 3



If Tabl(collone + j, ligne - j) = Tabl(collone, ligne) Then

compteur1 = compteur1 + 1

If compteur1 = 4 Then

MsgBox ("V")

End If

Else

compteur1 = 0

End If

'''''''''''''''

If Tabl(collone - j, ligne - j) = Tabl(collone, ligne) Then

compteur2 = compteur2 + 1

If compteur2 = 4 Then

MsgBox ("V")

End If

Else

compteur2 = 0

End If

'''''''''''''''

If Tabl(collone, ligne - j) = Tabl(collone, ligne) Then

compteur3 = compteur3 + 1

If compteur3 = 4 Then

MsgBox ("V")

End If

Else

compteur3 = 0

End If

'''''''''''''

If Tabl(collone + j, ligne) = Tabl(collone, ligne) Then

compteur4 = compteur4 + 1

If compteur4 = 4 Then

MsgBox ("V")

End If

Else

compteur4 = 0

End If



Next
0
DomCabana Messages postés 14 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 9 mars 2005
9 mars 2005 à 18:43
Je ne l'écrirai pas au point mais je te donne un apercu

for i = 0 to 3 ' 0=verticale, 1=horizontale, 2=dia1, 3 =dia2
for j = 0 to colonne-1
if Tabl(colonne+i,ligne+j) = Tabl(colonne+i+1, ligne+j)

else

end if
next
next

À partir de la tu dois ajuster tes variables pour couvrir tout ton tablo de jeu, exemple pour diagonale1 tu devras peut-être ajouter une variable x pour te permettre d'arrivé à la position désiré. Je ne peux pas m'assir et concevoir l'algorithme à ta place mais ca devrait resembler à ca avec des variantes
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
9 mars 2005 à 21:46
il y a 4 tests à faire: 1 pour l'orizontal, 1 pour la verticale, et 2 pour les diagonales.
soit la Table T(x,y) qui contient 0 si vide, 1 pour joueur n°1, 2 pour joueur n° 2, etc ...
soit xx, yy la taille de la grille, soit j le joueur en cours et x,y la dernière case jouée.

'test horizontal b y: n 0
for a = 1 to xx if T(a,b) j then n n + 1 if n 4 then cas 1: exit for
next

'text vertical a x: n 0
for b = y to yy if T(a,b) j then n n + 1 if n 4 then cas 2: exit for
next

'test diagonale 1 d x + y: n 0
for a = 1 to xx
b = d - a
if b <= yy and b > 0 then if T(a,b) j then n n + 1 if n 4 then cas 3: exit for
end if
next

'test diagonale 2 d x - y: n 0
for a = 1 to xx
b = a - d
if b <= yy and b > 0 then if T(a,b) j then n n + 1 if n 4 then cas 4 exit for
end if
next

Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cqui789 Messages postés 261 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 18 mai 2009 3
10 mars 2005 à 00:09
Je vais y aller de ma proposition.

Dans ton code, si il y a 4 pion non consecutif (tu scane sur 7 places) tu peu rendre un gagne.



le joueur j vient de jouer en x,y

' on regarde a droite et a gauche

a=1

do while tabl(x + a, y ) = j

a = a + 1

loop

b=1

do while tabl(x - b, y) = j


b=b + 1


loop

if a + b > 4 then Call Gagne

' on regarde enbas a droite et en haut a gauche

a=1


do while tabl(x + a, y + a ) = j


a = a + 1


loop


b=1


do while tabl(x - b, y - b) = j



b=b + 1



loop


if a + b > 4 then Call Gagne

' on regarde en haut a droite et en bas a gauche

a=1



do while tabl(x + a, y - a ) = j



a = a + 1



loop



b=1



do while tabl(x - b, y + b) = j




b=b + 1




loop



if a + b > 4 then Call Gagne

' et enfin, en bas et a gauche


a=1



do while tabl(x, y + a ) = j



a = a + 1



loop



b=1



do while tabl(x, y - b) = j




b=b + 1




loop



if a + b > 4 then Call Gagne



on doit pouvoir faire plus simple...
0
cqui789 Messages postés 261 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 18 mai 2009 3
10 mars 2005 à 01:04
Je le savait, on peut faire plus court:



dim ok(-1 to 1, -1 to 1) as boolean, compt( 0 to 4) as integer

for a = 1 to 3

for b = - 1 to 1

for c = - 1 to 1

if tabl( x + b * a, y + c * a) = j and ok( b, c) then

compt(Abs(b + c * 3)) = compt( Abs(b + c * 3)) + 1

else

ok( b, c) = False

end if

next

next

next

for a = 1 to 4

if compt(a) > 2 then gagne

next
0
Rejoignez-nous