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

📄 winapiandfunction.bas

📁 有jsp写的坦克游戏
💻 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 + -