? vb亚博足球娱乐场注册--任意三数字加yabo.com直达官网之用VB实现井字游戏 亚博足球娱乐场注册,亚博娱乐全天彩,亚博官网赢钱不给
VB.net 2010 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网 VB.net 2010 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网 VB.net 2010 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网
SQL Server 2008 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网 c#入门经典亚博足球娱乐场注册--任意三数字加yabo.com直达官网 Visual Basic从门到精通视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网
当前位置:
首页 > 编程开发 > vb >
  • vb亚博足球娱乐场注册--任意三数字加yabo.com直达官网之用VB实现井字游戏

  • 2017-09-21 16:29 来源:未知
'定义棋盘格子数据结构
Private Type Wells
????Wells_X As Long
????Wells_Y As Long
????Wells_Value As Integer
End Type
???
'定义棋盘格子的实例数组
Private usrWells(1 To 9) As Wells
????
'定义响应点击操作的逻辑棋盘格子代号数组
Private intWellsIndex(1 To 3, 1 To 3) As Integer
????
'定义玩家的玩过的盘数和积分
Private lngPlayerTurn As Integer, lngPlayerScore As Long

'定义游戏开始标志
Private blnGameStart As Boolean

'定义玩家胜利和失败标志
Private blnPlayerWin As Boolean, blnPlayerLost As Boolean

'定义枚举常量标识玩家类型
Private Enum Player
????MAN = 0
????COMPUTER = 1
End Enum

'该过程用于显示游戏信息
Private Sub Form_Load()
????Me.Show
????Me.Caption = "BS井字游戏 — (版本 " & App.Major & "." & App.Minor & "." & App.Revision & ")"
End Sub

'该过程用于重新开始开始游戏
Private Sub cmdGameStart_Click()
????blnGameStart = True
????lngPlayerTurn = lngPlayerTurn + 1
????Me.picWells.Cls
????Call subGameInitialize
????Call subScreenRefresh
End Sub

'该过程用于显示游戏规则
Private Sub CmdGameRules_Click()
????Beep
????MsgBox " BS井字游戏:一个最简单的智力游戏,您将与机" & Chr(13) & _
???????????"器在9个格子大小的棋盘上一决高下。由您先开始" & Chr(13) & _
???????????"和机器轮流,每次在任意的空格上下一枚棋子。先" & Chr(13) & _
???????????"在棋盘上横向、纵向或对角线上排成三枚相同棋子" & Chr(13) & _
???????????"的一方即可获得游戏的胜利,祝您好运!!", 0 + 64, "游戏规则"
End Sub

'该过程用于显示游戏开发信息
Private Sub cmdAbout_Click()
????Beep
????MsgBox "BS井字游戏" & "(V-" & App.Major & "." & App.Minor & "版本)" & Chr(13) & Chr(13) & _
???????????"" & Chr(13) & Chr(13) & _
???????????"由PigheadPrince设计制作" & Chr(13) & _
???????????"CopyRight(C)2002,BestSoft.TCG", 0, "关于本游戏"
End Sub

'该过程用于退出游戏
Private Sub cmdExit_Click()
????Beep
????msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS井字游戏")
????If msg = 6 Then End
End Sub

'该过程用于实现玩家向井字棋盘中下棋子
Private Sub picWells_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
????Dim lngGetWells_X As Long, lngGetWells_Y As Long
????Dim blnWellsNotFull As Boolean
????If Not blnGameStart Then Exit Sub
????lngGetWells_X = Int(Y / (Me.picWells.Height / 3)) + 1
????lngGetWells_Y = Int(X / (Me.picWells.Width / 3)) + 1
????If usrWells(intWellsIndex(lngGetWells_X, lngGetWells_Y)).Wells_Value = 0 Then
???????usrWells(intWellsIndex(lngGetWells_X, lngGetWells_Y)).Wells_Value = 1
???????Me.picWells.PaintPicture Me.imgChequer(MAN).Picture, _
????????????????????????????????usrWells(intWellsIndex(lngGetWells_X, lngGetWells_Y)).Wells_X, _
????????????????????????????????usrWells(intWellsIndex(lngGetWells_X, lngGetWells_Y)).Wells_Y, _
????????????????????????????????Me.picWells.Width / 3, Me.picWells.Height / 3
???????If funPlayerWinIF(MAN) Then
??????????Beep
??????????MsgBox "恭喜,您胜利了!", , "BS井字游戏"
??????????lngPlayerScore = lngPlayerScore + 100
??????????Call subScreenRefresh
??????????blnGameStart = False
???????Else
??????????blnPlayerTurn = False
??????????For i = 1 To 9
??????????????If usrWells(i).Wells_Value = 0 Then blnWellsNotFull = True
??????????Next i
??????????If blnWellsNotFull Then
?????????????Call subComputerDoing
??????????Else
?????????????Beep
?????????????MsgBox "和局!", , "BS井字游戏"
?????????????blnGameStart = False
??????????End If
???????End If
????End If
End Sub

