c++超级马里奥练习(面向对象的思维)

c++超级马里奥练习(面向对象的思维)

一.我们首先要了解一下对象都有什么

c++超级马里奥练习(面向对象的思维)_第1张图片

从图中我们可以看出对象只有“马里奥”这一个对象

二.我们用类写出这个对象的属性和行为

如下代码

#include 
#include 
#include 
using namespace std;

#define DIRECT_UP 72
#define DIRECT_DOWN 80
#define DIRECT_LEFT 75
#define DIRECT_RIGHT 77
#define ESC_KEY 27

#define MOVE_SIZE 5
class CMali{//一般类名都是以大写的C带头
public:
    int m_x;//位置,一般类中的变量都以m开头
    int m_y;
    
    int m_dir;
    IMAGE m_up;
    IMAGE m_down;
    IMAGE m_left;
    IMAGE m_right;
    
public:
    CMali(){
        
        ::initgraph(600,600);//创建一个窗口
        ::setbkcolor(RGB(255,255,255));//设定背景色
        ::cleardevice();//立即生效
        m_x = 300;//初始位置
        m_y = 300;//初始位置
        
        int dir=DIRECT_RIGHT;
        ::loadimage(&m_up,L"./res/res/mali-up.bmp");//这里是相对路径,前面要加一个L。
        ::loadimage(&m_down, L"./res/res/mali-down.bmp");
	    ::loadimage(&m_left, L"./res/res/mali-left.bmp");
	    ::loadimage(&m_right, L"./res/res/mali-right.bmp");
    }
    
    ~CMali(){
        ::closegraph();//清理申请的空间
    }
    
    void show(){
        ::BeginBatchDraw();
        
        ::cleardevice();
        m_dir==DIRECT_UP? ::putimage(m_x,m_y,&m_up):void(0);
        m_dir == DIRECT_DOWN ? ::putimage(m_x, m_y, &m_down) : void(0);
		m_dir == DIRECT_LEFT ? ::putimage(m_x, m_y, &m_left) : void(0);
		m_dir == DIRECT_RIGHT ? ::putimage(m_x, m_y, &m_right) : void(0);
        
        ::EndBatchDraw();
    }
    
    void move(int dir){
        switch(dir){
            case DIRECT_UP:
          {
                m_y-MOVE_SIZE>=0?m_y-=MOVE_SIZE:m_y=0;
                m_dir=DIRECT_UP;
                break;
            }
            case DIRECT_DOWN: 
		{
			m_y + MOVE_SIZE <=540 ? m_y += MOVE_SIZE : m_y = 540;
			m_dir = DIRECT_DOWN;
			break;
		}
		case DIRECT_LEFT: 
		{
			m_x - MOVE_SIZE >= 0 ? m_x -=  MOVE_SIZE : m_x = 0;
			m_dir = DIRECT_LEFT;
			break;
		}
		case DIRECT_RIGHT:
		{
			m_x + MOVE_SIZE <= 540 ? m_x += MOVE_SIZE : m_x = 540;
			m_dir = DIRECT_RIGHT;
			break;
		}
		default:
			break;    
        }
	}
    
    void run(){
        show();
        while(1){
            int key=_getch();
            if(key==ESC_KEY){
                
                ::MessageBox(nullptr, L"即将退出", L"提示", MB_OK);
                break;
            }
            move(key);
            show();
            Sleep(10);
        }
    }
};

三.在主函数中创建对象并调用对象中的函数

int main() {

	CMali peo;
	peo.run();

	return 0;
}

你可能感兴趣的:(c++)