.细胞存活. 求大大指正.该怎么处理
.细胞存活. 求大大指正.
3 行 一行3 个 shape shape(1 to 9)
两个 com
红的为活 绿的为死.
nextday 需要三个数来确定变不变.
当前是死是活. 附近几个活 几个死
现在的 function up dn lt rt 返回后能把后两个得出来了.
怎么改改能一下这三个值都出来呢 -.-
change 过程能不能再简单些?
能不能在前面就定好 shape(i).fillcolor = vbred 就等于 true , vbgreen 就等于 flase
折腾一天算是写出来了... 可怎么看怎么不满意... 来求教...
------解决方案--------------------
简单的来了,验证无误
3 行 一行3 个 shape shape(1 to 9)
两个 com
红的为活 绿的为死.
- VB code
' ' 假设在培养皿里有3X3排列的9个细胞 ,开始的时候细胞的状态是随机给定的 ' 每过一天细胞状态变化一次。 ' (假设所有细胞在同一时间变化,细胞状态受变化前的环境影响。) ' '设定: ' 1.一个活细胞,当它周围的活细胞少于2个时,细胞因为缺少能量传递而在下一天死去。 ' 2.一个活细胞当它周围的活细胞大于等于3个时,细胞因为没有足够的空间而在下一天死去。 ' 3.一个死细胞,如果它周围的死细胞大于等于3个时,细胞在下一天复活。 ' R. 0 0 . 1 0 . 2 1 . 3 0 . 4 0 ..... G. 3 1 . 4 1 . ' 要求:设计一个程序,计算出每个细胞在下一天的存活状态。 ' Option Explicit Option Base 1 Dim SC(1 To 9) As Boolean Dim i As Integer, j As Integer, k As Integer Dim Upi As Integer, Dni As Integer, Lti As Integer, Rti As Integer Dim CC Private Sub cmdClose_Click() Unload Me End Sub Private Sub cmdNext_Click() Dim moke(1 To 9) As String Dim m As String For i = 1 To 9 SC(i) = IIf(S(i).FillColor = vbRed, True, False) If i > 3 Then j = j + Abs(up(i)) k = k + 1 - Abs(up(i)) End If If i Mod 3 <> 1 Then j = j + Abs(lt(i)) k = k + 1 - Abs(lt(i)) End If If i Mod 3 <> 0 Then j = j + Abs(rt(i)) k = k + 1 - Abs(rt(i)) End If If i < 7 Then j = j + Abs(dn(i)) k = k + 1 - Abs(dn(i)) End If m = IIf(SC(i), "1", "0") moke(i) = m & "," & j & "," & k moke(j) = i & m & "," & j & "," & k Debug.Print moke(j) j = 0 k = 0 Next i For i = 1 To 9 CC = Split(moke(i), ",") Select Case CC(0) Case 1 If CC(1) = "0" Or "1" Or "3" Or "4" Then change Case 0 If CC(2) = "3" Or "4" Then change End Select Next i End Sub Function up(Upi As Integer) As Boolean ' -3 If S(Upi - 3).FillColor = vbRed Then up = True End Function Function dn(Dni As Integer) As Boolean ' +3 If S(Dni + 3).FillColor = vbRed Then dn = True End Function Function lt(Lti As Integer) As Boolean ' -1 If S(Lti - 1).FillColor = vbRed Then lt = True End Function Function rt(Rti As Integer) As Boolean ' +1 If S(Rti + 1).FillColor = vbRed Then rt = True End Function Sub change() If S(i).FillColor = vbRed Then S(i).FillColor = vbGreen ElseIf S(i).FillColor = vbGreen Then S(i).FillColor = vbRed End If End Sub Private Sub Form_Load() Randomize Dim i As Long For i = 1 To 9 S(i).FillColor = IIf(Rnd * 100 Mod 2 = 0, vbRed, vbGreen) Next For i = 1 To 9 SC(i) = IIf(S(i).FillColor = vbRed, True, False) ' Debug.Print SC(i) Next i End Sub
nextday 需要三个数来确定变不变.
当前是死是活. 附近几个活 几个死
现在的 function up dn lt rt 返回后能把后两个得出来了.
怎么改改能一下这三个值都出来呢 -.-
change 过程能不能再简单些?
能不能在前面就定好 shape(i).fillcolor = vbred 就等于 true , vbgreen 就等于 flase
折腾一天算是写出来了... 可怎么看怎么不满意... 来求教...
------解决方案--------------------
简单的来了,验证无误
- VB code
Private Sub Command1_Click() On Error Resume Next Dim b(1 To 9) As Integer Dim n(1 To 9) As Integer For i = 1 To 9 If Shape1(i).BackColor = vbRed Then b(i) = 1 Else b(i) = 0 Next i For i = 1 To 9 n(i) = 0 n(i) = n(i) + b(i - 3) If i Mod 3 <> 1 Then n(i) = n(i) + b(i - 1) If i Mod 3 <> 0 Then n(i) = n(i) + b(i + 1) n(i) = n(i) + b(i + 3) '上面算法每只细胞只算四个方向,如果要算8个方向,把下面代码取消注释 'If i Mod 3 <> 0 Then n(i) = n(i) + b(i + 4) 'If i Mod 3 <> 1 Then n(i) = n(i) + b(i + 2) 'If i Mod 3 <> 1 Then n(i) = n(i) + b(i - 4) 'If i Mod 3 <> 0 Then n(i) = n(i) + b(i - 2) Next i For i = 1 To 9 If b(i) = 1 Then If n(i) >= 3 Or n(i) < 2 Then b(i) = 0: Shape1(i).BackColor = vbGreen Else If n(i) >= 3 Then b(i) = 1: Shape1(i).BackColor = vbRed End If Next i End Sub Private Sub Form_Load() Randomize Dim i As Long For i = 1 To 9 Shape1(i).BackColor = IIf(Rnd * 100 Mod 2 = 0, vbRed, vbGreen) Next End Sub