⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vbwuziqi.txt

📁 ① 能实现五子棋下棋的智能算法; ② 能按照五子棋的行走规则进行游戏
💻 TXT
📖 第 1 页 / 共 2 页
字号:
Option Explicit
Dim comable   As Boolean
Dim comturn   As Boolean
Dim blackturn   As Boolean
Dim whiteturn   As Boolean
Dim comcolor   As Long
Dim black   As Long
Dim white   As Long
Dim i   As Single
Dim j   As Single
Dim table(-5 To 20, -5 To 20)        As Integer '用此二维数组表示棋盘’

Private Sub restart()
Form_Paint
For i = 0 To 15
  For j = 0 To 15
  table(i, j) = 0
  Next j
Next i
black = RGB(0, 0, 0)
white = RGB(255, 255, 255)
If comturn = True Then Call goes(7, 7)
End Sub

Private Sub goes(i As Single, j As Single)         '电脑将子走到table(i,j)’
If comturn = True And table(i, j) = 0 Then
FillColor = comcolor
FillStyle = 0
Dim x   As Single
Dim y   As Single
x = i * 300 + 100
y = j * 300 + 100
Circle (x, y), 100
comturn = False
table(i, j) = 2
End If
End Sub

Private Sub about_Click()
frmAbout.Show
End Sub

Private Sub doubleman_Click()  '双人’
blackturn = True
whiteturn = False
comable = False
comturn = False
restart
End Sub

Private Sub 退出_Click()
Dim i As Integer
 i = MsgBox("你想退出游戏吗?", vbOKCancel + vbExclamation, "提示")
 If i = vbOK Then
  Unload Me
 End If
End Sub

Private Sub Form_Load()
Form_Paint
comturn = True
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)               '人走’
Dim a   As Single
Dim b   As Single
Dim m   As Single
Dim n   As Single
If (x - 100) Mod 300 < 150 Then
      a = x - (x - 100) Mod 300
      ElseIf (x - 100) Mod 300 > 150 Then
      a = x + 300 - (x - 100) Mod 300
End If
If (y - 100) Mod 300 < 150 Then
      b = y - (y - 100) Mod 300
      ElseIf (y - 100) Mod 300 > 150 Then
      b = y + 300 - (y - 100) Mod 300
End If

i = (a - 100) / 300
j = (b - 100) / 300
If (comturn = False) And (table(i, j) = 0) Then
If blackturn = True Then
  FillColor = black
  Else
FillColor = white
End If
FillStyle = 0
Circle (a, b), 100
table(i, j) = 1

If comable = False Then
blackturn = blackturn Xor True
End If   '双人

If comable = True Then
comturn = True
judgeman
comdo
judgecom
End If   '人机对战

End If
End Sub
Private Sub judgeman()  '判断人是否获胜’
  Dim i   As Single
  Dim j   As Single
  For i = 0 To 15
    For j = 0 To 15
    If table(i, j) * table(i, j + 1) * table(i, j + 2) * table(i, j + 3) * table(i, j + 4) = 1 Then
            MsgBox "你赢了,真棒!"
    ElseIf table(i, j) * table(i + 1, j) * table(i + 2, j) * table(i + 3, j) * table(i + 4, j) = 1 Then
            MsgBox "你赢了,真棒!"
    ElseIf table(i, j) * table(i + 1, j + 1) * table(i + 2, j + 2) * table(i + 3, j + 3) * table(i + 4, j + 4) = 1 Then
            MsgBox "你赢了,真棒!"
    ElseIf table(i, j) * table(i - 1, j + 1) * table(i - 2, j + 2) * table(i - 3, j + 3) * table(i - 4, j + 4) = 1 Then
            MsgBox "你赢了,真棒!"
    End If
  Next j
  Next i
