📄 form1.frm
字号:
VERSION 5.00
Begin VB.Form Form1
Caption = "Air Hockey"
ClientHeight = 6225
ClientLeft = 6135
ClientTop = 2505
ClientWidth = 3495
LinkTopic = "Form1"
ScaleHeight = 6225
ScaleWidth = 3495
Begin VB.HScrollBar cpu
Height = 255
LargeChange = 20
Left = 720
Max = 150
Min = 30
SmallChange = 5
TabIndex = 2
Top = 5880
Value = 70
Width = 2775
End
Begin VB.Timer Timer1
Interval = 1
Left = 2280
Top = 1560
End
Begin VB.PictureBox Picture1
Height = 5775
Left = 0
ScaleHeight = 5715
ScaleWidth = 3435
TabIndex = 0
Top = 0
Width = 3495
Begin VB.Shape paddle2
FillColor = &H00FF0000&
FillStyle = 0 'Solid
Height = 255
Left = 600
Shape = 3 'Circle
Top = 240
Width = 255
End
Begin VB.Line Line3
BorderWidth = 10
X1 = 1320
X2 = 2160
Y1 = 0
Y2 = 0
End
Begin VB.Line Line2
BorderWidth = 10
X1 = 1320
X2 = 2160
Y1 = 5640
Y2 = 5640
End
Begin VB.Shape paddle1
FillColor = &H000000FF&
FillStyle = 0 'Solid
Height = 255
Left = 1200
Shape = 3 'Circle
Top = 4800
Width = 255
End
Begin VB.Shape puck
FillStyle = 0 'Solid
Height = 255
Left = 600
Shape = 3 'Circle
Top = 3360
Width = 255
End
Begin VB.Line Line1
X1 = 0
X2 = 3480
Y1 = 2880
Y2 = 2880
End
Begin VB.Label Scorered
Caption = "0"
BeginProperty Font
Name = "MS Sans Serif"
Size = 18
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00000080&
Height = 375
Left = 2880
TabIndex = 4
Top = 3000
Width = 375
End
Begin VB.Label Scoreblue
Caption = "0"
BeginProperty Font
Name = "MS Sans Serif"
Size = 18
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H8000000D&
Height = 375
Left = 2880
TabIndex = 3
Top = 2400
Width = 375
End
End
Begin VB.Label Label1
Caption = "CPU skill"
Height = 375
Left = 0
TabIndex = 1
Top = 5880
Width = 735
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim puckx As Single, pucky As Single, vpuckx As Single, vpucky As Single
Dim padx1 As Single, padx2 As Single, pady1 As Single, pady2 As Single
Dim pad2x1 As Single, pad2x2 As Single, pad2y1 As Single, pad2y2 As Single
Dim touche As Boolean, touche1 As Boolean
Dim gagne As Boolean
Private Sub Form_Load()
Picture1.MousePointer = 2
puckx = puck.Left
pucky = puck.Top
vpuckx = 0
vpucky = 200
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
paddle1.Left = X - 120
paddle1.Top = max(Y - 120, Line1.Y1)
End Sub
Function max(ByVal a As Single, ByVal b As Single)
If a > b Then
max = a
Else
max = b
End If
End Function
Function min(ByVal a As Single, ByVal b As Single)
If a > b Or a < 0 Then
min = b
Else
min = a
End If
End Function
Private Sub Timer1_Timer()
Dim a As Single
If gagne = True Then
vpuckx = 100
vpucky = 0
If pucky < 100 Then
Scorered.Caption = Scorered.Caption + 1
MsgBox max(Scorered.Caption, Scoreblue.Caption) & " to " & min(Scorered.Caption, Scoreblue.Caption), vbDefaultButton1, "Red goal"
Else
Scoreblue.Caption = Scoreblue.Caption + 1
MsgBox max(Scorered.Caption, Scoreblue.Caption) & " to " & min(Scorered.Caption, Scoreblue.Caption), vbDefaultButton1, "Blue goal"
End If
pucky = Line1.Y1
gagne = False
Exit Sub
End If
If vpucky > 0 Or Abs(vpucky) < 15 Then
touche = False
Else
touche1 = False
End If
If puckx < 0 Then
Beep
vpuckx = -0.8 * vpuckx
puckx = -puckx
End If
If pucky < 0 Then
If puckx < Line3.X2 And puckx > Line3.X1 Then
gagne = True
Exit Sub
End If
Beep
vpucky = -0.8 * vpucky
pucky = -pucky
End If
If puckx > 3200 Then
Beep
vpuckx = -0.8 * vpuckx
puckx = 2 * 3200 - puckx
End If
If pucky > 5480 Then
If puckx < Line3.X2 And puckx > Line3.X1 Then
gagne = True
Exit Sub
End If
Beep
vpucky = -0.8 * vpucky
pucky = 2 * 5480 - pucky
End If
puckx = puckx + vpuckx
pucky = pucky + vpucky
puck.Left = puckx
puck.Top = pucky
padx1 = padx2
pady1 = pady2
pad2x1 = pad2x2
pad2y1 = pad2y2
padx2 = paddle1.Left
pady2 = paddle1.Top
If puckx > pad2x2 Then
paddle2.Left = paddle2.Left + min(vpuckx, cpu.Value)
Else
paddle2.Left = paddle2.Left - min(Abs(vpuckx), cpu.Value)
End If
pad2x2 = paddle2.Left
If pucky < Line1.X1 And vpucky < 20 Then
If pad2y2 - pucky > -240 Then
paddle2.Top = paddle2.Top - 240
pad2y2 = paddle2.Top
Else
paddle2.Top = paddle2.Top + 100
pad2y2 = paddle2.Top
End If
Else
If pucky < 500 And pucky > pad2y2 Then
paddle2.Top = paddle2.Top + 100
pad2y2 = paddle2.Top
Else
If paddle2.Top > 0 Then
paddle2.Top = paddle2.Top - 120
pad2y2 = paddle2.Top
End If
End If
End If
If Not (touche) And ((puckx - padx2) ^ 2 + (pucky - pady2) ^ 2) ^ (1 / 2) < 240 Then
a = 240 / ((puckx - padx2) ^ 2 + (pucky - pady2) ^ 2) ^ (1 / 2)
puckx = padx2 + a * (puckx - padx2)
pucky = pady2 + a * (pucky - pady2)
Beep
touche = True
nvitesse vpuckx, vpucky, puckx - padx2 + 0.05, pady2 - pucky
vpuckx = vpuckx + (padx2 - padx1) * Abs(puckx - padx2) / 240
vpucky = vpucky + (pady2 - pady1) * Abs(pucky - pady2) / 240
End If
If Not (touche1) And ((puckx - pad2x2) ^ 2 + (pucky - pad2y2) ^ 2) ^ (1 / 2) < 240 Then
a = 240 / ((puckx - padx2) ^ 2 + (pucky - pady2) ^ 2) ^ (1 / 2)
puckx = pad2x2 + a * (puckx - pad2x2)
pucky = pad2y2 + a * (pucky - pad2y2)
Beep
touche1 = True
nvitesse vpuckx, vpucky, puckx - pad2x2 + 0.05, pad2y2 - pucky
vpuckx = vpuckx + (pad2x2 - pad2x1) * Abs(puckx - pad2x2) / 240
vpucky = vpucky + (pad2y2 - pad2y1) * Abs(pucky - pad2y2) / 240
End If
End Sub
Sub nvitesse(vx As Single, vy As Single, dx As Single, dy As Single)
Dim angle As Single
Dim vx1, vy1 As Single
angle = Atn(dy / dx)
vx1 = vy * Cos(angle) + vx * Sin(angle)
vy1 = vy * Sin(angle) - vx * Cos(angle)
vx = vx1 * Sin(angle) + vy1 * Cos(angle)
vy = vx1 * Cos(angle) - vy1 * Sin(angle)
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -