关于飞机射击类游戏的设计原理

原创 2001年03月04日 01:26:00

关于飞机射击类游戏的设计原理

作者:尹龙

水平有限,请别见怪:)

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

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

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

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

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

    PLAYER的飞机类:

    

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

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

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

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

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

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

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

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

                                 //敌机只要将自己的坐标放入CPoint中,就可以

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

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

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

飞行方式和攻击方式,如直线、斜线、曲线、SIN方式、跟踪方式等。再加入一个Run()方法,利用

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

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

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

就可以知道PLAYER是否被击中。

 

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

成区域就可以了。

 

至于背景的设计就更简单了,只要用一个二维数组,每个数组单位中存放着位图的代号,通过一个代号与

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

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

直接按从上往下(假设背景立体感是向上的)的顺序贴图,就可以了。

C语言程序设计飞机游戏的体会

心得: 我认为c语言并不是一门复杂的课程,它需要我们勤学多练,熟能生巧,练得多了,自然就能了解到其中的精髓。 想要学好c语言,我认为光靠努力是不够的,还要求我们具有开阔的思维,宽阔的视野。能够做到...
  • eric_giant
  • eric_giant
  • 2016年05月18日 12:47
  • 844

飞行射击游戏的C++实现:一次课程作业

该程序为可视化界面下的飞行射击游戏。程序中,下方的 * 符号代表玩家的飞机,上方的 + 符号代表敌方飞机,o 代表射出的子弹,使用a键和d键控制飞机向左向右移动,使用空格键退出游戏。当子弹击中敌方飞机...
  • archimekai
  • archimekai
  • 2016年01月16日 17:03
  • 3840

手把手教你开发一款IOS飞行射击游戏(六)

开发一款IOS飞行射击游戏
  • qwertyupoiuytr
  • qwertyupoiuytr
  • 2017年01月03日 23:25
  • 282

c语言射击类打飞机小游戏感悟

c语言:简单飞机射击小游戏     使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,操作方法是“a”“d”“w”或者“←”“↑”“→”来控制攻击、左、右,击中敌机可获得积分,被敌机撞中死...
  • BG150206101
  • BG150206101
  • 2016年06月13日 12:42
  • 3068

新版飞机大战游戏安卓源码项目

作者nuptboyzhb,源码newplanegame,新版飞机大战是一款以真实战机为模板的飞行射击类游戏,体验新颖,玩法炫酷。一样的经典,不一样的体验。飞机模型基于目前的主流战机:包括美国F16,F...
  • niuzen15
  • niuzen15
  • 2016年04月22日 09:35
  • 733

【Unity3D】游戏常用点整理-飞机射击类游戏

1)飞机控制 在有限的范围内上下左右移动 public class Boundary { public float xMin = -6.5f; public float xMax =...
  • TW_345
  • TW_345
  • 2015年08月05日 17:50
  • 1617

论飞机游戏在C语言程序的基本语句能完成功能的体会

一.题目:  射击类飞机游戏     二.目的:  通过c语言编写一个射击类的打飞机小游戏,可以通过键盘来进行游戏,操作方法是“a”“d”“w”或者“←”“↑”“→”来控制,击中敌机可获得...
  • BBGD150206125
  • BBGD150206125
  • 2016年06月13日 12:23
  • 711

Java版打飞机小游戏

放假写的一个Java端打飞机小游戏。 复习到的知识点有:java图形界面,多线程,集合框架等。 主要的收获是知道了处理图层的方式,即JLayeredPane层次面板,主要思路 如下:...
  • qq_22770457
  • qq_22770457
  • 2016年04月24日 08:48
  • 1936

20141208 用js做个打飞机游戏 , 用div和img就够了 , ie8也能够支持

演示地址 :   http://xuanzun.sinaapp.com/project/planeFighter/ 终于期末考考完 , 剩下一个月的课程设计 ,倒不如直接回公司好了 , 顺便回了一...
  • cxwithyxy
  • cxwithyxy
  • 2014年12月08日 13:03
  • 932

java飞机游戏小项目

一、功能:1、实现键盘控制飞机超八个方向移动  2、碰撞事件   3、双缓冲技术消除屏幕闪烁问题     4、游戏等级的判断等等二、特点:1、本代码的结构合理清晰,重构得好(所以你会看到较多的包和工具...
  • liangyihuai
  • liangyihuai
  • 2015年09月15日 13:44
  • 1795
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于飞机射击类游戏的设计原理
举报原因:
原因补充:

(最多只允许输入30个字)