End Sub
Private Sub judgecom()  '判断电脑是否获胜’
Dim i   As Single
Dim j   As Single
For i = 0 To 15
For j = 0 To 15
If table(i, j) * table(i, j + 1) * table(i, j + 2) * table(i, j + 3) * table(i, j + 4) = 32 Then
            MsgBox "你输了,继续努力哦!"
    ElseIf table(i, j) * table(i + 1, j) * table(i + 2, j) * table(i + 3, j) * table(i + 4, j) = 32 Then
            MsgBox "你输了,继续努力哦!"
    ElseIf table(i, j) * table(i + 1, j + 1) * table(i + 2, j + 2) * table(i + 3, j + 3) * table(i + 4, j + 4) = 32 Then
            MsgBox "你输了,继续努力哦!"
    ElseIf table(i, j) * table(i - 1, j + 1) * table(i - 2, j + 2) * table(i - 3, j + 3) * table(i - 4, j + 4) = 32 Then
            MsgBox "你输了,继续努力哦!"
End If
Next j
Next i
End Sub

Private Function wantfive(i, j, k) As Boolean        '定式1’
If table(i, j) = 0 And (table(i - 4, j) * table(i - 3, j) * table(i - 2, j) * table(i - 1, j) = k * k * k * k _
                                            Or table(i - 4, j - 4) * table(i - 3, j - 3) * table(i - 2, j - 2) * table(i - 1, j - 1) = k * k * k * k _
                                            Or table(i, j - 4) * table(i, j - 3) * table(i, j - 2) * table(i, j - 1) = k * k * k * k _
                                            Or table(i + 1, j - 1) * table(i + 2, j - 2) * table(i + 3, j - 3) * table(i + 4, j - 4) = k * k * k * k _
                                            Or table(i + 1, j) * table(i + 2, j) * table(i + 3, j) * table(i + 4, j) = k * k * k * k _
                                            Or table(i + 1, j + 1) * table(i + 2, j + 2) * table(i + 3, j + 3) * table(i + 4, j + 4) = k * k * k * k _
                                            Or table(i, j + 1) * table(i, j + 2) * table(i, j + 3) * table(i, j + 4) = k * k * k * k _
                                            Or table(i - 1, j + 1) * table(i - 2, j + 2) * table(i - 3, j + 3) * table(i - 4, j + 4) = k * k * k * k _
                                            Or table(i - 3, i) * table(i - 2, j) * table(i - 1, j) * table(i + 1, j) = k * k * k * k _
                                            Or table(i - 3, j - 3) * table(i - 2, j - 2) * table(i - 1, j - 1) * table(i + 1, j + 1) = k * k * k * k _
                                            Or table(i, j - 3) * table(i, j - 2) * table(i, j - 1) * table(i, j + 1) = k * k * k * k _
                                            Or table(i + 1, j - 1) * table(i + 2, j - 2) * table(i + 3, j - 3) * table(i - 1, j + 1) = k * k * k * k _
                                            Or table(i + 1, j) * table(i + 2, j) * table(i + 3, j) * table(i - 1, j) = k * k * k * k _
                                            Or table(i + 1, j + 1) * table(i + 2, j + 2) * table(i + 3, j + 3) * table(i - 1, j - 1) = k * k * k * k _
                                            Or table(i, j + 1) * table(i, j + 2) * table(i, j + 3) * table(i, j - 1) = k * k * k * k _
                                            Or table(i - 1, j + 1) * table(i - 2, j + 2) * table(i - 3, j + 3) * table(i + 1, j - 1) = k * k * k * k _
                                            Or table(i - 2, j) * table(i - 1, j) * table(i + 1, j) * table(i + 2, j) = k * k * k * k _
                                            Or table(i - 1, j - 1) * table(i - 2, j - 2) * table(i + 1, j + 1) * table(i - 2, j - 2) = k * k * k * k _
                                            Or table(i, j - 2) * table(i, j - 1) * table(i, j + 1) * table(i, j + 2) = k * k * k * k _
                                            Or table(i + 1, j - 1) * table(i + 2, j - 2) * table(i - 1, j + 1) * table(i - 2, j + 2) = k * k * k * k _
                                        ) Then wantfive = True
                                        