'该自定义子过程用于游戏数据初始化
Private Sub subGameInitialize()
????intWellsIndex(1, 1) = 1
????intWellsIndex(1, 2) = 2
????intWellsIndex(1, 3) = 3
????intWellsIndex(2, 1) = 4
????intWellsIndex(2, 2) = 5
????intWellsIndex(2, 3) = 6
????intWellsIndex(3, 1) = 7
????intWellsIndex(3, 2) = 8
????intWellsIndex(3, 3) = 9
????For i = 1 To 7 Step 3
????????usrWells(i).Wells_X = 0
????Next i
????For i = 2 To 8 Step 3
????????usrWells(i).Wells_X = Me.picWells.Width * (1 / 3)
????Next i
????For i = 3 To 9 Step 3
????????usrWells(i).Wells_X = Me.picWells.Width * (2 / 3)
????Next i
????For i = 1 To 3 Step 1
????????usrWells(i).Wells_Y = 0
????Next i
????For i = 4 To 6 Step 1
????????usrWells(i).Wells_Y = Me.picWells.Height * (1 / 3)
????Next i
????For i = 7 To 9 Step 1
????????usrWells(i).Wells_Y = Me.picWells.Height * (2 / 3)
????Next i
????For i = 1 To 9
????????usrWells(i).Wells_Value = 0
????Next i
End Sub

'该自定义子过程用于游戏开始时刷新屏幕
Private Sub subScreenRefresh()
????Me.lblPlayerTurns.Caption = lngPlayerTurn
????Me.lblPlayerScore.Caption = lngPlayerScore
????Me.picWells.Line (0, Me.picWells.Height * (1 / 3))-(Me.picWells.Width, Me.picWells.Height * (1 / 3)), vbBlack
????Me.picWells.Line (0, Me.picWells.Height * (2 / 3))-(Me.picWells.Width, Me.picWells.Height * (2 / 3)), vbBlack
????Me.picWells.Line (Me.picWells.Width * (1 / 3), 0)-(Me.picWells.Width * (1 / 3), Me.picWells.Height), vbBlack
????Me.picWells.Line (Me.picWells.Width * (2 / 3), 0)-(Me.picWells.Width * (2 / 3), Me.picWells.Height), vbBlack
End Sub

'该自定义子过程用于执行机器的下子
Private Sub subComputerDoing()
????Randomize
????Dim lngGetWells_X As Long, lngGetWells_Y As Long
????Dim intPCFirstWells As Integer
????Dim blnPCWellsExists As Boolean
????Dim intPCWells As Integer
????For i = 1 To 9 Step 1
????????If usrWells(i).Wells_Value = -1 Then
???????????blnPCWellsExists = True
????????End If
????Next i
????If Not blnPCWellsExists Then
???????GoTo GetPCFirstWells:
????Else
???????GoTo GetPCNextWells:
????End If
????
GetPCFirstWells: '随机获得机器的第一个落子位置
????intPCFirstWells = Int((9 - 1 + 1) * Rnd + 1)
????If usrWells(intPCFirstWells).Wells_Value <> 0 Then
???????GoTo GetPCFirstWells:
????Else
???????intPCWells = intPCFirstWells
????End If
????GoTo GoOn:
?????
GetPCNextWells:??'获得机器下一步的落子位置
????intPCWells = funGetPCWells
????
GoOn:????????????'绘制落子并判断胜利
????usrWells(intPCWells).Wells_Value = -1
????lngGetWells_X = usrWells(intPCWells).Wells_X
????lngGetWells_Y = usrWells(intPCWells).Wells_Y
???????Me.picWells.PaintPicture Me.imgChequer(COMPUTER).Picture, lngGetWells_X, lngGetWells_Y, _
????????????????????????????????Me.picWells.Width / 3, Me.picWells.Height / 3
???????If funPlayerWinIF(COMPUTER) Then
??????????Beep
??????????MsgBox "抱歉,您失败了!", , "BS井字游戏"
??????????lngPlayerScore = lngPlayerScore - 100
??????????If lngPlayerScore < 0 Then lngPlayerScore = 0
??????????Call subScreenRefresh
??????????blnGameStart = False
???????Else
??????????blnPlayerTurn = True
???????End If
End Sub

