📄 winapiandfunction.bas
字号:
Attribute VB_Name = "TankFunction"
Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Public Const SRCAND = &H8800C6
Public Const SRCCOPY = &HCC0020
Public Const SRCERASE = &H440328
Public Const SRCINVERT = &H660046
Public Const SRCPAINT = &HEE0086
Public Gp(20, 16) 'Map Size 20*16 grid.
Public Function TankSound(SoundType As String)
'Form1.MMControl1.filename = "fire.wav"
Form1.MMControl1.Command = "open"
Form1.MMControl1.Command = "prev"
Form1.MMControl1.Command = "play"
End Function
Public Function BackgroundMusic(Play As Boolean)
Static LoopMusic As Integer
Select Case LoopMusic
Case 0
Form1.MMControl2.Command = "open"
Form1.MMControl2.Command = "play"
LoopMusic = 1
Case 1
If Form1.MMControl2.Mode = 525 Then
LoopMusic = 0
Form1.MMControl2.Command = "close"
End If
End Select
End Function
Public Function LoadMap()
'0 黑色=可以通过=0
'255 红色=砖墙防御=1
'16777215 白色=水泥防御=2
'16711935 紫色=我方战车=3
'65535 黄色=我方另一辆战车
'65280 绿色=隐蔽物体=4
'16711680 兰色=我方基地重要设施=5
Static GetPixelColorCode As Long
Static SetMapType As Integer
For Y = 0 To 15
For X = 0 To 19
GetPixelColorCode = GetPixel(Form1.MapPic.hdc, X, Y)
Select Case GetPixelColorCode
Case 0
SetMapType = 0 '0 黑色=可以通过=0
Case 255
SetMapType = 1 '255 红色=砖墙防御=1
Case 16777215
SetMapType = 2 '16777215 白色=水泥防御=2
Case 16711935
SetMapType = 3 '16711935 紫色=我方战车=3
TankA.Left = X * 25
TankA.Top = Y * 25
TankA.X = X
TankA.Y = Y
Case 65535 '65535 黄色=我方另一辆战车
SetMapType = 6
TankB.Left = X * 25
TankB.Top = Y * 25
TankB.X = X
TankB.Y = Y
Case 65280
SetMapType = 4 '65280 绿色=隐蔽物体=4
Case 16711680
SetMapType = 5 '16711680 兰色=我方基地重要设施=5
End Select
Gp(X, Y) = SetMapType
Next X
Next Y
End Function
Public Function MapGrid(ShowGrid As Boolean, R As Integer, G As Integer, B As Integer)
If ShowGrid = True Then
For Y = 0 To 15
For X = 0 To 19
Form1.Stage.Line (X * 25, 0)-(X * 25, 400), RGB(R, G, B)
Form1.Stage.Line (0, Y * 25)-(500, Y * 25), RGB(R, G, B)
Next X
Next Y
End If
End Function
Public Function TANK_BOMB_TOUCH()
If TankA.BombX \ 25 = TankB.X And TankA.BombY \ 25 = TankB.Y Then
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 13 * 25, 25, SRCAND
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 13 * 25, 0, SRCPAINT
TankA.Score = TankA.Score + 150
TankB.Life = TankB.Life - 1
TankA.Fire = 0
TankSound "bomb"
End If
If TankB.BombX \ 25 = TankA.X And TankB.BombY \ 25 = TankA.Y Then
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 13 * 25, 25, SRCAND
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 13 * 25, 0, SRCPAINT
TankB.Score = TankB.Score + 150
TankA.Life = TankA.Life - 1
TankB.Fire = 0
TankSound "bomb"
End If
If TankA.Life = 0 Then
If MsgBox("坦克A已经失败,是否要重新决战?", vbYesNo) = vbYes Then
LoadMap
TankA.Life = 3
TankB.Life = 3
Else
End
End If
End If
If TankB.Life = 0 Then
If MsgBox("坦克B已经失败,是否要重新决战?", vbYesNo) = vbYes Then
LoadMap
TankA.Life = 3
TankB.Life = 3
Else
End
End If
End If
Form1.Label1.Caption = "A Tank=" & TankA.Life & " Score=" & TankA.Score
Form1.Label2.Caption = "B Tank=" & TankB.Life & " Score=" & TankB.Score
End Function
Public Function DisplayResult(Show As Boolean)
If Show = True Then
Form1.Stage.Cls
For Y = 0 To 15
For X = 0 To 19
Select Case Gp(X, Y)
Case 0 '0 黑色=可以通过=0
'Null
Case 1 '255 红色=砖墙防御=1
BitBlt Form1.Stage.hdc, X * 25, Y * 25, 25, 25, Form1.PicA.hdc, 4 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, X * 25, Y * 25, 25, 25, Form1.PicA.hdc, 4 * 25, 0, vbSrcPaint
Case 2 '16776447 白色=水泥防御=2
BitBlt Form1.Stage.hdc, X * 25, Y * 25, 25, 25, Form1.PicA.hdc, 5 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, X * 25, Y * 25, 25, 25, Form1.PicA.hdc, 5 * 25, 0, vbSrcPaint
Case 3 '16711935 紫色=我方战车出现位置=3
'Null
Case 6 '64767 黄色=我方战车出现位置=6
'Null
Case 5 '16711680 兰色=我方基地重要设施=5
BitBlt Form1.Stage.hdc, X * 25, Y * 25, 25, 25, Form1.PicA.hdc, 8 * 25, 0, vbSrcPaint
End Select
Next X
Next Y
Select Case TankA.Direction
Case 0
Select Case TankA.StopDirection
Case 1
'TankA
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 2 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 2 * 25, 0, vbSrcPaint
Case 2
'TankA
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 3 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 3 * 25, 0, vbSrcPaint
Case 3
'TankA
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 0 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 0 * 25, 0, vbSrcPaint
Case 4
'TankA
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 1 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 1 * 25, 0, vbSrcPaint
End Select
Case 1
'TankA
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 2 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 2 * 25, 0, vbSrcPaint
Case 2
'TankA
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 3 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 3 * 25, 0, vbSrcPaint
Case 3
'TankA
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 0 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 0 * 25, 0, vbSrcPaint
Case 4
'TankA
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 1 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankA.Left, TankA.Top, 25, 25, Form1.PicA.hdc, 1 * 25, 0, vbSrcPaint
End Select
Select Case TankB.Direction
Case 0
Select Case TankB.StopDirection
Case 1
'TankB
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 11 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 11 * 25, 0, vbSrcPaint
Case 2
'TankB
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 12 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 12 * 25, 0, vbSrcPaint
Case 3
'TankB
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 9 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 9 * 25, 0, vbSrcPaint
Case 4
'TankB
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 10 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 10 * 25, 0, vbSrcPaint
End Select
Case 1
'TankB
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 11 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 11 * 25, 0, vbSrcPaint
Case 2
'TankB
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 12 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 12 * 25, 0, vbSrcPaint
Case 3
'TankB
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 9 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 9 * 25, 0, vbSrcPaint
Case 4
'TankB
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 10 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankB.Left, TankB.Top, 25, 25, Form1.PicA.hdc, 10 * 25, 0, vbSrcPaint
End Select
BitBlt Form1.Stage.hdc, TankA.BombX, TankA.BombY, 25, 25, Form1.PicA.hdc, 7 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankA.BombX, TankA.BombY, 25, 25, Form1.PicA.hdc, 7 * 25, 0, vbSrcPaint
BitBlt Form1.Stage.hdc, TankB.BombX, TankB.BombY, 25, 25, Form1.PicA.hdc, 7 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, TankB.BombX, TankB.BombY, 25, 25, Form1.PicA.hdc, 7 * 25, 0, vbSrcPaint
For Y = 0 To 15
For X = 0 To 19
If Gp(X, Y) = 4 Then '64512 绿色=隐蔽物体=4
BitBlt Form1.Stage.hdc, X * 25, Y * 25, 25, 25, Form1.PicA.hdc, 6 * 25, 25, vbSrcAnd
BitBlt Form1.Stage.hdc, X * 25, Y * 25, 25, 25, Form1.PicA.hdc, 6 * 25, 0, vbSrcPaint
End If
Next X
Next Y
TANK_BOMB_TOUCH
End If
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -