作者yauhh (姚呵呵)
看板Visual_Basic
标题Re: [VB6 ] 井字游戏的胜负判定
时间Sat May 17 02:15:19 2008
※ 引述《xtimer ()》之铭言:
: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
: x = x + 1
: Button1.Enabled = False
: If x Mod 2 = 1 Then
: Button1.Text = "O"
: Else
: Button1.Text = "X"
: End If
: End Sub
: 分别为Button1~9
: 可是要怎麽判别
: 147 258 369 123 456 789 159 357的text相同
因为已经有Button1~Button9,我想可以宣告阵列
Dim a(8) as Button
a(0) = Button1
a(1) = Button2
...
a(8) = Button9
每个ButtonX的Click动作,设定 o x 之後要做同样的判断动作,
要写个函式让9个ButtonX_Click都呼叫它,其中是
针对阵列 a 处理三纵行,三横列,与交叉线
For i = 0 to 8
If a(i) \ 3 = 0 Then '第一列
...
ElseIf a(i) Mod 3 = 0 Then '第一行
...
ElseIf
...
End If
Next
不过这样写也蛮多的.
後来,觉得也许可以改成这样,直接宣告八个阵列纪录八条判断线
Dim a(2) as Button '第一列
a(0) = Button1
a(1) = Button2
a(3) = Button3
Dim b(2) as Button '第二列
b(0) = Button4
b(1) = Button5
b(3) = Button6
...
Dim h(2) as Button '右上-左下斜线
h(0) = Button3
h(1) = Button5
h(2) = Button7
然後用一个函式,要接受以上八个阵列其中一种,能够判断答案
Function judge(ByVal a()) As Boolean
Dim result As Boolean
refult = (a(0).Text = a(1).Text And a(1).Text = a(2).Text)
Return result
End Function
在Button{1..9}_Click设定 ox 之後要写
If judge(a) = True Then
Console.WriteLine("获胜方: " & a(0).Text)
'judge(a)判断有没有赢,a(0)就会纪录其符号
'这部份看你要怎麽显示答案,自己修改为自己的情况
ElseIf judge(b) = True Then
...
End If
这八个判断嫌太长,也可以将阵列 a 到 h 收在一个阵列中,就可以用回圈处理.
Dim t(7) As Button()
t(0) = a
t(1) = b
...
t(7) = h
For i = 0 To 7
If judge(t(i)) = True Then
Label10.Text = "获胜方" & t(i)(0).Text & ",游戏结束"
End If
Next
判断与结束游戏部份,是九个按钮共用的动作,可以抽出来写成一个函式.
想睡时,没办法直接想出最有效率的程式或程式写法,真抱歉.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.160.211.45
※ 编辑: yauhh 来自: 218.160.211.45 (05/17 02:26)
1F:推 xtimer:阿哩...看了两个小时....还是看不懂= = 05/17 06:43
2F:→ xtimer:好复杂~@@ 05/17 06:43
3F:→ yauhh:哦? 我以为把一个按钮物件指定给按钮变数的思路很简单... 05/17 11:06
4F:→ yauhh:或许我该再检讨一下解说方式 05/17 11:07