'该自定义函数用于判断玩家是否胜利
Private Function funPlayerWinIF(PlayerType As Integer) As Boolean
????Dim intWinCase(1 To 8) As Integer
????intWinCase(1) = usrWells(1).Wells_Value + usrWells(2).Wells_Value + usrWells(3).Wells_Value
????intWinCase(2) = usrWells(4).Wells_Value + usrWells(5).Wells_Value + usrWells(6).Wells_Value
????intWinCase(3) = usrWells(7).Wells_Value + usrWells(8).Wells_Value + usrWells(9).Wells_Value
????intWinCase(4) = usrWells(1).Wells_Value + usrWells(4).Wells_Value + usrWells(7).Wells_Value
????intWinCase(5) = usrWells(2).Wells_Value + usrWells(5).Wells_Value + usrWells(8).Wells_Value
????intWinCase(6) = usrWells(3).Wells_Value + usrWells(6).Wells_Value + usrWells(9).Wells_Value
????intWinCase(7) = usrWells(1).Wells_Value + usrWells(5).Wells_Value + usrWells(9).Wells_Value
????intWinCase(8) = usrWells(3).Wells_Value + usrWells(5).Wells_Value + usrWells(7).Wells_Value
????Select Case PlayerType
???????Case MAN
??????????If intWinCase(1) = 3 Or intWinCase(2) = 3 Or intWinCase(3) = 3 Or intWinCase(4) = 3 Or _
?????????????intWinCase(5) = 3 Or intWinCase(6) = 3 Or intWinCase(7) = 3 Or intWinCase(8) = 3 Then
?????????????blnPlayerWin = True
?????????????blnPlayerLost = False
?????????????funPlayerWinIF = blnPlayerWin
??????????End If
???????Case COMPUTER
??????????If intWinCase(1) = -3 Or intWinCase(2) = -3 Or intWinCase(3) = -3 Or intWinCase(4) = -3 Or _
?????????????intWinCase(5) = -3 Or intWinCase(6) = -3 Or intWinCase(7) = -3 Or intWinCase(8) = -3 Then
?????????????blnPlayerWin = False
?????????????blnPlayerLost = True
?????????????funPlayerWinIF = blnPlayerLost
??????????End If
????End Select
End Function

'该自定义函数用于返回机器的落子
Private Function funGetPCWells() As Integer
????Dim intWells(1 To 8) As Integer, intPCRandomWells As Integer
????intWells(1) = usrWells(1).Wells_Value + usrWells(2).Wells_Value + usrWells(3).Wells_Value
????intWells(2) = usrWells(4).Wells_Value + usrWells(5).Wells_Value + usrWells(6).Wells_Value
????intWells(3) = usrWells(7).Wells_Value + usrWells(8).Wells_Value + usrWells(9).Wells_Value
????intWells(4) = usrWells(1).Wells_Value + usrWells(4).Wells_Value + usrWells(7).Wells_Value
????intWells(5) = usrWells(2).Wells_Value + usrWells(5).Wells_Value + usrWells(8).Wells_Value
????intWells(6) = usrWells(3).Wells_Value + usrWells(6).Wells_Value + usrWells(9).Wells_Value
????intWells(7) = usrWells(1).Wells_Value + usrWells(5).Wells_Value + usrWells(9).Wells_Value
????intWells(8) = usrWells(3).Wells_Value + usrWells(5).Wells_Value + usrWells(7).Wells_Value
????' 如果任何一线已有机器的两个子并且另外一格仍空,机器方即将成一线
????' 机器落子的结果等于该空格
????If intWells(1) = -2 Then
???????For i = 1 To 3 Step 1
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(2) = -2 Then
???????For i = 4 To 6 Step 1
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(3) = -2 Then
???????For i = 7 To 9 Step 1
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(4) = -2 Then
???????For i = 1 To 7 Step 3
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(5) = -2 Then
???????For i = 2 To 8 Step 3
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(6) = -2 Then
???????For i = 3 To 9 Step 3
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(7) = -2 Then
???????For i = 1 To 9 Step 4
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(8) = -2 Then
???????For i = 3 To 7 Step 2
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????End If
????'如果任何一线已有玩家方两个子并且另外一格仍空,防止玩家方作成一线
????'机器落子的结果等于该空格
????If intWells(1) = 2 Then
???????For i = 1 To 3 Step 1
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(2) = 2 Then
???????For i = 4 To 6 Step 1
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(3) = 2 Then
???????For i = 7 To 9 Step 1
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(4) = 2 Then
???????For i = 1 To 7 Step 3
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(5) = 2 Then
???????For i = 2 To 8 Step 3
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(6) = 2 Then
???????For i = 3 To 9 Step 3
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(7) = 2 Then
???????For i = 1 To 9 Step 4
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(8) = 2 Then
???????For i = 3 To 7 Step 2
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????End If
????'如果任何一线已有机器方一个子并且另外两格仍空,作成机器方的两个子
????'机器落子的结果等于该空格
????If intWells(1) = -1 Then
???????For i = 1 To 3 Step 1
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(2) = -1 Then
???????For i = 4 To 6 Step 1
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(3) = -1 Then
???????For i = 7 To 9 Step 1
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(4) = -1 Then
???????For i = 1 To 7 Step 3
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(5) = -1 Then
???????For i = 2 To 8 Step 3
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(6) = -1 Then
???????For i = 3 To 9 Step 3
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(7) = -1 Then
???????For i = 1 To 9 Step 4
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????ElseIf intWells(8) = -1 Then
???????For i = 3 To 7 Step 2
???????????If usrWells(i).Wells_Value = 0 Then
??????????????funGetPCWells = i
??????????????Exit Function
???????????End If
???????Next i
????End If
????'面临和局,随机在空白的格子内落子
GetRandomWells:
????Randomize
????intPCRandomWells = Int((9 - 1 + 1) * Rnd + 1)
????If usrWells(intPCRandomWells).Wells_Value = 0 Then
???????funGetPCWells = intPCRandomWells
????Else
???????GoTo GetRandomWells:
????End If
End Function
相关亚博足球娱乐场注册--任意三数字加yabo.com直达官网