Forum

Catégorie : Programmes
Forum : Aide à la programmation
Vues : 6547
Réponses : 84
Type : discussion
Etat : réponses autorisées

Reversi - Page 1 / 2

Gui958 le 21/06/2007 à 13:35
Bonjour la communauté, je me demandais si quelqu'un serai capable de faire un reversi!
Je vois deja comment on peut le faire en rentrant les coordonnées dans une matrice !
Puis apres je ne sais pas comment faire pour maitre un pion au bon endroit c'est a dire en face de l'un de ces pions pour continuer!
Oué je sais je suis pas clair crazy.gif crazy.gif
coc5 le 21/06/2007 à 13:55
(On dit "mettre un pion" et pas "maître un pion")

C'est faisable.

Par exemple on peut construire un terrain (de la même manière dont j'ai fais mon démnieur d'ailleurs). On choisis la case ou on met le point etc...

Pour ta question, je pense qu'on peut faire qu'après la validation du posage de pion une identification des alentoures. Avec la position du piont en (B,A), 1 la présence d'un point à soi et 2 la présence d'un pion adverse.

Code
Getkey->K
If K=105:Then
For(I,-1,1
For(J,-1,1
J->H:I->L
Lbl 5
If (I or J) and [A](B+J,A+I)=2:Then
2I->I:2J->J
Goto 5
End
If[A](B+J,A+I)=1:Then
For(V,H,J
For(W,L,I
1->[A](V,W
End:End:End
End:End


Ou quelque chose comme ça glasses.gif crazy.gif
Gui958 le 21/06/2007 à 14:27
Hum a vrai dire j'ai pas trop compris mais je pense que sa va !
[ oué je sais je suis toujours pas clair ] crazy.gif crazy.gif
coc5 le 21/06/2007 à 14:43
Tu t'y connais en programmation ?

Explication:

Getkey->K
i]Mettre dans K la valeur de la touche appuyé (O si aucun signal)[/i]

If K=105:Then
Si tu appuies sur [Enter]For(I,-1,1 Pour I de -1 à 1

For(J,-1,1
Pour J de -1 à 1J->H:I->L H prend la
valeur de J et L prend la valeur de I

Lbl 5
Debut de boucle n°5

If (I or J) and [A](B+J,A+I)=2:Then
Si I ou J existe (n'est pas égal à O quoi, pour éviter qu'il fasse le travail sur l'endoirt ou tu pose le pion) et la case où tu as poser le pion -décalé de J cases en hauteur et I cases de coté- comprend un pion adverse.

2I->I:2J->J
Alors le décalage est doublé par rapport à la position de départ.

Goto 5
Et on revient Au début de la boucle avec le nouveau décalage.

End
Fin de la condition If

If[A](B+J,A+I)=1:Then
Si quand il n'y a plus de point adverse on tombe sur un point à soi.


For(V,H,J
For(W,L,I

Alors pour [A](V,W) de la position du premier pion adverse identifié
autour du pion posé jusqu'au dernier pion adverse identifié,

1->[A](V,W
leur donner la valeur d'un pion à soi.


End:End:End
End:End
Fin de tout^^


Tu comprends mieux maintenant ?
Gui958 le 21/06/2007 à 14:56
nan nan c'etait bon mais je savais pas comment l'integrer dans mon programme, c'est pour sa !
coc5 le 21/06/2007 à 18:15
Faut l'intégrer au moment où tu appuies sur enter pour mettre ton pion happy.gif
Gui958 le 21/06/2007 à 19:13
Ok mais il est complet ?
Code
Getkey->K
If K=105:Then
For(I,-1,1
For(J,-1,1
J->H:I->L
Lbl 5
If (I or J) and [A](B+J,A+I)=2:Then
2I->I:2J->J
Goto 5
End
If[A](B+J,A+I)=1:Then
For(V,H,J
For(W,L,I
1->[A](V,W
End:End:End
End:End

Il fait aussi les diagonales ? Vers la droite puis vers la gauche ? Vers le haut puis vers le bas ?
Stupid le 21/06/2007 à 19:16
il fait les diagonales mais n'affiche pas le pion ne gere pas le fait que tu pourrais etre au bout de l'écran et j'ai pas l'impression qu'il retourne tout les pions sur toute une ligne
Gui958 le 21/06/2007 à 19:19
Enfet il verifi juste sur les lignes s'il y a deux fois le meme numero ?
Stupid le 21/06/2007 à 19:21
je crois que ça transforme que le piuon d'a coté

en fait il faut que tu geres

-la verification d'un pion sur la meme ligne ou colonne
-donc il faut gerer la position des pions par rapport au minimum et au maximum de la matrice
-qu'en consequence ça retourne tout les pions et ça change leurs valeurs

c'est faisable mais c'est chaud et j'ai la flemme de faire un truc complet
Gui958 le 21/06/2007 à 19:25
Mdr je te comprends, sa fait plus d'une heure que je suis sur la conversion des pions ! crazy.gif
Stupid le 21/06/2007 à 19:27
si tu dit que le reversi fait 10 de longueur alors faut que tu fasses des boucles qui testent si sur 10-la position du pion y'ait un pion de la meme couleur et que sur la position du pion jusqu'à un ça fasse pareil.
Gui958 le 21/06/2007 à 19:31
Le mien ne fait pas 10 sur 10 car 10/10 fait un rectangle sur l'ecran normal, alors j'ai pris 8/11 et ça a la forme d'un carré !
Stupid le 21/06/2007 à 19:33
c'est que t'as pas les bonnes dimensions de la fenetre

et dans ce cas tu geres une fois le max c'est 11 et apre sle max c'est 8
Gui958 le 21/06/2007 à 19:43
Oué c'est ce que je fais mais y'a une seul case qui marche correctement, tandis que les autres quand je veux mettre mon pion ça me met des pions un peu partout ! angry.gif
Gui958 le 21/06/2007 à 21:57
y'a un truc que je comprends pas :
Code
For(S,X,7)
B+1->B
If [A](A,B)=1
Goto D
End
Goto 2
Lbl D
For(T,X,B)
1->[A](T,A)
End
Lbl 2

Sa devrai me mettre le pion au endroit indiqué mais nan sa m'en fou un de comme sa sur l'ecran et pas a l'endroit attendu !
Y'a un truc de faux dans la parti du programme ?
coc5 le 22/06/2007 à 10:01
> Par rapport à ce que je écris ça gère l'identification dans tous les sens tant qu'il en y a et le retournement des pions. Vous auriez lu mon explication (on dirait qu'elle est pas claire^^) vous auriez compris. La seule choses non prise en compte c'est si le pion est sur le coté du plateau. Mais dans ces genres de jeu je met toujours une colonne en plus et une ligne de chaque coté.
Mais sinon c'est facile tu met d'abord la condition
Code

If A and B and A=/=11 and B=/=11:Then
[...]
End


Donc pas besoin de ton truc au dessus il est trop compliqué pour un truc simple et ne remplit pas les conditions( Contrairement à ce que vous avez dis ce que j'ai écris gère tout (en dehors des limites mais bon ) même les diagonales...
Sangohan38 le 22/06/2007 à 14:42
Pour retourner une ligne, il faut à chaque pion placé regarder sur la ligne, sur la colonne, en diagonal et puis, selon l'emplacement du pion de la même ligne, on enlève un à sa coordonnée si c'est en horizontal ou en vertical et on fait une boucle qui change les nombres de la matrice pour que ça devienne la même couleur.

Il n'y as pas forcément besoin de matrice pour faire ce prog, une liste peut faire le même effet.

Sangohan38
Gui958 le 22/06/2007 à 15:43
Oui mais avec une matrice c'est plus simple crazy.gif clown.gif
Sangohan38 le 22/06/2007 à 17:50
Plus simple? Je trouve pas.
Moi j'adore les liste et elle me le rendent bien.

Sangohan38
Gui958 le 22/06/2007 à 17:51
Oué mais comme c'est la premiere fois que j'utilise une Matrice [ la premiere fois que j'en voie l'utilité ! ] je la grade clown.gif
mad67 le 25/06/2007 à 08:12
en tout cas il faut faire un reversi
qui veut jouer le pigeon et le faire.
coc5 le 25/06/2007 à 16:48
J'aurais le temps je dirais oui mais là je pars^^
Pendant les vacnaces peut-être bigmouth.gif

mais si personne ne le fait alors happy.gif
Stupid le 25/06/2007 à 17:10
je vais essayer mais si j'y arrive je le posterais en exclu sur mon fofo
Sangohan38 le 25/06/2007 à 17:53
Bon je crois que je vais être obligé de le faire.

Sangohan38
vibra le 25/06/2007 à 18:01
A 2 ou contre la calculette ?
Sangohan38 le 25/06/2007 à 18:03
Ce sera un jeux à deux joueurs.
Cependant si l'envie me prend, je ferais une IA.

Sangohan38
vibra le 25/06/2007 à 18:04
Nan merci.
mad67 le 26/06/2007 à 09:47
non categorique je fais autre chose qui sera plus interressant
vibra le 26/06/2007 à 11:29
Bon, je vous le fait si j'ai le temps. C'est pas bien compliqué.
mad67 le 26/06/2007 à 12:00
oui mais il ne faut pas jouer les pigeons.
vibra le 26/06/2007 à 12:04
C'est à dire ?
mad67 le 26/06/2007 à 12:05
il demande un prog et tu le lui fait sa s'appelle se faire pigeonner.
Sangohan38 le 26/06/2007 à 13:42
Pour ceux qui sont en manque d'inspiration, ce n'est pas se faire pigeonner.
Et puis cette expression veut dire que tu le fait sans le vouloir ce qui n'est pas le cas ici.

Sangohan38
vibra le 26/06/2007 à 14:22
Pourquoi t'as effacé mon "Glou Glou" ? C'était pas du flood !!
Sangohan38 le 26/06/2007 à 16:06
Marquer seulement glouglou est du flood.

Sangohan38
Gui958 le 26/06/2007 à 20:59
Salut la compagnie, j'espere que ce n'est pas moi qui est demandé de faire un reversi, j'ai juste demandé conseil !
Sangohan38 le 27/06/2007 à 09:58
On avait mal compris.
Dis tes problèmes pour que t'on aide.

Sangohan38
mad67 le 27/06/2007 à 10:10
je me disait bien que tu n'etais pas comme pmdej qui demande des prog a tord ou a travers
Gui958 le 27/06/2007 à 20:37
Je voulais savoir comment faire pour detecter les pions et les retourner facillement, un ami a utilisé " Cos " dans sa formule je ne sais pas si vous connaissez !
Stupid le 27/06/2007 à 21:00
crazy.gif cosinus crazy.gif

il doit utiliser le graph et la fenetre de base, parce que je vosi vraiment pas l'utilité
ratuss le 28/06/2007 à 02:02
Citation
je vosi vraiment pas l'utilité


oui moi non plus extraterre.gif ...
Sangohan38 le 28/06/2007 à 07:20
Cosinus pour retourner un pion?
Envois son code pour voir.

Sangohan38
mad67 le 28/06/2007 à 09:35
oui sa me parait bizzare.
vibra le 28/06/2007 à 11:19
Pour savoir de quel couleur est un pion, tu utilise Pxl-Test.
Sangohan38 le 28/06/2007 à 15:31
Pas forcément, si tu utilise des listes ou matrices, tu teste le nombre.

Sangohan38
CaRLiTo le 28/06/2007 à 16:40
Bonjour à tous, je suis "l'ami de gui958 qui a utilisé cosinus" (et sinus). Je ne sais pas si c'est la meilleure façon mais voilà la partie de mon code où j'utilise cosinus et sinus...
La variable A représente la position verticale du pion que l'on pose, sur un damier de 8 sur 8 et B la position horizontale. La matrice [J] de 8 sur 8 représente le damier, 0 correspond à une case vide, 1 à un pion noir et -1 à un pion blanc. J est la variable qui correspond au joueur qui joue (noir : 1 ou blanc : -1).
Code

Radian

[...]

0->dim(LREVER)
9->dim(LREVER)   [inutile dans cette fraction de code, mais utile plus loin]
0->dim(LREVE2)
9->dim(LREVE2)   [idem]
For(E,0,7)
-arrondi(sin(E(pi)/4),0)->C
arrondi(cos(E(pi)/4),0)->D
0->F
Lbl 3
F+1->F
If abs(A+CF-4.5)=4.5 ou abs(B+DF-4.5)=4.5   [afin d'être sûr de ne pas être en-dehors des limites de la matrice, auquel cas le prochain IF produirait une erreur "DIM INVALIDE"]
Goto 4
If [J](A+CF,B+DF)=-J
Goto 3
If [J](A+CF,B+DF)=J et F><1
Then
E->LREVER(G)
F-1->LREVE2(G)
G+1->G
End
Lbl 4
End

[...]


A la fin de cette fraction de code, si G = 1, cela signifie que le joueur ne peut pas jouer cette case. Sinon, les positions des pions qui doivent être retournés sont déterminées grâce aux listes LREVER et LREVE2. La suite de mon code consiste à les retourner, toujours à l'aide de cosinus, sinus et ces deux listes.
Gui958 le 28/06/2007 à 16:49
Le programme marche tres bien car je l'ai utilisé hier, j'ai perdu contre Carlito ! cry.gif crazy.gif
Stupid le 28/06/2007 à 18:37
ok il utilise le cercle trigonométriaque

1pi/4=45° 2pi/4=90° etc...

astucieux
Sangohan38 le 28/06/2007 à 22:20
Fallais y penser.

Sangohan38