vb小游戏——井字棋

欠了一个星期的小游戏。。我得补一补。以下效果图:

特别简单,其实学一段就能做的小东西,愣是给我拖了不知道多久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

效果:啊哈哈哈为什么落子更慢了呢。。控制平局还真不容易啊

扫描二维码关注公众号,回复: 9114264 查看本文章

更改以后的总代码:

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

怪不得老师上课要直接教制作,比按部就班讲各种控件函数有趣多了

发布了24 篇原创文章 · 获赞 10 · 访问量 5006

猜你喜欢

转载自blog.csdn.net/weixin_44559752/article/details/88368085