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

📄 objecttype.bas

📁 一款飞机射击游戏的源代码
💻 BAS
字号:
Attribute VB_Name = "ModObjectType"
Option Explicit

Public HeadStr As String * 20
Public AllCon As Integer        '定义的文件头'AllCon 是包含的个数,而不是序数

Public N As Integer         'for Count
Public ConX() As Integer    '''''''''' 作为存储与运行的通讯,编号为二者最大值
''以下声明相当于类模块,作为一个"物体"对象
Type AllSeat
    X As Single
    Y As Single
End Type
Type FireX
    DelayFps As Integer
    FireType As Byte
    FireSeat As AllSeat
End Type
'''''''''''''''''''''''''''''''''''''''''''''''''

Type SaveObject                    'Eobject的存储方式
    SaveName As Integer        ''与HdcE 联系用ConX()
    AllFps As Byte          '具有帧
    Width As Single         '以单帧计算
    Height As Single
    ExplodeType As Byte     '爆炸方式(声音包含在爆炸方式中)
    IsFlicker As Boolean          '该项声明有误,改为是否往复,是即为往复,否则为循环
    IsRotate As Boolean         '是否自动转1,0
    Life As Integer         '生命值
    MaskColor As Long       '掩模色
    NextDelay As Integer    '变换到下一个物体的帧数;0 即不变换
    NextEObject As Integer  '下一个变换物体
    DelayFps As Byte        'Fps 延迟
    FireSet(1 To 3) As FireX   'delayfps 是前面的延迟,若遇到0,则开始循环
    
    HdcE As Long
    HdcBack As Long
    Sound As Integer
    Reserved As Integer
    Reserved2 As Long
End Type
Type RunObject              'Eobject的运行方式
    IndexR As Integer
    CombParent As Integer   '如果作为一个组合式一部分,则=CombEobject.EName;此时MoveX 将不起作用
    CurLife As Integer
    CurFps As Byte          '具有帧当中的循环记数
    CurTotFps As Integer    '已经运行总帧       ’如果路径出错,可以避免溢出
    CurX As Single       '以左上角记
    CurY As Single
    StartX As Integer
    StartY As Integer
    MoveType As Byte
    PackageType As Byte
    CurSpeedX As Single      '******Cur*两项要传到 NextObject
    CurSpeedY As Single
    CurAngle As Single
    BasSpeed As Single
    BasAngle As Integer
    CurDelay As Byte
    DelayFps As Byte
    FollowPlayer As Byte
    CurFireFps(1 To 3) As Integer
End Type

'**********以下为完全设计一个静态eobjec的存储,地图存储,读入,运行
Type SaveStaticEObject              ''存储用
    SaveName As Integer         '仅存储时用
    Width As Single
    Height As Single
    MaskColor As Long
    Life As Integer
    IsRotate As Boolean
    IsFlick As Integer           '该值已经无用,但作为 IsAutoRotate
    FireSet(1 To 3) As FireX     '如果FireDelayFps=0 ,表示不发射
    
    HdcE As Long                '读入用,存储是为0
    HdcBack As Long
    Sound As Integer
    RotateWidth As Integer
    Reserved2 As Long
End Type
Type RunStaticObject
    IndexR As Integer
    MoveType As Byte
    PackageType As Byte
    CurX As Single           '以左上角计算
    CurY As Single
    StartX As Integer
    StartY As Integer
    CurSpeedX As Single
    CurSpeedY As Single
    CurAngle As Single      '注意,该角度并非用来旋转
    CurAutoAngle As Integer ''旋转的角度
    BasSpeed As Single
    BasAngle As Integer
    RotateAngle As Integer
    CurFps As Integer
    CurTotFps As Integer
    CurLife As Integer
    CurDelay As Byte
    FollowPlayer As Byte
    CurFireFps(1 To 3) As Integer   '用于计量特殊路径子弹
End Type
'**********以上为完全设计一个静态eobjec的存储,地图存储,读入,运行


'*************************因为飞机只有两个,存储和运行用同种方式
Type SavePlane             '自己的飞机 Save=Run
    SaveName As Integer
    Width As Single
    Height As Single
    MaskColor As Long
    Life As Integer
    AllFps As Byte
    ExplodeType As Byte
    FireSeatX1 As Byte
    FireSeatY1 As Byte
    FireSeatX2 As Byte
    FireSeatY2 As Byte
    
    HdcE As Long        '加
    HdcBack As Long
    Sound As Integer
    Reserved As Integer
End Type
Type RunPlane
    IndexR As Integer
    HdcRun As Long
    HdcBack As Long
    CurLife As Integer
    CurX As Single       ''''''''''''
    CurY As Single
    CurSpeedX As Single      ''''''''''''
    'CurSpeedY As Single     '在此可能无用
    CurFps As Byte          'Fps 初始为中间值
    CurFireType As Byte
    CurPower As Byte        '计量子弹的等级
    CurBomb As Byte
    CurBombNum As Byte
    CurBombFps As Byte
    CurDelay As Byte
End Type
'''''''''''''''''
Type SaveBackObject         '背景物体,动态和静态
    SaveName As Integer
    AllFps As Byte
    Width As Single
    Height As Single
    MaskColor As Long
    DelayFps As Byte
    
    HdcE As Long
    HdcBack As Long
    Reserved As Double
    Reserved2 As Long
End Type
Type RunBackObject
    IndexR As Integer
    CurFps As Byte
    CurTotFps As Integer
    CurDelay As Byte
    CurX As Single
    CurY As Single
    CurSpeedY As Single
