📄 frm.frm
字号:
VERSION 5.00
Begin VB.Form Frm
BorderStyle = 1 'Fixed Single
Caption = "五子棋游戏"
ClientHeight = 6000
ClientLeft = 45
ClientTop = 330
ClientWidth = 7860
Icon = "Frm.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 6000
ScaleWidth = 7860
StartUpPosition = 2 '屏幕中心
Begin VB.CommandButton Cmd
Caption = "开始(&B)"
Height = 375
Left = 6390
TabIndex = 1
Top = 420
Width = 1185
End
Begin VB.PictureBox picQiPan
AutoRedraw = -1 'True
BackColor = &H0080C0FF&
Height = 6000
Left = 0
ScaleHeight = 5940
ScaleWidth = 6060
TabIndex = 0
Top = 0
Width = 6120
Begin VB.Shape Shp
BorderColor = &H000000FF&
Height = 255
Left = 0
Top = 0
Width = 255
End
End
Begin VB.Image Image1
Height = 480
Left = 6780
Picture = "Frm.frx":08CA
Top = 4950
Width = 480
End
Begin VB.Label LblPos
AutoSize = -1 'True
BackColor = &H80000000&
Caption = "当前位置"
Height = 180
Left = 6390
TabIndex = 3
Top = 1740
Width = 720
End
Begin VB.Label LblTip
AutoSize = -1 'True
BackColor = &H80000000&
Caption = "黑方先手"
ForeColor = &H00FF0000&
Height = 180
Left = 6390
TabIndex = 2
Top = 1440
Width = 720
End
End
Attribute VB_Name = "Frm"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'***********************************************************
'五子棋程序:
'***********************************************************
'使用的控件及名称:
'窗体:Form 名称:Frm
'棋盘控件: PictrueBox 名称: picQiPan
'位置标识控件: Shape 名称: Shp
'按钮控件: CommandButton 名称: Cmd
'提示信息控件: Label 名称: LblTip
'提示坐标控件: Label 名称: LblPos
'***********************************************************
Option Explicit
Private mD As Integer '棋子网格宽度
Private mL As Integer '棋盘边长网格数
Private mBOrW As Boolean '当前棋子的颜色(真-黑,假-白)
Private mX As Integer '当前棋盘上的位置X
Private mY As Integer '当前棋盘上的位置Y
Private Sub Cmd_Click() '点击开始按钮
Dim i As Integer
Dim j As Integer
DrawQiPan '画棋盘
'初始化棋盘数组(清零)
For i = 0 To 19
For j = 0 To 19
mArray(i, j) = 0
Next j
Next i
End Sub
Private Sub Form_Resize() '初始化窗体
picQiPan.AutoRedraw = True
mD = 300 '每一个网格的宽度为300像素
mL = 19 '每一边长有19网格
'标识位置的图形框的尺寸
Shp.Width = mD '宽度
Shp.Height = mD '高度
'棋盘控件的位置和大小
With picQiPan
'左上角的位置
.Left = 0
.Top = 0
'内部的宽度和高度
.ScaleWidth = mD * (mL + 1)
.ScaleHeight = mD * (mL + 1)
End With
Cmd_Click
End Sub
Public Sub DrawQiPan() '绘制棋盘
Dim i As Integer
mBOrW = True '开始为黑方
picQiPan.Cls '清空棋盘的内容
'画水平线
For i = 1 To 19
picQiPan.Line (mD, i * mD)-(mD * mL, i * mD), vbBlack
Next i
'画垂直线
For i = 1 To 19
picQiPan.Line (i * mD, mD)-(i * mD, mD * mL), vbBlack
Next i
'将标识位置的图形框定位棋盘中心
Shp.Left = mD * 10 - mD / 2
Shp.Top = mD * 10 - mD / 2
picQiPan.FillStyle = 0 '填充风格(实心)
picQiPan.FillColor = vbBlack '填充颜色
'画出9个星位
picQiPan.Circle (4 * mD, 4 * mD), mD / 10, vbBlack '位置(4,4)
picQiPan.Circle (10 * mD, 10 * mD), mD / 10, vbBlack '位置(10,10)
picQiPan.Circle (10 * mD, 4 * mD), mD / 10, vbBlack '位置(10,4)
picQiPan.Circle (4 * mD, 10 * mD), mD / 10, vbBlack '位置(4,10)
picQiPan.Circle (4 * mD, 16 * mD), mD / 10, vbBlack '位置(4,16)
picQiPan.Circle (16 * mD, 4 * mD), mD / 10, vbBlack '位置(16,4)
picQiPan.Circle (16 * mD, 10 * mD), mD / 10, vbBlack '位置(16,10)
picQiPan.Circle (10 * mD, 16 * mD), mD / 10, vbBlack '位置(10,16)
picQiPan.Circle (16 * mD, 16 * mD), mD / 10, vbBlack '位置(16,16)
End Sub
Private Sub picQiPan_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim mColor As Long '当前的颜色
'鼠标左键按下,限制标识位置的图形框在棋盘中
If Button = 1 And mX > 0 And mX < 20 And mY > 0 And mY < 20 Then
If mArray(mX, mY) <> 0 Then
MsgBox "此处已经落子,请在别处下子!", vbInformation, "提示"
Else
mColor = IIf(mBOrW, vbBlack, vbWhite) '得到当前的颜色
picQiPan.FillStyle = 0 '填充的风格(实心)
picQiPan.FillColor = mColor '填充的颜色
'在当前的位置上画园,代表棋子,棋子半径为0.4网格宽度
picQiPan.Circle (mX * mD, mY * mD), mD * 2 / 5, mColor
mArray(mX, mY) = IIf(mBOrW, 1, -1) '保存到数组中
'判断是否胜利,WhoIsWin=0,代表继续下棋
If WhoIsWin(mX, mY, IIf(mBOrW, 1, -1)) <> 0 Then
MsgBox "恭喜你。你赢了!", vbInformation, "胜利" '提示胜利方
LblTip.Caption = IIf(mBOrW, "黑", "白") & "方胜利!" '显示胜利方
Else
mBOrW = Not mBOrW '交换下子
LblTip.Caption = IIf(mBOrW, "黑", "白") & "方思考中......" '显示正在思考方
End If
End If
End If
End Sub
Private Sub picQiPan_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
'计算当前棋盘上的位置
mX = (x - x Mod mD) / mD
mY = (y - y Mod mD) / mD
'显示当前棋盘上的位置
LblPos.Caption = "当前位置:(" & mX & "," & mY & ")"
'显示当前棋盘上的位置
If mX > 0 And mX < 20 And mY > 0 And mY < 20 Then '限制标识位置的图形框在棋盘中
Shp.Left = mX * mD - mD / 2
Shp.Top = mY * mD - mD / 2
End If
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -