Un jeu de la vie

Description

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

Codes Sources

A voir également

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.