吃金豆游戏的分析与设计
更新时间:2023-10-21 11:12:01 阅读量: 综合文库 文档下载
- 吃金豆游戏推荐度:
- 相关推荐
三、吃金豆游戏的分析与设计
1、游戏功能分析
(1) 游戏基本功能:
游戏屏幕是一个 NxN 的网格,其中某些格子是固定的墙壁,其他网格是可以通行的,开始的时候放满了金豆。游戏开始后,玩家通过键盘的方向键控制游戏主角PACMAN移动,经过的地方,金豆被吃掉,同时加分。游戏屏幕上还有一个怪物,它会随机地移动。PACMAN如果碰到怪物,游戏失败。如果吃掉了全部金豆,则游戏成功。
(2) 游戏场景(即墙壁和金豆的位置,PACMAN与怪物的初始位置等信息)是从文件 scene.txt 中读到的。格式如下:
10,10 //(10,10)代表场景总的行,列数
1111111111 //第一行,10列,其中1表示墙;0表示金豆 1A11100001 //第二行中’A’代表PACMAN的初始位置 1000101101 1110101101 1000000101 1011011101 1011010001 1011000101
1M000100M1 //这一行中的’M’代表一个MONSTER的初始位置,二个M代表两个妖怪 1111111111
数据文件对应的游戏场景如下图所示:
2、游戏出现的各个对象:
Empty Scene Pacman Bean Monster Wall
分析:一个场景分成N 行N列的小Cell,每个Cell有行,列等属性。 Pacman,Monster,Bean,Wall,Empty又可看作是一个特殊的Cell。Pacman和Monster是可运动的,而Bean和Wall是静止的,此外它们场景在绘出来的图像也各不相同。
2.1数据结构的定义:
(1)静止的Cell,分为三种类型,定义如下: #define EMPTY 0 #define WALL 1 #define BEAN 2 #defien CELL_SIZE 32
typedef struct{
int kind; /*Cell的类型*/ int row; int col; }Cell;
与Cell相关的函数定义:
void drawCell(Cell t){ /*画出一个Cell*/ switch(t.kind){
case EMPTY: draw_empty(t);break; case WALL: draw_wall(t);break; case BEAN: draw_bean(t);break; } }
void draw_empty(Cell t); void draw_wall(Cell t); void draw_bean(Cell t);
(2)场景是由M*N个Cell构成的,场景定义如下: #define MAX_ROLS 30 /*最大行数*/ #define MAX_COLS 30 /*最大列数*/ int rols; /*实际总行数*/ int cols; /*实际总列数*/
int scene_left; /*场景左上角的坐标*/ int scene_top;
Cell scene[MAX_ROLS][MAX_COLS]; /*用一个元素为Cell的二维数组代表场景*/
与场景相关的函数定义:
void loadScene(char *fileName); /*从文件加载场景至scene数组*/ void drawScene(void); /*画出场景*/
(3) Pacman和Monster都游戏中可运动的的角色(Actor),其结构定义如下:
#define RIGHT 0 #define UP 1 #define LEFT 2 #define DOWN 3 #define TRUE 1 #define FALSE 0 typedef struct{ int row; int col;
int direction; /*运动的方向*/ int isLive; /*是否活着*/ }Actor;
与Actor相关的函数定义: 1)角色pacman
void drawPacman(void); /*画pacman*/
void turn_pacman(int key_code); /*根据玩家方向按键调整pacman的运动方向*/ void move_pacman(); /*pacman移动*/ 2)角色monster
void drawMonster(void); /*画妖怪*/ void move_monster(void); /*妖怪移动*/
3、功能模块的划分
使用自顶向下、逐步求精的模块法设计该程序,可以将问题分解为3个部分: (1)游戏初始化 (2)开始玩游戏 (3)结束处理
每个方面包括一个模块,根据上述思路,我们可以划分程序结构如下: void main(){
init(); //初始化
gamePlay(); //游戏循环 closeGame(); //结束处理 }
1)初始化游戏 void init(){
.初始化图形模式
.初始化随机数发生器(作用见后述) .游戏场景加载(从文件中读取) .计算场景左上角的坐标 .画场景 }
2)结束处理
void closeGame(){
closegraph(); /*关闭图形模式*/
}
3)玩游戏的算法(核心) void gamePlay(){
while(游戏未结束时){ if(如果没有键按下){ draw_pacman(); draw_monster();
判断pacman所在的位置有没有金豆,有则吃掉; if(金豆全吃完) break;
delay(500); //延时一段时间; move_pacman();
if(pacman被吃) break; move_monster();
if(pacman被吃) break;
}else{
捕获按下的键;
根据按键调整pacman的运动方向 } } }
4、功能模块逐步求精
1、游戏场景加载(从文件中读取) void loadScene(char *fileName){ 打开记录场景的文件; 逐行读取数据,完成:
场景rows,cols的记录 scene数组的初始化 金豆数量的统计等等
}
2、pacman移动算法: void move_pacman(){ if(下一位置可达){
清除掉当前位置pacman;
将下一位置做为pacman的新位置; } }
求精:下一位置是否可达?
int is_forwardable(Actor *actor){ Cell t;
t = nextCell(actor); //求actor下一个要去的Cell
return is_reachable(t.row,t.col); //指定行和列的位置是否可达 }
int is_reachable(int row,int col){
if(行或列超出范围)
return FALSE;
switch(scene[row][col].kind){ case BEAN: case EMPTY:
return TRUE; default:
return FALSE; } }
3、画pacman和monster
void draw_pacman(void); //略 void draw_monster(void); //略
4、monster移动算法:
正在阅读:
吃金豆游戏的分析与设计10-21
杜兰大学与佛蒙特大学哪个好03-16
地基处理技术-郑俊杰-华中科技大学出版社(第二版)课后答案01-22
《谁在那儿,小玻?》05-31
07-09年高考理科数学真题演练分类解析:直线、平面垂直的判定与性质09-12
(免费)2010年湖南常德中考数学试题(word)06-05
“十三五”重点项目-磁医疗器具项目可行性研究报告 - 图文10-30
2019届 2019版高考地理一轮(全国通用版):4.4水资源对人类生存03-31
市军供站现状及今后发展趋势01-22
家庭农场简介01-10
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 金豆
- 分析
- 设计
- 游戏
- 2018-2019最新人教新课标高中英语必修四:unit3 Word power 教案
- 吸水3分钟长大近40倍 防汛吸水膨胀袋
- 人力资源开发与管理第3阶段测试题3b
- 2018年山东省济南市高新区中考物理二模试卷和答案
- 2017年杭州市星级酒店经营数据分析 - 图文
- 苯罐区消防安全设计实例
- 2018版中国粉底霜行业发展趋势及竞争策略研究报告目录
- 报价后客户不回复怎么办
- 江苏专用2019版高考地理二轮复习专题过关检测九资源与环境含解析
- 幸福学校实施方案
- 地铁火灾自动报警系统(fas)方案设计
- 皮革制造废水处理技术 - 图文
- 微后坐力自动炮转膛机构设计
- 网络数据库系统开发自测2015 pxx答案
- 人教版二年级数学下册第1课时 平均分(1)(导学案) - 图文
- 华为AR1220-S配置命令
- The importance of English in business negotiation
- 八年级数学上册-考点训练:多项式乘多项式-课后练习
- 附录 氨分解炉操作手册
- 循证医学在住院医师规范化培养教学中的应用研究