End Type
'**********以下为完全设计一个子弹《静态》类型
Type SaveBullet
    SaveName As Integer
    Width As Byte           '注意此为 byte
    Height As Byte
    MaskColor As Long
    IsRotate As Boolean
    Power As Integer
    Sound As Integer
    TypeMove As Byte        '外加的
    SpeedInit As Byte       '外加的
    TailColor As Long       '如果不为0 ,则为拖尾子弹,其颜色是Tailcolor
    IsFollow As Boolean
    HdcE As Long
    HdcBack As Long
    RotateWidth As Integer
End Type
Type RunBullet
    IndexR As Integer
    CurX As Single
    CurY As Single
    CurSpeedX As Single
    CurSpeedY As Single
    CurAngle As Integer
    IsRotate As Boolean
    CurDelay As Byte
End Type
'**********以上为完全设计一个子弹类型

'以下为飞机用子弹
Type SaveMyBul
    SaveName As Integer
    Width As Byte
    Height As Byte
    MaskColor As Long
    Power As Integer
    Sound As Integer
    
    HdcE As Long
    HdcBack As Long      '外加的
    IsLeftToRight As Boolean
    Reser As Integer
    Reserved2 As Long
End Type
Type RunMyBul
    IndexR As Integer
    WhichPlayer As Byte 'p1=1,p2=2
    MoveType As Byte    '注意该项与 bullet 不同
    CurX As Single
    CurY As Single
    CurSpeedX As Single
    CurSpeedY As Single
    CurAngle As Single      '用于跟踪弹,不定路径子弹的角度,与 movetype 有关
                            '该角度以水平上垂直线为基线,左为负,右为正
    CurDelay As Byte
End Type

'以下为爆炸
Type SaveExp                ',随机调用
    SaveName As Integer
    Width As Single
    Height As Single
    MaskColor As Long
    AllFps As Byte
    
    HdcE As Long
    HdcBack As Long      '
    DelayFps As Byte '''''外加的
    Reser As Byte
    Sound As Integer
    Reserved2 As Long
End Type
Type RunExp
    IndexR As Integer
    CurX As Single
    CurY As Single
    CurFps As Byte
    CurDelay As Byte
End Type

'*******************************子弹撞击时的火花
Type SaveCrash          '只有 1 Fps
    SaveName As Integer
    Width As Byte
    Height As Byte
    MaskColor As Long
    
    HdcE As Long
    HdcBack As Long      '外加的
    AllFps As Byte
    DelayFps As Byte
    Sound As Integer
    Reserved2 As Long
End Type
Type RunCrash
    IndexR As Integer
    CurX As Single
    CurY As Single
    CurFps As Byte
    CurDelay As Byte
End Type

'以下为运动包裹
Type SavePac
    SaveName As Integer
    Width As Single
    Height As Single
    MaskColor As Long
    AllFps As Byte
    TypePac As Byte
    DelayFps As Byte
    
    HdcE As Long
    HdcBack As Long      '外加的
    Sound As Integer
    Reserved2 As Long
End Type
Type RunPac
    IndexR As Integer
    MoveType As Byte
    CurX As Single
    CurY As Single
    CurSpeedX As Single
    CurSpeedY As Single
    CurAngle As Single
    CurFps As Byte
    CurTotalFps As Integer
    CurDelay As Byte
End Type
'*******************************以上为包裹

'以下为雷
Type SaveBomb
    SaveName As Integer
    Width As Byte
    Height As Byte
    MaskColor As Long
    IsDrawType As Byte       '定义存储的是画法还是图象
    
    HdcE As Long
    HdcBack As Long      '外加的
    Sound As Long
    Reserved2 As Long
End Type
Type RunBomb
    IndexR As Integer
    IsDrawType As Byte
    HdcRun As Long
    CurDelay As Byte
    CurX As Single
    CurY As Single
End Type


Type SaveSingleMapObject
    IsUsed As Byte
    TypeObj As Byte
    IndexOjb As Integer
    SeatX As Integer
    MoveType As Byte
    IsPac As Byte
    Reserved As Long
End Type
Type MapDoubleObject            ''''在同一线上最多有10个物体
    SingleObj(1 To 40) As SaveSingleMapObject '' 需要改为 20 个,存背景时必须截成段
End Type                                        '其中动态背景需要单独读入
Type MapHead
    MapHeadStr As String * 20
    NameMap As String * 30
    PassWord(1 To 19) As Byte
    PL As Byte          '计量pw
    MapDescription As String * 50
    Editor As String * 50
    Reserved1 As String * 60
    WidthTotal As Integer
    HeightTotal As Integer
    WidthShow As Integer
    IsDrawBack As Boolean
    BackColor As Long
    SpeedMap As Byte
    RandomPicture(1 To 10) As Integer
    IsRandom As Boolean
    SpeedBack As Byte
    Reserved2 As String * 19
End Type

Type SaveMap
    HeadMapFile As MapHead
    ObjMap() As MapDoubleObject         '纵行每隔 20 位存一次,横行最多10个,估计 (6000*10\20)*12=*36 K
End Type                                '最多可以存 2500 个物体(除去最后1K 保留给ghost)

Public Function ReadPW(S As MapHead) As String
    Dim Ls As Byte
    Dim BufS As String
    For Ls = 1 To S.PL
        BufS = BufS & Chr((S.PassWord(Ls) + 156) Mod 256)
    Next
    ReadPW = BufS
End Function

'*******************************************
'Init
Public Sub InitSaveObject(NewE As SaveObject)
Dim NewObj As SaveObject
    NewE = NewObj
End Sub

⌨️ 快捷键说明

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