并且回复者还可得10分。程序实现目标:如何知道下棋者已连成五子棋盘中Chess是棋盘,一个数组Type型变量,最大下维Chess(16,16)。
Cer代表落棋者:1白方 2黑方,在棋盘中也这样表示,若棋盘Chess的某个变量为0(比如Chess(1,1).Value=0)表示该棋盘的位置还没有棋子。Rem 判断棋盘a,b位置的棋子的横、竖、交叉四方向的其中一个方向是否有连成五子,由于棋盘采用的是全盘搜索,因而只向正方向搜索。也就是说,假如搜索棋盘a位置,只搜索a、a+1、a+2,而不搜索a-1、a-2位置的棋子。
Public Function FiveLine(ByVal a As Integer, ByVal b As Integer, Cer As Byte, ByVal Cn As Byte) As Boolean
Dim i As Byte, j As Byte, k As Byte
Cn = Cn - 1 ''连同起使格算起的格数刚好为Cn,故此Cn要减1
FiveLine = Flase k = Chess(a, b).Chess ''记录a,b位置的棋子 If k <> Cer Then Exit Function ''当前棋盘的位置非Cer方的,不再运算 Rem 检查横方向 If a + Cn > 16 Then GoTo HengOK ''超出棋盘 For i = a To a + Cn If Chess(i, b).Chess <> k Then k = 100: i = a + Cn Next i If k <> 100 Then FiveLine = True: Exit Function ''横向5个棋子完全一样,返回TrueHengOK:
Rem 检查竖方向 If b + Cn > 16 Then GoTo ShuOK ''超出棋盘 k = Chess(a, b).Chess For i = b To b + Cn If Chess(a, i).Chess <> k Then k = 100: i = b + Cn ''竖向5个棋子完全一样,返回True Next i If k <> 100 Then FiveLine = True: Exit Function ''竖向5个棋子完全一样,返回TrueShuOK: Rem 检查斜1方向 If a + Cn > 16 Or b + Cn > 16 Then GoTo Xie1OK ''超出棋盘 k = Chess(a, b).Chess
For i = 0 To Cn If Chess(a + i, b + i).Chess <> k Then k = 100 Next i If k <> 100 Then FiveLine = True: Exit Function ''斜1方向5个棋子完全一样,返回TrueXie1OK: Rem 检查斜2方向
If a - Cn < 0 Or b + Cn > 16 Then GoTo Xie2OK ''超出棋盘 k = Chess(a, b).Chess For i = 0 To Cn If Chess(a - i, b + i).Chess <> k Then k = 100 Next i If k <> 100 Then FiveLine = True: Exit Function ''斜1方向5个棋子完全一样,返回TrueXie2OK: Rem 检查斜3方向
If a + Cn > 16 Or b - Cn < 0 Then GoTo Xie3OK k = Chess(a, b).Chess For i = 0 To Cn If Chess(a + i, b - i).Chess <> k Then k = 100 Next i If k <> 100 Then FiveLine = True: Exit Function ''斜1方向5个棋子完全一样,返回TrueXie3OK:End Function
Cer代表落棋者:1白方 2黑方,在棋盘中也这样表示,若棋盘Chess的某个变量为0(比如Chess(1,1).Value=0)表示该棋盘的位置还没有棋子。Rem 判断棋盘a,b位置的棋子的横、竖、交叉四方向的其中一个方向是否有连成五子,由于棋盘采用的是全盘搜索,因而只向正方向搜索。也就是说,假如搜索棋盘a位置,只搜索a、a+1、a+2,而不搜索a-1、a-2位置的棋子。
Public Function FiveLine(ByVal a As Integer, ByVal b As Integer, Cer As Byte, ByVal Cn As Byte) As Boolean
Dim i As Byte, j As Byte, k As Byte
Cn = Cn - 1 ''连同起使格算起的格数刚好为Cn,故此Cn要减1
FiveLine = Flase k = Chess(a, b).Chess ''记录a,b位置的棋子 If k <> Cer Then Exit Function ''当前棋盘的位置非Cer方的,不再运算 Rem 检查横方向 If a + Cn > 16 Then GoTo HengOK ''超出棋盘 For i = a To a + Cn If Chess(i, b).Chess <> k Then k = 100: i = a + Cn Next i If k <> 100 Then FiveLine = True: Exit Function ''横向5个棋子完全一样,返回TrueHengOK:
Rem 检查竖方向 If b + Cn > 16 Then GoTo ShuOK ''超出棋盘 k = Chess(a, b).Chess For i = b To b + Cn If Chess(a, i).Chess <> k Then k = 100: i = b + Cn ''竖向5个棋子完全一样,返回True Next i If k <> 100 Then FiveLine = True: Exit Function ''竖向5个棋子完全一样,返回TrueShuOK: Rem 检查斜1方向 If a + Cn > 16 Or b + Cn > 16 Then GoTo Xie1OK ''超出棋盘 k = Chess(a, b).Chess
For i = 0 To Cn If Chess(a + i, b + i).Chess <> k Then k = 100 Next i If k <> 100 Then FiveLine = True: Exit Function ''斜1方向5个棋子完全一样,返回TrueXie1OK: Rem 检查斜2方向
If a - Cn < 0 Or b + Cn > 16 Then GoTo Xie2OK ''超出棋盘 k = Chess(a, b).Chess For i = 0 To Cn If Chess(a - i, b + i).Chess <> k Then k = 100 Next i If k <> 100 Then FiveLine = True: Exit Function ''斜1方向5个棋子完全一样,返回TrueXie2OK: Rem 检查斜3方向
If a + Cn > 16 Or b - Cn < 0 Then GoTo Xie3OK k = Chess(a, b).Chess For i = 0 To Cn If Chess(a + i, b - i).Chess <> k Then k = 100 Next i If k <> 100 Then FiveLine = True: Exit Function ''斜1方向5个棋子完全一样,返回TrueXie3OK:End Function
解决方案 »
- 请问在VB6里面如何快速注释多行代码啊?
- 改变text1数据问题
- VB中check怎么使用
- 如何使用MSCOMM接收不定长的数据包,例所要接收的数据包为:AA 00 01 02 00 01 0A
- sql 日期的语法错误 大家帮我啊 在这里先谢过了!!
- 判断按钮是否被点击过,应该怎么去写代码啊?
- VB+ACCESS2000的SQL语句!
- 如何遍历一个form里所有的PictureBox
- 在word中如何利用vba自动填表格?
- 为什么我在IE的地址栏中一键入www. 就出现了“本程序执行了非法操作”这句话?然后就退出了IE. 怎么解决?重装IE也不好用啊!
- 请问怎样用VB实现(调用)Word中查找功能
- 提供【API浏览器】的万能码,再次感谢大家的使用!
Cn参数连成几子比哪Cn为2,则如果已连成2子则返回True。Cn为n则Cer方必需连成n个棋子函数才返回True。