c++实例 超级玛丽(1)

发布时间:2024年01月12日

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、c++是什么?

C++
被广泛用于开发各种类型的软件,包括系统软件、应用程序、游戏开发、嵌入式系统等领域。由于其高性能和灵活性,它是许多大型软件项目的首选语言之一。

二、实现代码

1.引入头文件

#include<easyx.h>

用于 C/C++ 图形和 GUI 编程的头文件。 它是与 EasyX 图形用户界面库一起使用的 C++
库。该库提供了绘制基本形状、创建动画、处理键盘和鼠标输入以及构建简单图形应用程序的功能。<easyx.h> 头文件是 EasyX 库的一部分,通常用于在 Windows 平台上进行 C++ 图形编程。要使用 easyx.h,您需要在开发环境中安装 EasyX 库。然后,您可以编写 C++ 代码,使用 EasyX 函数来创建图形应用程序。

#include<conio.h>

用于控制台输入输出。在早期的MS-DOS和Windows编程环境中,<conio.h> 提供了一些函数和宏来实现控制台程序的输入和输出操作。

其中一些常见的函数和宏包括:

getch():从控制台获取一个字符,不回显到屏幕上。 getche():从控制台获取一个字符,并在屏幕上显示。 clrscr():清除控制台屏幕上的内容。 cprintf():按指定格式向控制台打印输出。 然而,<conio.h>不是标准C或C++的一部分,而是特定于某些编译器(如Microsoft VisualC++)和特定环境(如DOS或Windows)的。在许多现代的编译器和操作系统中,可能不再支持 <conio.h>中定义的这些特定函数和宏,因为这些函数和宏在非标准和特定的环境下使用。在现代的C++中,通常推荐使用标准库中的功能来代替 <conio.h> 中的函数。比如,使用 头文件可以进行控制台的输入和输出操作,使用 std::cin 和 std::cout 来替代 getch() 和 cprintf() 等函数。

2.宏定义

#define KEY_UP  72
#define KEY_DOWN  80
#define KEY_LEFT  75
#define KEY_RIGHT  77
#define KEY_ESC    27
---

这段代码是使用C/C++中的预处理器指令 #define
定义了一些常量。这些常量为特定的键盘按键码(键码值)定义了符号名称。这样做是为了提高代码的可读性和可维护性,以便在代码中使用这些符号名称来表示对应的键盘按键。这些值看起来与ASCII码中的一些特定值相对应,通常用于代表方向键(上、下、左、右)和一些特殊键(如ESC键)。在编写程序时,可以使用这些符号名称来检测键盘输入的相应按键,以便更容易地理解和管理代码。例如,在键盘事件处理中,可以使用这些定义的符号名称来检查用户是否按下了特定的键。

3.定义类

class Cperson
{
public://修饰符 表示公有的
	//坐标
	int m_x;
	int m_y;
	//用于和图片绑定的变量
	IMAGE m_imgUp;
	IMAGE m_imgDown;
	IMAGE m_imgLeft;
	IMAGE m_imgRight;
//在easyx图形库中,IMAGE是一个结构体,通常用于表示图像。它定义了一个用于存储图像信息的数据结构,可以用于加载、显示、处理和操作图像。该结构体包含了图像的宽度、高度、颜色深度以及图像数据等相关信息。 这个结构体通常用于easyx库中,用来创建、加载和操作图像,使得用户能够在窗口中绘制图像,实现简单的图形操作功能。
	//方向
	int m_direct;
public:
	Cperson()//构造函数 进行初始化
	{
		::initgraph(600,600);//初始化窗口
		::setbkcolor(RGB(255,255,255));//设置背景颜色为
		::cleardevice();//清除上一帧的内容
		//约定 窗口大小600*600
		m_x=300;
		m_y=300;
		//图片和变量做绑定关联
		::loadimage(&m_imgUp,L"./res/up.bmp");
		::loadimage(&m_imgDown,L"./res/down.bmp");
		::loadimage(&m_imgLeft,L"./res/left.bmp");
		::loadimage(&m_imgRight,L"./res/right.bmp");
		//从指定路径加载一张位图图片(通常是 BMP 格式的图片)到名为 m_imgUp 的 IMAGE 结构体中。L 前缀表示这是一个宽字符字符串(Unicode 字符串),"./res/up.bmp" 是图片的相对路径
		m_direct=KEY_RIGHT;//初始化方向
	}
	~Cperson()//析构函数
	{
		::closegraph();//关闭窗口
	}
	void showPeople() 
	{
		//根据方向键显示不同图片
		::BeginBatchDraw();//批量绘图
		::cleardevice();
		if(m_direct==KEY_UP) ::putimage(m_x,m_y,&m_imgUp);
		if(m_direct==KEY_DOWN) ::putimage(m_x,m_y,&m_imgDown);
		if(m_direct==KEY_LEFT) ::putimage(m_x,m_y,&m_imgLeft);
		if(m_direct==KEY_RIGHT) ::putimage(m_x,m_y,&m_imgRight);
		::EndBatchDraw();//结束批量绘图
	}
	void movepeople(int direct,int step)
	{
		if(direct==KEY_UP) m_y-step>=0? m_y-=step:m_y=0; //三目运算符
		if(direct==KEY_DOWN) m_y+step<=540? m_y+=step:m_y=540;//图片人物大小60
        if(direct==KEY_LEFT) m_x-step>=0? m_x-=step:m_x=0;
		if(direct==KEY_RIGHT) m_x+step<=540? m_x+=step:m_x=540;
		m_direct=direct;
    }
	void runpeople()
	{
		showPeople();
		while(1)
		{
             int key=_getch();//等待用户在控制台按下一个键,然后将按键对应的 ASCII 码或扩展键值存储在 key 变量中
			 movepeople(key,4);
			 showPeople();	
		}
	}
};

4.主函数

```cpp
int main()
{
	Cperson peo;
	peo.runpeople();
	return 0;
}

5.运行效果

在这里插入图片描述

三、总结

后续会继续更新,直到完成完整版超级玛丽项目

文章来源:https://blog.csdn.net/sd54321/article/details/135507105
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。