End Function
Private Function wantfour(i, j, k) As Boolean      '定式2’
If table(i, j) = 0 And ((table(i - 3, j) = 0 And table(i + 2, j) = 0 And table(i - 2, j) * table(i - 1, j) * table(i + 1, j) = k * k * k) _
                                          Or (table(i - 3, j - 3) = 0 And table(i + 2, j + 2) = 0 And table(i - 2, j - 2) * table(i - 1, j - 1) * table(i + 1, j + 1) = k * k * k) _
                                          Or (table(i, j - 3) = 0 And table(i, j + 2) = 0 And table(i, j - 2) * table(i, j - 1) * table(i, j + 1) = k * k * k) _
                                          Or (table(i + 3, j - 3) = 0 And table(i - 2, j + 2) = 0 And table(i + 2, j - 2) * table(i + 1, j - 1) * table(i - 1, j + 1) = k * k * k) _
                                          Or (table(i + 3, j) = 0 And table(i - 2, j) = 0 And table(i + 2, j) * table(i + 1, j) * table(i - 1, j) = k * k * k) _
                                          Or (table(i + 3, j + 3) = 0 And table(i - 2, j - 2) = 0 And table(i + 2, j + 2) * table(i + 1, j + 1) * table(i - 1, j - 1) = k * k * k) _
                                          Or (table(i, j + 3) = 0 And table(i, j - 2) = 0 And table(i, j + 1) * table(i, j + 2) * table(i, j - 1) = k * k * k) _
                                          Or (table(i - 3, j + 3) = 0 And table(i + 2, j - 2) = 0 And table(i - 2, j + 2) * table(i - 1, j + 1) * table(i + 1, j - 1) = k * k * k) _
                                        ) Then wantfour = True
                                                                                      
  End Function
  Private Function wantfour1(i, j, k) As Boolean      '定式3’
  Dim a(0 To 7)     As Single
  Dim n   As Single
  a(0) = table(i - 3, j) * table(i - 2, j) * table(i - 1, j)
  a(1) = table(i - 3, j - 3) * table(i - 2, j - 2) * table(i - 1, j - 1)
  a(2) = table(i, j - 3) * table(i, j - 2) * table(i, j - 1)
  a(3) = table(i + 3, j - 3) * table(i + 2, j - 2) * table(i + 1, j - 1)
  a(4) = table(i + 3, j) * table(i + 2, j) * table(i + 1, j)
  a(5) = table(i + 1, j + 1) * table(i + 2, j + 2) * table(i + 3, j + 3)
  a(6) = table(i, j + 1) * table(i, j + 2) * table(i, j + 3)
  a(7) = table(i - 1, j + 1) * table(i - 2, j + 2) * table(i - 3, j + 3)
  Dim b(0 To 7)     As Single
  b(0) = table(i + 1, j)
  b(1) = table(i + 1, j + 1)
  b(2) = table(i, j + 1)
  b(3) = table(i - 1, j + 1)
  b(4) = table(i - 1, j)
  b(5) = table(i - 1, j - 1)
  b(6) = table(i, j - 1)
  b(7) = table(i + 1, j - 1)
  For n = 0 To 7
  If table(i, j) = 0 And b(n) = 0 And a(n) = k * k * k Then
    wantfour1 = True
  End If
  Next n
    
  End Function
