【游戏程序设计】完整二维游戏开发-飞机大战

学习了前面的许多知识,现在可以真正做个可以玩的游戏了。

之前是用MFC做的飞机大战,但是有许多的问题。这次我们用Win32程序来开发,所有的代码都是自己写成的,可以控制更多的细节。这次的游戏就没有之前崩溃的问题了,并且绘制血条也很简单,直接GDI绘图完成。具体实现的时候没有用面向对象的思想,完全是面向过程的,感觉自己写的太臃肿了。事后想想如果是大型游戏的话这样肯定不行,还好规模小。先看下效果把。

游戏多个关卡,多个boss,多种道具,可玩行还可以吧。跟之前的差不太多。

运行环境:vs2010

此游戏为飞机大战,胜利条件为玩家消灭最终boss,失败条件为玩家被消灭。

游戏玩法:

开始界面:点击鼠标进入普通模式,按下空格键进入无敌模式,按下Esc键退出游戏。

游戏界面:玩家鼠标控制飞机的移动与射击,A键发射激光,S键使用防护罩,按下Esc键退出游戏,P键暂停。

结束界面:鼠标点击返回主界面回到开始界面。

主要使用技术的实现方式和对应的代码:

血条:使用GDI绘图函数进行绘制,主要使用了Rectangle函数和CreateSolidBrush。

镂空贴图:使用了TransparentBlt完成镂空贴图。TransparentBlt在贴图时可以把源位图中的某种颜色设定为透明色,这样与背景融合时就可以将源位图的部分像素隐藏掉。

位图显示:从文件中加载位图建立与窗口DC兼容的内存DC,内存DC装载创建好的位图对象,将内存DC的内容映射到窗口DC中以完成显像操作

动画:用连续贴图的方法完成动画,通过消息循环的方法

鼠标与键盘交互:通过消息循环实现键盘鼠标与游戏的交互。

子弹与道具运动:

运动物体的速度保持不变,每次画面更新,利用物体速度

计算下次物体出现的位置,产生物体移动的效果。

碰撞检测:框架检测碰撞,使用物体贴图的外围表示方框,

只要检测其中一个矩形的 四个定点是否在另一个矩形内即可。

源代码:

#include <windows.h>
#include <tchar.h>
#pragma comment(lib, "winmm.lib")									//调用PlaySound函数所需库文件t
#pragma comment(lib, "Msimg32.lib")

#define WINDOW_WIDTH 500
#define WINDOW_HEIGHT 700
#define WINDOW_TITLE L"飞机大战"
const int SceneNum = 5;												//关卡数
const int BulletSpeed = 10;											//子弹速度
const int GoodsSpeed = 6;											//道具速度
const int BulletNum = 3;											//子弹种类
const int LaserNum = 2;												//激光种类
const int MaxEnemyCount = 30;										//最大敌机数目
const int MaxBulletCount = 100;										//最大子弹数目
const int MaxLaserCount = 20;										//最大激光数目
const int MaxExplosionCount = 40;									//最大特效数目
const int MaxBuffTime = 30;											//最大双倍弹药时间
const int MaxProtectedTime = 30;									//最大防护罩时间
const int BossCreateTime = 1;										//boss创建时间
const int BackGroundSpeed = 5;										//背景滚动速度
//玩家弹道间隔距离数组(单倍,双倍弹药)
const int IntervalP[2][10] =										
{
	{19,38},
	{0, 19, 38, 57}
};
//敌机、Boss弹道间隔距离数组
const int IntervalE[6][10] =										
{
	{15,65},
	{35,70,110},
	{15,45,90,120},
	{12,100},
	{15,60,105,150,195,240},
	{16}
};
//飞机
struct Plane
{
	int x, y;												//位
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值