C++基础篇 Day5

文章展示了一个用C++编程语言,结合EasyX图形库开发的超级玛丽角色移动的实践。代码定义了方向常量、移动步长,以及类Mali来处理角色的位置、图像加载和移动。程序通过键盘输入控制角色上下左右移动,并在窗口中显示。当按下ESC键时,程序退出。
摘要由CSDN通过智能技术生成

超级玛丽的练习

#include<easyx.h>
#include <conio.h>
#define DIRECT_UP 72
#define DIRECT_DOWN 80
#define DIRECT_LEFT 75
#define DIRECT_RIGHT 77
#define MOVE_STEP 5
#define ESC_KEY 27
class Mali
{
public:
	int m_x;
	int m_y;
	int m_direct;

	IMAGE m_up;
	IMAGE m_down;
	IMAGE m_left;
	IMAGE m_right;
public:
	Mali()
	{
		//创建窗口
		::initgraph(600,600);
		//设定窗口颜色为白色

		setbkcolor(RGB(255, 255, 255));
		::cleardevice();

		m_x = 300;
		m_y = 300;
		m_direct = DIRECT_RIGHT;
		//加载图片
		::loadimage(&m_up, L"./res/mali-up.bmp");
		::loadimage(&m_down, L"./res/mali-down.bmp");
		::loadimage(&m_left, L"./res/mali-left.bmp");
		::loadimage(&m_right, L"./res/mali-right.bmp");
	}
	~Mali()
	{
		::closegraph();
	}
	void Show()
	{
		::BeginBatchDraw();
		::cleardevice();
		m_direct == DIRECT_UP ? ::putimage(m_x, m_y, &m_up):void(0);
		m_direct == DIRECT_DOWN ? ::putimage(m_x, m_y, &m_down) : void(0);
		m_direct == DIRECT_LEFT ? ::putimage(m_x, m_y, &m_left) : void(0);
		m_direct == DIRECT_RIGHT ? ::putimage(m_x, m_y, &m_right) : void(0);
		::EndBatchDraw();
	}
	void Move(int direct)
	{
		switch (direct)
		{
		case DIRECT_UP:
		{
			m_y - MOVE_STEP >= 0 ? m_y -= MOVE_STEP : m_y = 0;
		}
		break;
		case DIRECT_DOWN:
		{
			m_y + MOVE_STEP <= 540 ? m_y += MOVE_STEP : m_y = 540;
		}
		break;
		case DIRECT_LEFT:
		{
			m_x - MOVE_STEP >= 0 ? m_x -= MOVE_STEP : m_x = 0;
			
		}
		break;
		case DIRECT_RIGHT:
		{
			m_x + MOVE_STEP <= 540 ? m_x += MOVE_STEP : m_x = 540;
		}
		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()
{
	Mali mali;
	mali.Run();

}

26084af2e1be4e97939e115df37651b0.bmp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值