
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/codedoctor/article/details/53165019
本游戏是今年夏天暑假的一项选拔的大作业,记得当时用了差不多整整十天的时间,每天编程时间都在十二个小时左右。由于基础的不足,经历了很多的修改和重做。中间的不同版本记得一共有4个,第一个是完全的一整个主函数和一堆功能函数的设计,现在想起来还是有点好笑,当时完全没学过C++,也不太熟悉C++的面向对象的设计,还是在c的基础上思考问题。也是很尴尬,但幸好及时的悬崖勒马,花了一天看视频教程大致学完了C++的类和一些基本操作,才开始正式进行这个游戏。
做这款游戏的第一步就是思考这款游戏应该如何运行,Opencv是一个图像处理库,说白了就是一堆图像处理的函数和功能的总和,所有的物理碰撞,物体接触的实现都得依靠自己的计算和思考来实现,现在想起来不是很难,但当时着实花了很大的功夫才实现了马里奥和各种物体的碰撞。在实现碰撞的过程中,再给马里奥和各种怪物设计了重力因素,物体时时处于重力之下,又由于马里奥和地面的碰撞,让马里奥不会掉入地面。由于时间是几个月前做的东西,标准性等自然有很大的问题。只是希望能够记录一下自己的成长过程。talk is chaep ,show me the code。
由于当时还没有系统学习C++,所以多态封装这些东西都没怎么用
具体的类如下(全部都是public,没错):
具体有八个类,食人花,马里奥,墙,金币,工具类(主管碰撞的判断和图像的绘制),乌龟,背景,墙。
现在说一下几个最重要的类的具体实现:
马里奥类:
class CMario
{
public:
CMario();
~CMario();
void Draw( IplImage *tpd); int GetPosX();
int GetPosY();
void Move();
void GetNowImage();
int m_posX;
int m_posY;
bool m_isAlive;
int m_speed;
IplImage* m_img;
bool m_isDownWall;
bool m_right;
bool m_left;
bool m_isGround;
bool m_isUp;
int m_diraction;//马里奥现在所朝的方向
IplImage *m_l[4];//向左的动作
IplImage * m_r[4];//向右的动作
IplImage *m_jump[2];//跳跃;
int act;
int life;
int n_num;
int up_speed;
int gravity;
};
总调控类:
class CManager
{
public:
CManager();
~CManager();
void Start();
void Run();
void End();
void Is_Game_Over();
void Mario_Move();
void All0bj_Move();
void All_Collider();
void Refresh_Map();
void Gravity();
void Return_Go_On_Game();
void Draw_Changed_Map();
void Draw_Count_And_Life();
int Mario_meet_Stone (int x ,int y);</span>
private:
int Delta_Length;
int now_Game_Score;
vector<CTortoise*>::iterator ittor1;
vector<CFlower*>::iterator ittor2;
vector<CGold*>::iterator ittor3;
IplImage *BG_Clone;
CTools tools;
CMario mario;
CMapscene scene;
};
就这两个类吧。再多看下去,我担心自己会忍不住重新再写一遍这个程序,真的是处于每一天都看不起自己前一天的代码的成长期,不知道什么时候才会定下自己的写代码风格。
游戏画面如下:(没有指示界面,没有菜单,没有BOSS,hhh)
虽然这个游戏有很多的不完美和缺陷,比如类的设计非常的稚嫩,函数名变量名非常不规范,没有遵循封装的思想。
但是我很爱这个游戏,玩完这个游戏的时间只需要短短的几分钟,但做完这个游戏的过程让我很难忘,也很享受。记得那时候每天沉浸在代码的世界中,每天都在思考这个程序的各种设计,每个功能如何实现,某个BUG如何修改,怎样提高程序的运行效率和人物碰撞的判断的精确性,那时候时间过得真的很快,每天一低头打代码,抬头就去吃饭,吃饭的时候都想着如何完善自己的代码。单纯而且有效率,虽然这个程序现在看来有太多的不足,但是却是实现了我童年的愿望——做一款自己的游戏。
作为记录吧,就这样。
- 上一篇 【C++】vector的迭代器使用中出现的程序中断
- 下一篇 最近在做的一些事情