Private Function want231(i, j, k) As Boolean      '定式4’
Dim a(0 To 7)     As Single
  a(0) = table(i - 2, j) * table(i - 1, j)
  a(1) = table(i - 2, j - 2) * table(i - 1, j - 1)
  a(2) = table(i, j - 2) * table(i, j - 1)
  a(3) = table(i + 2, j - 2) * table(i + 1, j - 1)
  a(4) = table(i + 1, j) * table(i + 2, j)
  a(5) = table(i + 1, j + 1) * table(i + 2, j + 2)
  a(6) = table(i, j + 1) * table(i, j + 2)
  a(7) = table(i - 1, j + 1) * table(i - 2, j + 2)

    If table(i, j) = 0 And ((table(i - 3, j) <> 3 - k And table(i - 3, j - 3) <> 3 - k And a(0) * a(1) = k * k * k * k) _
                                          Or (table(i - 3, j) <> 3 - k And table(i, j - 3) <> 3 - k And a(0) * a(2) = k * k * k * k) _
                                          Or (table(i - 3, j) <> 3 - k And table(i + 3, j - 3) <> 3 - k And a(0) * a(3) = k * k * k * k) _
                                          Or (table(i - 3, j) <> 3 - k And table(i + 3, j + 3) <> 3 - k And a(0) * a(5) = k * k * k * k) _
                                          Or (table(i - 3, j) <> 3 - k And table(i, j + 3) <> 3 - k And a(0) * a(6) = k * k * k * k) _
                                          Or (table(i - 3, j) <> 3 - k And table(i - 3, j + 3) <> 3 - k And a(0) * a(7) = k * k * k * k) _
                                          Or (table(i - 3, j - 3) <> 3 - k And table(i, j - 3) <> 3 - k And a(1) * a(2) = k * k * k * k) _
                                          Or (table(i - 3, j - 3) <> 3 - k And table(i + 3, j - 3) <> 3 - k And a(1) * a(3) = k * k * k * k) _
                                          Or (table(i - 3, j - 3) <> 3 - k And table(i + 3, j) <> 3 - k And a(1) * a(4) = k * k * k * k) _
                                          Or (table(i - 3, j - 3) <> 3 - k And table(i, j + 3) <> 3 - k And a(1) * a(6) = k * k * k * k) _
                                          Or (table(i - 3, j - 3) <> 3 - k And table(i - 3, j + 3) <> 3 - k And a(1) * a(7) = k * k * k * k) _
                                          Or (table(i, j - 3) <> 3 - k And table(i + 3, j - 3) <> 3 - k And a(2) * a(3) = k * k * k * k) _
                                          Or (table(i, j - 3) <> 3 - k And table(i + 3, j) <> 3 - k And a(2) * a(4) = k * k * k * k) _
                                          Or (table(i, j - 3) <> 3 - k And table(i + 3, j + 3) <> 3 - k And a(2) * a(5) = k * k * k * k) _
                                          Or (table(i, j - 3) <> 3 - k And table(i - 3, j + 3) <> 3 - k And a(2) * a(7) = k * k * k * k) _
                                          Or (table(i + 3, j - 3) <> 3 - k And table(i + 3, j) <> 3 - k And a(3) * a(4) = k * k * k * k) _
                                          Or (table(i + 3, j - 3) <> 3 - k And table(i + 3, j + 3) <> 3 - k And a(3) * a(5) = k * k * k * k) _
                                          Or (table(i + 3, j - 3) <> 3 - k And table(i, j + 3) <> 3 - k And a(3) * a(6) = k * k * k * k) _
                                          Or (table(i + 3, j) <> 3 - k And table(i + 3, j + 3) <> 3 - k And a(4) * a(5) = k * k * k * k) _
                                          Or (table(i + 3, j) <> 3 - k And table(i, j + 3) <> 3 - k And a(4) * a(6) = k * k * k * k) _
                                          Or (table(i + 3, j) <> 3 - k And table(i - 3, j + 3) <> 3 - k And a(4) * a(7) = k * k * k * k) _
                                          Or (table(i + 3, j + 3) <> 3 - k And table(i, j + 3) <> 3 - k And a(5) * a(6) = k * k * k * k) _
                                          Or (table(i + 3, j + 3) <> 3 - k And table(i - 3, j + 3) <> 3 - k And a(5) * a(7) = k * k * k * k) _
                                          Or (table(i, j + 3) <> 3 - k And table(i - 3, j + 3) <> 3 - k And a(6) * a(7) = k * k * k * k) _
                                          ) Then want231 = True
  End Function
  Private Function want232(i, j, k) As Boolean      '定式5’
  Dim b(0 To 3)     As Single
  b(0) = table(i - 1, j) * table(i + 1, j)
  b(1) = table(i - 1, j - 1) * table(i + 1, j + 1)
  b(2) = table(i, j - 1) * table(i, j + 1)
  b(3) = table(i + 1, j - 1) * table(i - 1, j + 1)
  
    If table(i, j) = 0 And ((table(i - 2, j) <> 3 - k And table(i + 2, j) <> 3 - k And table(i - 2, j - 2) <> 3 - k And table(i + 2, j + 2) <> 3 - k And b(0) * b(1) = k * k) _
                                        Or (table(i - 2, j) <> 3 - k And table(i + 2, j) <> 3 - k And table(i, j - 2) <> 3 - k And table(i, j + 2) <> 3 - k And b(0) * b(2) = k * k) _
                                        Or (table(i - 2, j) <> 3 - k And table(i + 2, j) <> 3 - k And table(i + 2, j - 2) <> 3 - k And table(i - 2, j + 2) <> 3 - k And b(0) * b(3) = k * k) _
                                        Or (table(i - 2, j - 2) <> 3 - k And table(i + 2, j + 2) <> 3 - k And table(i, j - 2) <> 3 - k And table(i, j + 2) <> 3 - k And b(1) * b(2) = k * k) _
                                        Or (table(i - 2, j - 2) <> 3 - k And table(i + 2, j + 2) <> 3 - k And table(i + 2, j - 2) <> 3 - k And table(i - 2, j + 2) <> 3 - k And b(1) * b(3) = k * k) _
                                        Or (table(i, j - 2) <> 3 - k And table(i, j + 2) <> 3 - k And table(i + 2, j - 2) <> 3 - k And table(i - 2, j + 2) <> 3 - k And b(2) * b(3) = k * k) _
  ) Then want232 = True
  End Function
