记第一次C语言大作业——基础版超级玛丽的诞生

——本篇转载自大佬Annevi的博客https://lwh.red

写在前面

看到C语言程序设计课的期末大作业中有“基于EasyX的绘图游戏的开发”这一项,所以就果断选择了这项既有挑战性又有趣的项目。

成员组成:Annevi、Adobie、Yuahwg (大佬带我写的

很久之前在筹划着写一个类似于【几何冲刺】的游戏,结果发现这个比较难以把控,而且网上资料较少,所以后来经过讨论还是决定进行【超级玛丽】这款经典古老的游戏,毕竟网上资料也比较多。

经过相关资料的查询和素材的收集,终于渐渐地有了思路……

相关资料

毕竟是第一次写这种比较“大”的项目,所以开始还是要上网搜索并借鉴别人的思路、想法。以下是参考代码: (由于大多是C++写的,所以也就参考个大致思路)

链接:https://pan.baidu.com/s/1mVraawV3xeOmKX5tVpQvCQ

提取码:vivp

复制这段内容后打开百度网盘手机App,操作更方便哦

链接:https://pan.baidu.com/s/19NBt9VmGxZ1tXCWFguTLzg
提取码:2vbs
复制这段内容后打开百度网盘手机App,操作更方便哦

需求分析

需要解决的问题

①搭建团队开发环境。

②学会使用EasyX图形库。

③游戏中对物体运动的物理轨迹的计算与处理。

④各个物体的碰撞判定(坐标法)。

⑤游戏开始菜单和死亡菜单的设计。

⑥运用状态机进行游戏状态的判断。

要求

①能够流畅的运行整个游戏程序。

②能够实现游戏的基本功能(跳跃,踩敌人,吃金币,统计分数)

③尽量精简代码,减少不必要的冗余代码,导致效率降低和卡顿。

④能够在开发的过程中学到新的知识,练习已经学会的知识。

各成员需要达成的目标

①Annevi:

完成游戏画面和游戏框架的整体设计,使程序能够正常的运行起来。

完成部分数据处理。

②Yuahwg:

    完成人物运动相关物理仿真效果的开发,加速度等 

完成部分数据的处理,敌人的运动等。

③Adobie:

     完成人物与地图物件各种触碰时的判定等。

     完成部分数据处理。

程序框图

比较水的框图,凑合一下233

详细设计

本程序分为:

main.h

MarieActionFunction.h

MarieDisplayFunction.h

Mdefine.h

main.cpp

MarieActionFunction.cpp

MarieDisplayFunction.cpp

七个文件组成(其中四个自定义的头文件 三个源文件)

各文件以及函数说明:

main.h :主要存放全局变量,包括全局结构体等的声明

Mdefine.h :主要用于宏定义常量

main.cpp :主函数文件,用于全局变量的初始化、程序整体框架流程控制。

MarieActionFunction.cpp:用于对相应函数的定义

MarieDisplayFunction.cpp:用于对相应函数的定义

MarieActionFunction.h :用于声明动作相关的动作函数

MarieActionFunction.h 中主要函数有:

void hero_move(); //控制左右移动
void HpSleep(int ms);  //精准延时模块
double shift_x(double *v,double t,double a);//计算人物位移加速度实现
double shift_y(double *v,double t,double a);//计算人物位移加速度实现
void judge(); //判断人物的状态,是否可运动,存活状态,是否得分等  

MarieDisplayFunction.h :用于声明显示相关的显示函数

void game_start();          //游戏开始主界面
void show();                //主显示函数
void game_show();           //游戏开始后显示的初始界面
void help_page();           //游戏操作说明界面
void introduction_Page();   //游戏简介界面
void gold_show();           //金币显示
void between_enemy_show(int i, double left, double right); //在两个水柱之间的敌人运动显示
void enemy_show(int i, int direction); //在正常情况下的敌人显示
void begin();               //载入图片、音乐等素材
void preload();             //预载入:变量初始化
void map_show();            //地图显示控制
void hero_die_show();       //人物死亡时的样子
void hero_die_menu_show();  //人物死亡之后的菜单
void brick_show();          //砖块显示
void flower_show();         //花的显示
void final_show();          //到达终点区域的相关物件显示
void score_show();          //分数显示
void develop_mode();        //开发调试模式,看变量状态     

函数相互调用关系:

1.main函数调用的函数有:

preload();              //预加载 初始化数据        
begin();                //开始前  
game_show();            //游戏初始界面
BeginBatchDraw();       //开始批量绘图       
hero_move();            //人物移动        
judge();                // 障碍判定等  
show();                 //显示画面
hero_die_show();        //人物死亡形象        
HpSleep(1000 * 3);      //等待死亡音乐播放完毕3.0s        
hero_die_menu_show();   //人物死亡效果显示
preload();              //初始化数据
EndBatchDraw();         //结束批量绘图
closegraph(); //关闭窗口  

2.game_show函数调用的函数有:

final_show();

3.begin函数调用的函数有:

game_start();

4.hero_move函数调用的函数有:

double shift_x(double *v,double t,double a);//计算人物位移,加速度实现
double shift_y(double *v,double t,double a);//计算人物位移,加速度实现
void HpSleep(int ms);  //精准延时模块

5.show函数调用的函数有:

map_show(); //地图显示    
develop_mode(); //开发模式    
flower_show(); //显示花    
gold_show(); //显示金币    
score_show(); //显示分数    
enemy_show(0, 0); //显示敌人    
enemy_show(1, 0); //显示敌人    
between_enemy_show(2, 1555, 1978); //显示敌人    
between_enemy_show(3, 2481, 2962); //显示敌人    
between_enemy_show(4, 3672, 4473); //显示敌人    
between_enemy_show(5, 4700, 5600); //显示敌人
brick_show(); //显示砖块

运行效果与测试:

OAOA

OAOA

文章作者信息...

2 Comments

  • image

    哇,大佬太强了(5毛一条)

  • image

    Nbnb 大佬操作

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