冒险屠宰场游戏.doc
文本预览下载声明
冒险屠宰场游戏
冒险屠宰场是一个简单的迷宫式冒险类游戏。如图3.13 所示是冒险屠宰场游戏运行界面图。
图3.13 冒险屠宰场运行界面图
在游戏开始的时候,玩家可以选择羊、猪或者兔作为控制的精灵。在迷宫中,玩家要在避免被屠
夫抓住的同时吃掉屏幕中不断出现的食物——苹果、香蕉等。在吃掉了所有指定的食物后,迷宫中会
出现一把钥匙,玩家需要拿到这把钥匙,因为之后迷宫中还会出现一道门,拿到钥匙才能打开门。进
入门后,玩家就过关了。
要编译这个游戏,需要安装DirectX 8.0 SDK 或以上版本。事实上,8.0 的版本要求并不是绝对的,
因为在这个游戏中并没有使用到特别的8.0 版本中的API。不过要想在低版本上运行这个程序就必须
修改Dinput 代码。这个游戏运行于1024?768 分辨率下。
3.6.1 系统框架设计
在这个游戏中,有11 个核心类和一个核心结构。这些类和结构构成了游戏的框架。
class CDisplay;
class CSurface;
class CSoundManager;
class CSound;
class CStreamingSound;
class CWaveFile;
class cKeyboard;
class cMouse;
class CSprite;
class CSpriteManager;
class CMaze;
struct SHandleInput
其中类CDisplay、CSurface、CSoundManager、CSound、CStreamingSound 和CWaveFile 是DirectX
8.0 SDK 中提供的类。这里直接将这些类抽取出来。
CDisplay 类用来处理所有DDraw 显示方面的内容,包括前台页面和后台页面的创建,离线屏幕和
调色板的创建以及页面绘制和位图显示。
CSurface 类用来处理所有DirectDrawSurface 方面的内容。
CSoundManager 用来管理声音设备。而CSound 类封装了DirectSound 的缓冲功能。CWaveFile 封
装了从波形文件中读取和写入声音数据。CStreamingSound 封装了DirectSound 播放波形文件的功能,
第3 章2D 游戏开发109
它的Create 函数负责载入一块波形文件到缓冲区,声音播放的时间越长,被写入的缓冲区越大。
cKeyboard 类是键盘输入的接口。cMouse 类是鼠标输入的接口。
CSprite 是精灵类,而CSpriteManager 是精灵管理类,CSpriteManager 类是一个可选的类。在这个
游戏中,玩家控制的精灵就是直接通过CSprite 管理的,而没有使用CSpriteManager。但是对于敌人(屠
夫)精灵使用CSpriteManager 进行管理。
CMaze 是关卡类,即地图类,这里是一种迷宫类。
SHandleInput 结构继承自iKeyboardReceiver 类,它负责处理用户的键盘输入。
3.6.2 程序框架设计
WinMain 函数控制了整个程序的运行流程。WinMain 初始化所有的内容,当消息队列为空时,即
CPU 处于Idle 状态时,调用UpdateFrame 函数更新每一帧。
int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int
nCmdShow )
{
MSG msg;
HWND hWnd;
HACCEL hAccel;
//设置当前时间为随机种子
srand( GetTickCount() );
wsprintf((char*)g_szGameStatus, (char*)GAMESTATUS_TEXT,0,0);
wsprintf((char*)g_szLifeLeft, (char*)LIFE_LEFT_TEXT,g_nLivesLeft -1);
wsprintf((char*)g_szScore, (char*)GAMESCORE_TEXT,g_nScore);
g_hInstance = hInst;
char szName[200];
//载入关卡配置信息
std::fstream LevelData(config.txt,std::ios::in );
//略过第一行内容
LevelData.getline(szName,200);
// 读入关卡数
LevelData g_nNoOfLevels; // Number of Horizontal rows
g_pLevel = new SLEVEL[g_n
显示全部