Игра "Жизнь" - VB
Формулировка задачи:
Смысл игры в том, что пользователь должен задать какую-либо фигуру на поле, и нажать "Старт". Должны произойти следующие действия:если соседей у клетки <2 или >3 то она погибает, если соседей ровно 2 или 3, то рождается. Пользователь просто наблюдает за развитием событий.
Вот, что у меня есть, но код почему-то не работает, помогите, пожалуйста, найти ошибку!
Всё поле состоит из белых клеток, с помощью чёрных клеток строится фигура.
Заранее большое спасибо!
, я не знаю, как по-другому определить соседа.
Если есть мысли, выкладывайте, пожалуйста! Спасибо!
Листинг программы
- Public Class Form1
- Dim A(1) As Integer
- Dim i, j As Integer
- Dim b As Integer
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- DataGridView1.ColumnCount = 20
- DataGridView1.RowCount = 20
- End Sub
- Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick, DataGridView1.CellClick
- i = e.ColumnIndex
- j = e.RowIndex
- DataGridView1.Item(i, j).Style.BackColor = Color.Black
- DataGridView1.Item(i, j).Tag = 1
- End Sub
- Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
- End
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim i, j As Integer
- Dim neighbors, s As Integer
- If DataGridView1.Item(i, j).Style.BackColor = Color.Black Then
- DataGridView1.Item(i, j).Tag = 1
- Else
- DataGridView1.Item(i, j).Style.BackColor = Color.White
- DataGridView1.Item(i, j).Tag = 0
- End If
- s = DataGridView1.Item(i, j).Tag = 1
- If s Then
- neighbors = s > 1
- Else
- MsgBox("Клетка не может развиваться при заданных условиях!")
- End If
- For i = 1 To 19
- For j = 1 To 19
- If DataGridView1.Item(i, j).Tag = 1 Then
- If neighbors > 3 Then
- DataGridView1.Item(i, j).Tag = 0
- If neighbors < 2 Then
- DataGridView1.Item(i, j).Tag = 0
- If neighbors = 3 Or neighbors = 2 Then
- DataGridView1.Item(i, j).Tag = 1
- End If
- End If
- End If
- End If
- Next j
- Next i
- End Sub
- End Class
Ещё один нюанс: вокруг клетки должно располагаться 8 других, из этих 8 и выбираются соседи. У меня в коде написано, что
Листинг программы
- neighbors = s > 1
Решение задачи: «Игра "Жизнь"»
textual
Листинг программы
- Private Sub tmrMain_Timer()
- Dim iI As Integer
- Dim iJ As Integer
- Dim iH As Integer
- '
- For iI = 1 To 20
- For iJ = 1 To 20
- iY(iI, iJ) = iX(iI, iJ)
- Next iJ
- Next iI
- For iI = 1 To 20
- iY(iI, 0) = iY(iI, 20)
- iY(iI, 21) = iY(iI, 1)
- Next iI
- For iJ = 0 To 21
- iY(0, iJ) = iY(20, iJ)
- iY(21, iJ) = iY(1, iJ)
- Next iJ
- For iI = 1 To 20
- For iJ = 1 To 20
- iH = 9 * iY(iI, iJ)
- iH = iH + iY(iI - 1, iJ - 1) + iY(iI - 1, iJ) + iY(iI - 1, iJ + 1) + iY(iI, iJ - 1)
- iH = iH + iY(iI, iJ + 1) + iY(iI + 1, iJ - 1) + iY(iI + 1, iJ) + iY(iI + 1, iJ + 1)
- iX(iI, iJ) = iL(iH)
- Next iJ
- Next iI
- lG = lG + 1
- lblG.Caption = "Поколение № " & Trim$(Str$(lG))
- picXY.Cls
- picXY.FillStyle = vbFSSolid
- picXY.FillColor = RGB(0, 255, 0)
- For iI = 1 To 20
- For iJ = 1 To 20
- If 1 = iX(iI, iJ) Then
- picXY.Circle ((CSng(iI) - 1) + 0.5, (CSng(iJ) - 1) + 0.5), 0.3, RGB(0, 255, 0)
- End If
- Next iJ
- Next iI
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д