Hallo und erstma Frohe Ostern an alle ^^
bin grade dabei Conways Spiel des Lebens in Vb.net nach-zu-basteln bin auch eig. fertig nur es leuft nicht so wie es soll.
Es muss an der Nachbar erkennung liegen doch den fehler hab ich noch nicht gefunden.
Spätestens in der 3. Runde sind alle "tot" und der Maler malt auch nicht nach jeder runde weiß.
Hier mal der komplette Code
Die Unterlinien habe ich hier nur der Übersicht halber reinkopiert klappe bei mir immer alles ein (siehe Bild)
Spoiler anzeigen
Bild:
PS: Sorry für den "Chaos Code" bin zu blöd um ordentlichen Code zu schreiben
bin grade dabei Conways Spiel des Lebens in Vb.net nach-zu-basteln bin auch eig. fertig nur es leuft nicht so wie es soll.
Es muss an der Nachbar erkennung liegen doch den fehler hab ich noch nicht gefunden.
Spätestens in der 3. Runde sind alle "tot" und der Maler malt auch nicht nach jeder runde weiß.
Hier mal der komplette Code
Die Unterlinien habe ich hier nur der Übersicht halber reinkopiert klappe bei mir immer alles ein (siehe Bild)
VB.NET-Quellcode
- Public Class Form1
- Dim Stift As New Pen(Color.Blue) 'NUR für Linien
- Dim Pinsel As New SolidBrush(Color.Blue) 'Zum Ausmalen
- Dim Papier As New Bitmap(800, 800)
- Dim Maler As Graphics '= Me.CreateGraphics
- Dim X As Integer = 99
- Dim Y As Integer = 99
- Dim Feld(X, Y) As Zelle
- Dim Kopie(X, Y) As Zelle
- Dim Nachbarzähler As Integer
- '_____________________________________
- Structure Zelle
- Dim Status As Boolean
- End Structure
- '_____________________________________
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- Call Prüfen()
- Call Zeichnen()
- Button1.PerformClick()
- End Sub
- '_____________________________________
- Private Sub Prüfen()
- 'Nachbar zählen
- For i = 0 To 99 'Y
- For t = 0 To 99 'X
- If i <> 0 And t > 0 Then
- If Feld(i - 1, t - 1).Status = True Then ' Oben links | GESICHERT
- Nachbarzähler = Nachbarzähler + 1
- End If
- End If
- If i <> 0 Then
- If Feld(i - 1, t).Status = True Then ' Oben | GESICHERT
- Nachbarzähler = Nachbarzähler + 1
- End If
- End If
- If i <> 0 And t < 99 Then
- If Feld(i - 1, t + 1).Status = True Then ' Oben rechts | GESICHERT
- Nachbarzähler = Nachbarzähler + 1
- End If
- End If
- If t <> 0 Then
- If Feld(i, t - 1).Status = True Then ' Links | GESICHERT
- Nachbarzähler = Nachbarzähler + 1
- End If
- End If
- If t < 99 Then
- If Feld(i, t + 1).Status = True Then ' Rechts | GESICHERT
- Nachbarzähler = Nachbarzähler + 1
- End If
- End If
- If i < 99 And t <> 0 Then
- If Feld(i + 1, t - 1).Status = True Then ' Unten links | GESICHERT
- Nachbarzähler = Nachbarzähler + 1
- End If
- End If
- If i < 99 Then
- If Feld(i + 1, t).Status = True Then ' Unten | GESICHERT
- Nachbarzähler = Nachbarzähler + 1
- End If
- End If
- If i < 99 And t < 99 Then
- If Feld(i + 1, t + 1).Status = True Then ' Unten rechts | GESICHERT
- Nachbarzähler = Nachbarzähler + 1
- End If
- End If
- 'Überlebt?
- If Nachbarzähler = 3 Then
- Kopie(i, t).Status = True
- Else
- Kopie(i, t).Status = False
- End If
- Nachbarzähler = 0
- Next
- Next
- For g = 0 To 99
- For h = 0 To 99
- Feld(h, g).Status = Kopie(h, g).Status
- Next
- Next
- End Sub
- '_____________________________________
- Private Sub Zeichnen()
- Using Maler As Graphics = Graphics.FromImage(Papier)
- Maler.Clear(Color.White)
- End Using
- For i = 0 To 99 'Y
- For t = 0 To 99 'X
- If Feld(i, t).Status = True Then
- Using Maler As Graphics = Graphics.FromImage(Papier)
- Maler.FillRectangle(Pinsel, New Rectangle(i * 6, t * 6, 5, 5))
- End Using
- End If
- Next
- Next
- End Sub
- '_____________________________________
- 'Steuerung + Load + Paint
- '_____________________________________
- Private Sub cmd_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Start.Click
- Timer1.Enabled = True
- End Sub
- '_____________________________________
- Private Sub cmd_Stop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Stop.Click
- Timer1.Enabled = False
- End Sub
- '_____________________________________
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- MsgBox("Wert von Feld Nr. 9801: " & Feld(99, 99).Status)
- For sX = 0 To 99
- For sY = 0 To 99
- Feld(sX, sY).Status = False
- Kopie(sX, sY).Status = False
- Next
- Next
- Feld(1, 1).Status = True
- Feld(1, 2).Status = True
- Feld(2, 1).Status = True
- Feld(3, 3).Status = True
- Feld(3, 4).Status = True
- Feld(4, 3).Status = True
- Feld(4, 4).Status = True
- Feld(4, 4).Status = True
- Feld(4, 5).Status = True
- Feld(23, 20).Status = True
- Feld(23, 21).Status = True
- Feld(24, 20).Status = True
- Feld(49, 49).Status = True
- Feld(10, 10).Status = True
- Feld(10, 20).Status = True
- Feld(10, 30).Status = True
- Feld(10, 40).Status = True
- Feld(10, 49).Status = True
- Call Zeichnen()
- End Sub
- '_____________________________________
- Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
- e.Graphics.DrawImage(Papier, 0, 0)
- End Sub
- ' Array Kontrolle/Visualisierung
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- ListBox1.Items.Clear()
- ListBox2.Items.Clear()
- Dim line1 As String = ""
- For i As Integer = 0 To Feld.GetUpperBound(0)
- For j As Integer = 0 To Feld.GetUpperBound(1)
- line1 = line1 & Feld(i, j).Status & vbTab
- Next
- ListBox1.Items.Add(line1)
- line1 = ""
- Next
- Dim line2 As String = ""
- For i As Integer = 0 To Kopie.GetUpperBound(0)
- For j As Integer = 0 To Kopie.GetUpperBound(1)
- line2 = line2 & Kopie(i, j).Status & vbTab
- Next
- ListBox2.Items.Add(line2)
- line2 = ""
- Next
- End Sub
- End Class
Bild:
PS: Sorry für den "Chaos Code" bin zu blöd um ordentlichen Code zu schreiben
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Eistee“ ()