关闭

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

标签: c++-opencv
1765人阅读 评论(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如何修改,怎样提高程序的运行效率和人物碰撞的判断的精确性,那时候时间过得真的很快,每天一低头打代码,抬头就去吃饭,吃饭的时候都想着如何完善自己的代码。单纯而且有效率,虽然这个程序现在看来有太多的不足,但是却是实现了我童年的愿望——做一款自己的游戏。

作为记录吧,就这样。

3
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

OpenCV做飞机射击类游戏(一)

1.OpenCV的配置: 要求: Win7  Win8  Win10系统。 opencv的安装路径为默认。 电脑为 64 位。 1.安装Opencv1.0和VC6.0++ : VC6.0++的安装路径...
  • lishuzhai
  • lishuzhai
  • 2016-04-23 17:09
  • 4036

C++超级马里奥的游戏

  • 2011-03-01 18:31
  • 7.42MB
  • 下载

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

  • 2010-05-29 16:42
  • 1.48MB
  • 下载

超级玛丽游戏 C++简单实现

超级玛丽游戏 C++简单实现 今天的过了两天后的 超级玛丽游戏,妈妈破门而入,就是让小麻雀每天跳十次悬崖,小麻雀能飞了,正看到林肯选举议员的部分,不敢多说,让你无法忘怀,大约可以飞4米了,合唱获得成功...
  • i_like_cpp
  • i_like_cpp
  • 2013-04-06 09:04
  • 3005

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

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

基于OpenCV的小游戏(源码)

  • 2013-07-29 18:56
  • 6.48MB
  • 下载

【第一篇:C++与opencv】图片的读取和显示

这里介绍C++版本的opencv,和C语言版本有些不同,先看代码^_^ 【编译环境:opencv2.4.4和VS2008】 #include "stdafx.h" #include "opencv2/...
  • liuyongshui4979
  • liuyongshui4979
  • 2013-11-18 22:21
  • 3178

【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析

这篇文章中,我们将详细而深入地弄懂入门OpenCV2最基本的问题,那就图像的载入,显示和输出。PS:在文章末尾提供了博文配套程序原代码的下载。 依然是先看一张运行截图: 了解过之前老版本OpenCV的...
  • zhmxy555
  • zhmxy555
  • 2014-03-05 15:47
  • 225114

C++ opencv快速例子学习——读图显示

opencv快速学习
  • u012192662
  • u012192662
  • 2014-07-11 10:42
  • 3556

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

80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也...
  • dcrmg
  • dcrmg
  • 2016-07-29 22:16
  • 1974
    个人资料
    • 访问:19889次
    • 积分:768
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:2篇
    • 译文:1篇
    • 评论:0条
    文章分类