J'ai vu passer aujourd'hui un jeu de la vie archi lourd (mais avec pas mal de fonction). Seulement il fesait ramer tout comme un chien, alors j'en ai fait un en vitesse, sans aucune prétention (sauf celle de fonctionner, et d'être moins gourmande)
Pour faire plus simple j'ai passé l'univers boucle (je ne m'occupe même pas des bords) et toutes les fonctions utiles, style sauvegarde. Vous êtes même obligé de passer a la génération suivant a la main. Mais en contrepartie, vous prenez une nouvelle forme, vous mettez l'autoredraw a true, vous rajoutez deux boutons, et c'est tout.
Pour les pas dués du copier/coller, y'a un zip :)
Source / Exemple :
Option Explicit
'tableau contenant l'univers en cours
Dim Vie(50, 50) As Boolean
Private Sub Command1_Click()
'on calcule la nouvelle génération
NewReneration
'et on l'affiche
Redraw
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer
'on réinitialise tout
For i = 1 To 50
For j = 1 To 50
Vie(i, j) = False
Next j
Next i
'on redessine
Redraw
End Sub
Private Sub Form_Load()
'au démarage on dessine le cadre (vide)
Redraw
End Sub
Sub Redraw()
'on (re)dessine l'univers
Dim i As Integer, j As Integer
Me.Cls 'faut bien touteffacer
'les lignes horizontl
For i = 0 To 50
Line (i * 10, 0)-(i * 10, 500)
Next i
'et verticales
For i = 0 To 50
Line (0, i * 10)-(500, i * 10)
Next i
'on dessine les cellules vivantent
For i = 1 To 50
For j = 1 To 50
If Vie(i, j) Then Circle (i * 10 - 5, j * 10 - 5), 4, 255
Next j
Next i
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim nX As Integer, nY As Integer
'les coordonnées de la cellule cliquée
nX = Int(X / 10) + 1
nY = Int(Y / 10) + 1
'pour pas planter si on cliques en dehours de notre cadre
If nX > 50 Or nY > 50 Then Exit Sub
'on change l'état de la cellule
Vie(nX, nY) = Not Vie(nX, nY)
'on redessine
Redraw
End Sub
Sub NewReneration()
Dim Vie2(50, 50) As Boolean
Dim i As Integer, j As Integer
Dim Voisins As Integer
'on ne s'occupe que d'un univers fini a 1 case des bords (splu simple, spour ça)
For i = 2 To 49
For j = 2 To 49
'on compte les voisins
Voisins = 0
If Vie(i + 1, j + 1) Then Voisins = Voisins + 1
If Vie(i + 1, j) Then Voisins = Voisins + 1
If Vie(i + 1, j - 1) Then Voisins = Voisins + 1
If Vie(i - 1, j + 1) Then Voisins = Voisins + 1
If Vie(i - 1, j) Then Voisins = Voisins + 1
If Vie(i - 1, j - 1) Then Voisins = Voisins + 1
If Vie(i, j + 1) Then Voisins = Voisins + 1
If Vie(i, j - 1) Then Voisins = Voisins + 1
'en fonction on sait si une cellule va naitre ou mourir
If Voisins = 2 Then
Vie2(i, j) = Vie(i, j) 'inchangé
ElseIf Voisins = 3 Then
Vie2(i, j) = True 'naissance
Else
Vie2(i, j) = False 'mort
End If
Next j
Next i
'on le recopie
For i = 1 To 50
For j = 1 To 50
Vie(i, j) = Vie2(i, j)
Next j
Next i
End Sub
Conclusion :
voila voila
Comme d'hab
http://www.rature.com
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.