Page 1 sur 1
[R] Jeu de la vie
Posté : mar. 10 mars 2015 21:55
par sozary
Bonsoir!
Je suis actuellement en train de créer un "jeu de la vie" pour le fun, mais voici un petit problème...
De 1 je pense que ma technique d'affichage avec array est moisis du fait que le programme est hyyper long, ce qui n'est franchement pas agréable pour l'utilisateur...
De 2, Il y a surement une erreur, pourtant j'ai pris les règles sur wikipédia, mais l'affiche n'est pas celui escompté...
Je vous fourni le code pour d'éventuels conseils afin que mon programme marche si vous avez le cœur à me lire!
PS: J'ai mis les bornes des for avec un décalage de 3 pour pas prendre en compte les bordure d'écran (juste parce que je pensais que ma méthode d'affichage ne serais pas top, donc autant ne pas faire bouillir mon cerveau a des fins inutiles

)
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <Array.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
HotKeySet("{ESC}","_Sort")
Global $Height=500,$Width=500
Global $Grid[$Height][$Width]
For $i=0 to UBound($Grid)-1
For $j=0 to UBound($Grid,2)-1
$Grid[$i][$j]=0
Next
Next
$Grid[50][50]=1
$Grid[51][50]=1
$Grid[50][49]=1
$Grid[51][49]=1
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", $Height, $Width, 500, 346)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_GDIPlus_Startup()
$graphHdl = _GDIPlus_GraphicsCreateFromHWND($Form1)
_GDIPlus_GraphicsClear($graphHdl, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF)
; _ArrayDisplay($Grid)
do
For $i=4 to $Height-4
for $j=4 to $Width-4
$Voisins=0
If $Grid[$i-1][$j]=1 Then
$Voisins+=1
EndIf
If $Grid[$i-1][$j-1]=1 Then
$Voisins+=1
EndIf
If $Grid[$i+1][$j]=1 Then
$Voisins+=1
EndIf
If $Grid[$i+1][$j+1]=1 Then
$Voisins+=1
EndIf
If $Grid[$i][$j+1]=1 Then
$Voisins+=1
EndIf
If $Grid[$i][$j-1]=1 Then
$Voisins+=1
EndIf
If $Grid[$i-1][$j+1]=1 Then
$Voisins+=1
EndIf
If $Grid[$i+1][$j-1]=1 Then
$Voisins+=1
EndIf
If $Voisins<2 Then $Grid[$i][$j]=0
If $Voisins>3 Then $Grid[$i][$j]=0
If $Voisins=3 Then $Grid[$i][$j]=1
If $Voisins=3 or $Voisins=2 Then $Grid[$i][$j]=1
ConsoleWrite($Voisins&@CRLF)
If $Grid[$i][$j]=1 Then
_GDIPlus_GraphicsDrawRect($graphHdl,$j,$i,1,1)
Else
_GDIPlus_GraphicsDrawRect($graphHdl,$j,$i,1,1,$hPen)
EndIf
Next
Next
Until GUIGetMsg()=-3
_Sort()
Func _Sort()
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($graphHdl)
_GDIPlus_Shutdown()
Exit
EndFunc
Re: [..] Jeu de la vie
Posté : mer. 11 mars 2015 14:32
par Jeco
Je te l'ai un peu améliorer pour qu'il fonctionne
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <Array.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
HotKeySet("{ESC}","_Sort")
Global $Height=101,$Width=101
Global $coef=1
Global $Grid[$Height][$Width]
Global $Grid2[$Height][$Width]
For $i=0 to $Height-1
For $j=0 to $Width-1
$Grid[$i][$j]=0
Next
Next
$Grid[Int($Height/2)-1][Int($Width/2)]=1
$Grid[Int($Height/2)][Int($Width/2)]=1
$Grid[Int($Height/2)+1][Int($Width/2)]=1
#cs
For $nb=0 to 5
$Grid[Int($Height/2)-4+$nb][Int($Width/2)+4]=1
$Grid[Int($Height/2)-4+$nb][Int($Width/2)+3]=1
$Grid[Int($Height/2)-1+$nb][Int($Width/2)-3]=1
$Grid[Int($Height/2)-1+$nb][Int($Width/2)-4]=1
Next
For $nb=0 to 5
$Grid[Int($Height/2)-4][Int($Width/2)-4+$nb]=1
$Grid[Int($Height/2)-3][Int($Width/2)-4+$nb]=1
$Grid[Int($Height/2)+3][Int($Width/2)-1+$nb]=1
$Grid[Int($Height/2)+4][Int($Width/2)-1+$nb]=1
Next
#ce
$Grid2=$Grid
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", $Height*$coef, $Width*$coef, 500, 346)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_GDIPlus_Startup()
$graphHdl = _GDIPlus_GraphicsCreateFromHWND($Form1)
_GDIPlus_GraphicsClear($graphHdl, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF)
;_ArrayDisplay($Grid)
do
For $i=2 to $Height-4
for $j=2 to $Width-4
$Voisins=0
$Voisins+=$Grid[$i-1][$j-1]
$Voisins+=$Grid[$i-1][$j]
$Voisins+=$Grid[$i-1][$j+1]
$Voisins+=$Grid[$i][$j-1]
$Voisins+=$Grid[$i][$j+1]
$Voisins+=$Grid[$i+1][$j-1]
$Voisins+=$Grid[$i+1][$j]
$Voisins+=$Grid[$i+1][$j+1]
Switch $Voisins
Case 0,1
$Grid2[$i][$j]=0
Case 2
$Grid2[$i][$j]=$Grid[$i][$j]
Case 3
$Grid2[$i][$j]=1
Case 4 to 8
$Grid2[$i][$j]=0
EndSwitch
If $Grid[$i][$j] Then
_GDIPlus_GraphicsDrawRect($graphHdl,$j*$coef,$i*$coef,$coef,$coef)
Else
_GDIPlus_GraphicsDrawRect($graphHdl,$j*$coef,$i*$coef,$coef,$coef,$hPen)
EndIf
Next
Next
$Grid=$Grid2
Until GUIGetMsg()=-3
_Sort()
Func _Sort()
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($graphHdl)
_GDIPlus_Shutdown()
Exit
EndFunc
EDIT: correction des erreurs
Re: [..] Jeu de la vie
Posté : mer. 11 mars 2015 15:09
par sozary
Merci bien!
Oui très bonne idée de ne pas tout redessiner tout à chaque fois

!
J'ai aussi complétement oublier d'utiliser les 1 et 0 du tableau à mon avantage
Également une autre question: pourquoi quand je fais la forme du "clignotant" (alignement de 3 pixels voisins)[

], la deuxième image que j'ai moi c'est celle là? [voir img annexe]
Merci quand même Feco!
Re: [..] Jeu de la vie
Posté : mer. 11 mars 2015 15:56
par Jeco
Oui c'est de ma faute il y avait une petite erreur de code
je l'ai modifié dans mon premier message regarde a nouveau
Re: [..] Jeu de la vie
Posté : mer. 11 mars 2015 16:20
par sozary
Ah oui les 2 en effet!
Merci bien !