基于C++与Opencv制作的简单马里奥游戏

标签: c++-opencv
2119人阅读 评论(0) 收藏 举报
分类:

本游戏是今年夏天暑假的一项选拔的大作业,记得当时用了差不多整整十天的时间,每天编程时间都在十二个小时左右。由于基础的不足,经历了很多的修改和重做。中间的不同版本记得一共有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>
privateint                          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++语言写游戏——打飞机

想玩游戏吗? 就到某位神犇这来吧! 这会告诉你很多游戏写法! 今天,神犇就开始书写第三期——打飞机!!! 很容易,只需要用脑袋想想即可,READY——GO! 我也希望大家多多捧场哦~~~...
  • cnyali_ljf
  • cnyali_ljf
  • 2016-05-07 22:03:13
  • 25273

c++制作小游戏--雷电

最近无聊,于是用c++实现了一个小游戏--雷电,貌似运行的还不错,贴图和声效也是Duang!Duang!的。整个项目我也会给出下载链接,有兴趣的可以编译运行一下,用到了C++11的新特性,最好是使用v...
  • kyt511
  • kyt511
  • 2015-07-01 10:05:18
  • 3892

visual C++游戏绘图之透明效果制作原理

作者:晋文格墨    邮箱: chairperson@sina.cn    欢迎邮件交流编程心得 从这节开始我们来讲解制作一般2D游戏画面经常要使用到的绘图特效。 笔记六我们主要介绍“透明...
  • xiebaochun
  • xiebaochun
  • 2013-11-19 11:12:48
  • 2338

C++小游戏——走迷宫

大家想不想成名,那就一步步来吧,先写一些小游戏热热身。 下载地址 主程序代码:#include #include #include #include #include #include using...
  • hh_cnyali
  • hh_cnyali
  • 2016-07-15 11:53:49
  • 6013

贪吃蛇小游戏—C++、Opencv编写实现

贪吃蛇游戏,C++、Opencv实现 设计思路: 1.显示初始画面,蛇头box初始位置为中心,食物box位置随机 2.按随机方向移动蛇头,按a、s、d、w键控制移动方向,分别为向左,向下,向右,向上 ...
  • dcrmg
  • dcrmg
  • 2016-08-01 00:31:21
  • 1959

利用OpenCV做的摄像头互动游戏以及源代码

注:这个例子是从中国数字艺术在线上面看到的,没有做过调试,转载于此,仅仅是作为一个应用参考,供大家欣赏。原文的出处是: http://www.cgblog.com.cn/e/DoPrint/?clas...
  • yangdelong
  • yangdelong
  • 2007-08-14 11:58:00
  • 2037

利用OpenCV做的摄像头互动游戏

      最近看到有人用flash和摄像头做了一个互动游戏觉得很好玩,就 利用OpenCV的库函数和VC仿照也做了个类似的呵呵。效果不是很好,拿出来献丑了。下面介绍一下,电脑上连接一个摄像头,启动程...
  • xylary
  • xylary
  • 2007-02-09 12:41:00
  • 5369

90年代经典“手游”—拼图板小游戏Opencv实现

80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也...
  • dcrmg
  • dcrmg
  • 2016-07-29 22:16:56
  • 2267

使用C++超级玛丽制作-100%源码公开-不用钱o

  • 2010年04月18日 19:59
  • 1.25MB
  • 下载

超级玛丽(超级马里奥)游戏源码 c++

  • 2010年05月29日 16:42
  • 1.48MB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 880
    排名: 5万+
    文章分类