欠了一个星期的小游戏。。我得补一补。以下效果图:
特别简单,其实学一段就能做的小东西,愣是给我拖了不知道多久orz
新手初学,错误和不好的习惯请一定要纠正我。Thanks♪(・ω・)ノ
以下实现方法:
1、建一个控件数组(九个命令按钮),四根棍棍模拟一个棋盘
2、从ps随便搞了两图,一白一黑,拿来载入命令按钮。以下初步设计时的不完善代码:
Option Explicit
Dim k, i, j, b(8)
Private Sub Command1_Click(Index As Integer)
k = k + 1
If k Mod 2 <> 0 Then
Command1(Index).Picture = LoadPicture("D:\Pictures\工程用图\黑子.jpg")
b(Index) = 9
Else
Command1(Index).Picture = LoadPicture("D:\Pictures\工程用图\白子.jpg")
b(Index) = 10
End If
For i = 3 To 5 '判断三列子中是否有一列满足三子同色
If b(i) = b(i - 3) And b(i) = b(i + 3) Then
Call judge(b(i)) '调用判断获胜方的过程
End If
Next i
For i = 1 To 7 Step 3 '判断三排子中是否存在某一排满足三子同色
If b(i) = b(i - 1) And b(i) = b(i + 1) Then
Call judge(b(i))
End If
Next i
If b(0) = b(4) And b(8) = b(4) Then '判断两斜线三子
Call judge(b(4))
ElseIf b(4) = b(2) And b(4) = b(6) Then
Call judge(b(4))
End If
End Sub
Private Sub Form_Load()
For i = 0 To 8
b(i) = i
Next i
End Sub
Sub judge(a) '判断获胜方
If a = 9 Then
MsgBox "游戏结束,黑子获胜"
End
ElseIf a = 10 Then
MsgBox "游戏结束,白子获胜"
End
End If
End Sub
感谢@shigeruoji同学(这什么鬼名字···) 提醒,忘记设置平局的情况了,加入计数君小哦,记录click事件的次数,满9次以后就判断平局。这里之所以能实现是因为程序的运行是从上到下的。把判断平局放在判断黑白一方获胜之后就可以了。新加入的代码:
dim o
o = o + 1 '计数君o,判断平局使用
If o = 9 Then '判断平局
MsgBox "游戏结束,你俩平局"
End
End If
效果:啊哈哈哈为什么落子更慢了呢。。控制平局还真不容易啊
更改以后的总代码:
Option Explicit
Dim k, i, j, b(8), o
Private Sub Command1_Click(Index As Integer)
k = k + 1
If k Mod 2 <> 0 Then
Command1(Index).Picture = LoadPicture(App.Path + "\黑子.jpg")'增加了app.path(相对路径)的使用
b(Index) = 9
Else
Command1(Index).Picture = LoadPicture(App.Path + "\黑子.jpg")
b(Index) = 10
End If
For i = 3 To 5 '判断三列子中是否有一列满足三子同色
If b(i) = b(i - 3) And b(i) = b(i + 3) Then
Call judge(b(i)) '调用判断获胜方的过程
End If
Next i
For i = 1 To 7 Step 3 '判断三排子中是否存在某一排满足三子同色
If b(i) = b(i - 1) And b(i) = b(i + 1) Then
Call judge(b(i))
End If
Next i
If b(0) = b(4) And b(8) = b(4) Then '判断两斜线三子
Call judge(b(4))
ElseIf b(4) = b(2) And b(4) = b(6) Then
Call judge(b(4))
End If
o = o + 1 '计数君o,判断平局使用
If o = 9 Then '判断平局
MsgBox "游戏结束,你俩平局"
End
End If
End Sub
Private Sub Form_Load()
o = 0
For i = 0 To 8
b(i) = i
Next i
End Sub
Sub judge(a) '判断非平局情况下的获胜方
Dim o As Boolean
If a = 9 Then
MsgBox "游戏结束,黑子获胜"
End
ElseIf a = 10 Then
MsgBox "游戏结束,白子获胜"
End
End If
End Sub
其实这个游戏还是很不完善,能正确运行的前提是双方都遵守下棋的时候只下在没有下过的地方。 当一方单击已经落子的地方,就会影响程序正常运行。解决这个的初步设想是用command的visible属性,单击以后按钮不可见,然后显示按钮下方装有黑/白子的图片框。也就是用图片框显示落子效果。但是这样工程量略大,我这么懒的人有时间再说吧啊哈哈哈哈。
你们有什么更好的方法解决上述问题吗?
真正做起东西来才发现学的东西都忘光光QWQ
做完发现其实用到的东西就那些。。。简单的一批。咸鱼.jpg
怪不得老师上课要直接教制作,比按部就班讲各种控件函数有趣多了