Function want233(i, j, k) As Boolean     '定式6’
  Dim m   As Single
  Dim n   As Single
  Dim b(0 To 7)     As Single
  Dim b1(0 To 7)     As Single
  Dim a(0 To 7)     As Single
  Dim a1(0 To 7)     As Single
  b(0) = table(i - 1, j)
  b(1) = table(i - 1, j - 1)
  b(2) = table(i, j - 1)
  b(3) = table(i + 1, j - 1)
  b(4) = table(i + 1, j)
  b(5) = table(i + 1, j + 1)
  b(6) = table(i, j + 1)
  b(7) = table(i - 1, j + 1)
  b1(0) = table(i - 2, j)
  b1(1) = table(i - 2, j - 2)
  b1(2) = table(i, j - 2)
  b1(3) = table(i + 2, j - 2)
  b1(4) = table(i + 2, j)
  b1(5) = table(i + 2, j + 2)
  b1(6) = table(i, j + 2)
  b1(7) = table(i - 2, j + 2)
  a(0) = table(i - 2, j) * table(i - 1, j)
  a(1) = table(i - 2, j - 2) * table(i - 1, j - 1)
  a(2) = table(i, j - 2) * table(i, j - 1)
  a(3) = table(i + 1, j - 1) * table(i + 2, j - 2)
  a(4) = table(i + 1, j) * table(i + 2, j)
  a(5) = table(i + 1, j + 1) * table(i + 2, j + 2)
  a(6) = table(i, j + 1) * table(i, j + 2)
  a(7) = table(i - 1, j + 1) * table(i - 2, j + 2)
  a1(0) = table(i - 3, j)
  a1(1) = table(i - 3, j - 3)
  a1(2) = table(i, j - 3)
  a1(3) = table(i + 3, j - 3)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -