飞机射击类小游戏:有关飞机射击类游戏的设计原理

作者:尹龙

水平有限请别见怪:)

    众所周知飞机射击类游戏几乎是我们接触到类计算机游戏不论是在街机中还是在计算机中类游戏都是非常容易上手和招人喜爱就算是在这个即时战略游戏、3D第视角游戏等盛行年代闲暇是玩玩打飞机游戏也是很惬意

    在这几天里学完了有关 DirectX 方面知识后就上手编了下飞机射击游戏看起来好象很复杂其实只不过是些数据结构集合而已还是比较容易实现

    有关 DirectDraw 方面编程我就不想介绍了任何个人照本书看几天就可以编出象样示范无非是在申请2~3个表面上轮换贴图而已WIN32 API 似乎已经让我们不需要花什么精力就可以实现非常平滑动画了

    下面简单介绍下设计思路方法关键是PLAYER飞机和敌人飞机控制以及它们子弹控制

    很显然用2个对象就可以实现它们控制了分别是PLAYER飞机(可以是2架)、敌人飞机

    PLAYER飞机类:

    

CPlayer
{
private:
  CPo ptPos;       //飞机坐标
  struct bullet *stBullet; //飞机所发出所有子弹链表

  struct display PlaneDisplay; //即有关飞机位图信息指针、飞机有效区域等信息

private:
  FreshBullet;     //定时刷新子弹链表除去已经爆炸或消失子弹

public:
   nOil;          //飞机油料
   nSpeed;        //飞机速度
   nDisplayState; //显示方式如果被击中就转向爆炸状态以便
                     //飞机显示显示爆炸效果比如正常是1
                     //消失是0而爆炸就是-15这样显示可以
                     //单纯按照这个植在SUFFACE中计算图象位置
                     //直接显示就可以了每次+1这样-15加了15次就
                     //变成0了动画也显示了飞机也消失了不需要
                     //其他处理这样思路方法也可以用在子弹处理上

public:
  CPo GetPos;                //获取飞机坐标
  void SetPos(CPo);            //社顶设定飞机坐标
  void AddBullet(struct bullet*); //给飞机加入子弹只要每隔设定 TickTime
                                  //就加入就可以形成连续发弹效果

  void RunBullet;               //每隔设定 TickTime按Bullet属性更新
                                  //Bullet坐标就可以形成复杂子弹效果

struct bullet* IsAttack(CPo); //获取当前坐标是否有子弹并返回子弹指针

                                 //这是为了判断敌机是否被击中所设计

                                 //敌机只要将自己坐标放入CPo就可以

                                 //知道是否被击中并且用指针设定子弹状态
}

子弹STRUCT
struct bullet
{
  struct bullet* next; //指向下个子弹
   nStyle;          //子弹种类
   nSpeed;          //子弹速度
   nDirection;      //子弹方向
   nDisplayState;   //显示方式如果击中目标就转向爆炸状态以便
                       //Runbullet显示爆炸效果同上边飞机处理思路方法
}

敌机类和PLAYER飞机类差不多去掉油料等属性多加入个MotionStyle属性控制飞机

飞行方式和攻击方式如直线、斜线、曲线、SIN方式、跟踪方式等再加入个Run思路方法利用

MotionStyle在每个TickTime时决定飞机坐标变换思路方法这样就可以很直观控制飞机飞行和攻击

在判断双方是否被攻击时只要先用PLAYER对象IsAttack将所有敌机对象坐标放入其中就可以

获取所有被PLAYER击中飞机反过来用所有敌机对象IsAttack将PLAYER飞机坐标放入其中

就可以知道PLAYER是否被击中

 

至于是否被击中可以单纯用矩形来判断完美思路方法当然是用Rgn(区域)来判断将飞机轮廓变

成区域就可以了

 

至于背景设计就更简单了只要用个 2维每个单位中存放着位图代号通过个代号和

位图RECT映射就可以产生幅背景图了如果想产生立体感或者背景中单位有遮盖现象可以通过

设定优先级思路方法将优先级底先画然后画优先级高自然就可以产生立体效果了更简单思路方法就是

直接按从上往下(假设背景立体感是向上)顺序贴图就可以了
Tags:  射击类小游戏 射击类游戏 飞机射击类单机游戏 飞机射击类小游戏

延伸阅读

最新评论

发表评论