【C/C++】使用类和对象 练习EasyX图形库

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • 一、创建类
  • 二、构造、析构函数
  • 三、基本功能
  • 四、运行结果
  • 图片资源
  • 全部完整代码

在之前的文章中使用C语言完成过几个基于EasyX图形库的小项目

【c语言】游戏项目——贪吃蛇、俄罗斯方块等

介绍过类和对象后,本文将通过类和对象的角度再次使用EasyX图形库,进行简单的练习,封装一个游戏人物—属性、行为等

一、创建类

将游戏人物—超级玛丽封装成类,定义人物的横纵坐标和面朝方向,代表人物在画面中的位置和状态

class CMary
{
public:int m_x;int m_y;int m_direct;	//四个方向//表示图片的变量IMAGE m_up;IMAGE m_down;IMAGE m_left;IMAGE m_right;
};

二、构造、析构函数

使用构造函数将程序窗口、窗口背景、人物坐标进行初始化

	CMary()		//构造函数用于初始化{//创建窗口 大小600*600::initgraph(600, 600);		// ::取全局作用域,最好加上:: 防止同名函数的混淆//设定窗口背景色为 白色::setbkcolor(RGB(255, 255, 255));::cleardevice();//初始化最初位置为 中间m_x = 300;m_y = 300;m_direct = DIRECT_RIGHT;}

加载图片资源也写到构造函数中(图片资源放在文末)

需要在工程文件目录下创建pic文件夹,将图片资源保存其中

		//加载图片(表示图片的变量和具体的图片资源绑定)::loadimage(&m_up, L"./pic/mary-up.bmp");		//相对路径		L:转码::loadimage(&m_down, L"./pic/mary-down.bmp");::loadimage(&m_left, L"./pic/mary-left.bmp");::loadimage(&m_right, L"./pic/mary-right.bmp");

析构函数用来回收额外的内存空间,关闭窗口

	~CMary()	//析构函数 回收{::closegraph();	//关闭窗口}

三、基本功能

基本功能包括显示人物、人物移动、运行程序的函数

通过EasyX图形库提供的函数进行绘图,定义Show()函数用来显示人物

	//显示人物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);settextstyle(20, 0, _T("宋体"));settextcolor(RGB(0, 0, 255));outtextxy(40, 390, L"天喜Studio");::EndBatchDraw();	//结束批量绘图}

定义Move()函数用来控制人物的移动,并且根据选择的方向不同进行不同方向的移动

在移动时根据窗口大小限制人物,防止任务移动到窗口外

	//人物移动void Move(int direct){switch (direct){case DIRECT_UP:{/*if (m_y - MOVE_STEP >= 0){m_y -= MOVE_STEP;}else{m_y = 0;}*/m_y - MOVE_STEP >= 0 ? m_y -= MOVE_STEP : m_y = 0;m_direct = DIRECT_UP;break;}case DIRECT_DOWN:{//下边界: 图片尺寸大小 60	600-60=540m_y - MOVE_STEP <= 540 ? m_y += MOVE_STEP : m_y = 540;m_direct = DIRECT_DOWN;break;}case DIRECT_LEFT:{m_x - MOVE_STEP >= 0 ? m_x -= MOVE_STEP : m_x = 0;m_direct = DIRECT_LEFT;break;}case DIRECT_RIGHT:{//右边界: 图片尺寸大小 60	600-60=540m_x - MOVE_STEP <= 540 ? m_x += MOVE_STEP : m_x = 540;m_direct = DIRECT_RIGHT;break;}}}

定义Run()运行函数,用于获取用户按下的键盘信息(通过控制台)

并根据方向键进行人物的移动,不断进行刷新显示,实现动态画面

//运行void Run(){Show();		//初始显示while (1){//不断获取键盘信息:按下的方向键int key = _getch();if (key == ESC_KEY){::MessageBox(nullptr, L"退出游戏?", L"提示", MB_OK);break;}Move(key);	//根据方向键移动人物Show();//更新显示Sleep(10);}}

主函数

主函数中只需要使用CMary人物类创建一个对象m,通过调用类中的Run()函数开始执行程序

int main()
{CMary m;m.Run();	//运行return 0;
}

四、运行结果

在这里插入图片描述

图片资源

mary-down.bmp

在这里插入图片描述

mary-left.bmp

在这里插入图片描述

mary-right.bmp

在这里插入图片描述

mary-up.bmp

在这里插入图片描述

全部完整代码

直接复制代码并配置图片路径就能执行:

#include <conio.h>#include <easyx.h>
#include <windows.h>
//宏定义四个方向:
#define DIRECT_UP   72
#define DIRECT_DOWN 80
#define DIRECT_LEFT 75
#define DIRECT_RIGHT 77#define MOVE_STEP 5
#define ESC_KEY 27class CMary
{
public:int m_x;int m_y;int m_direct;	//方向IMAGE m_up;IMAGE m_down;IMAGE m_left;IMAGE m_right;public:CMary()		//构造函数用于初始化{//创建窗口 大小600*600::initgraph(600, 600);		// ::取全局作用域,最好加上:: 防止同名函数的混淆//设定窗口背景色为 白色::setbkcolor(RGB(255, 255, 255));::cleardevice();//初始化最初位置为 中间m_x = 300;m_y = 300;m_direct = DIRECT_RIGHT;//加载图片(表示图片的变量和具体的图片资源绑定)::loadimage(&m_up, L"./pic/mary-up.bmp");	//相对路径		L:转码::loadimage(&m_down, L"./pic/mary-down.bmp");::loadimage(&m_left, L"./pic/mary-left.bmp");::loadimage(&m_right, L"./pic/mary-right.bmp");}~CMary()	//析构函数 回收{::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);settextstyle(20, 0, _T("宋体"));settextcolor(RGB(0, 0, 255));outtextxy(500, 570, L"天喜Studio");::EndBatchDraw();	//结束批量绘图}//人物移动void Move(int direct){switch (direct){case DIRECT_UP:{/*if (m_y - MOVE_STEP >= 0){m_y -= MOVE_STEP;}else{m_y = 0;}*/m_y - MOVE_STEP >= 0 ? m_y -= MOVE_STEP : m_y = 0;m_direct = DIRECT_UP;break;}case DIRECT_DOWN:{//下边界: 图片尺寸大小 60	600-60=540m_y - MOVE_STEP <= 540 ? m_y += MOVE_STEP : m_y = 540;m_direct = DIRECT_DOWN;break;}case DIRECT_LEFT:{m_x - MOVE_STEP >= 0 ? m_x -= MOVE_STEP : m_x = 0;m_direct = DIRECT_LEFT;break;}case DIRECT_RIGHT:{//右边界: 图片尺寸大小 60	600-60=540m_x - MOVE_STEP <= 540 ? m_x += MOVE_STEP : m_x = 540;m_direct = DIRECT_RIGHT;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()
{CMary m;m.Run();	//运行return 0;
}

在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1792.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马微信小程序-实现本地服务九宫格并展示商品列表

一、九宫格实现 1.获取数据 1.1准备接口 黑马接口&#xff1a;https://applet-base-api-t.itheima.net/categories 说明&#xff1a;这是获取九宫格的数据接口 1.2使用接口 说明&#xff1a;声明变量获取数据。 getGridList() {wx.request({url: https://applet-base-api-t.…

ECS云服务器U实例评测,可以免费体验哦

目录 一、ECS云服务器U实例介绍 话题一、U实例使用体感如何&#xff0c;是否和主售型实例有区别&#xff0c;具体体现在哪里&#xff1f; 话题二、结合相关数据材料&#xff0c;对您感兴趣的场景 话题三、使用u实例是否为您的云上业务或者测试项目提供了帮助支持&#xff1…

Qgis加载在线XYZ瓦片影像服务的实践操作

目录 背景 一、XYZ瓦片相关知识 1、xyz瓦片金字塔 2、 瓦片编号 3、瓦片访问 二、在Qgis中加载在线地图 1、Qgis版本 2、瓦片加载 3、地图属性预览 总结 背景 在做电子地图应用的时候&#xff0c;很常见的会提到瓦片&#xff08;tile&#xff09;的概念&#xff0c;瓦片…

Redis系列 | 分类树查询功能如何从2s优化到0.1s

大家好&#xff0c;今天我们继续来分享一个在项目开发过程中遇到的实际问题&#xff0c;这里也来梳理并总结一下我们是如何对它进行持续优化的&#xff0c;希望能对大家有所帮助。 分类树查询功能&#xff0c;在各个业务系统中可以说随处可见&#xff0c;特别是在一些电商系统中…

国产chatgpt:基于chatGLM微调nlp分类任务

文章目录 一、源码网址1. 硬件设施&#xff1a;2. INT4 量化示例 二、重要的开源社区功能&#xff1a;网址&#xff1a;使用方法&#xff1a;利用方法&#xff1a;对 NLP 工作者的作用&#xff1a;对大模型工程师的用处&#xff1a; 三、重要的开源库四、提示词工程五、进行分类…

线性代数笔记整理

文章目录 1 行列式2 矩阵&#xff08;本质是数表&#xff09;3 方程组的解4 向量5 矩阵的特征值和特征向量6 相似矩阵和相似对角化7 合同对角化8 二次型及其标准型 1 行列式 2 矩阵&#xff08;本质是数表&#xff09; 3 方程组的解 4 向量 5 矩阵的特征值和特征向量 6 相似矩阵…

从0到1精通自动化测试,pytest自动化测试框架,skip跳过用例(八)

一、前言 pytest.mark.skip可以标记无法在某些平台上运行的测试功能&#xff0c;或者希望自己失败的测试功能 skip意味着只有在满足某些条件时才希望测试通过&#xff0c;否则pytest应该跳过运行测试。 常见示例是在非Windows平台上跳过仅限Windows的测试&#xff0c;或跳过测…

pytorch搭建AlexNet网络实现花分类

pytorch搭建AlexNet网络实现花分类 一、AlexNet网络概述分析 二、数据集准备下载划分训练集和测试集 三、代码model.pytrain.pypredict.py 一、AlexNet网络 概述 使用Dropout的方式在网络正向传播过程中随机失活一部分神经元&#xff0c;以减少过拟合 分析 对其中的卷积层、…

MyCat01——如何实现MySQL中的主从复制

1 问题 数据对于我们来说是一项最重要的资产&#xff0c;因为数据丢失带来的损失&#xff0c;对于一家公司来说&#xff0c;有时也是毁灭性的。 那么如何确保数据安全&#xff0c;不因断电或系统故障带来数据丢失呢&#xff1f; 当用户增加&#xff0c;对数据库的访问量也随…

【Soft-prompt Tuning for Large Language Models to Evaluate Bias 论文略读】

Soft-prompt Tuning for Large Language Models to Evaluate Bias 论文略读 INFORMATIONAbstract1 Introduction2 Related work3 Methodology3.1 Experimental setup 4 Results5 Discussion & Conclusion总结A Fairness metricsB Hyperparmeter DetailsC DatasetsD Prompt …

【Java】JVM学习(七)

JVM调优 堆空间如何设置 在分代模型中&#xff0c;各分区的大小对GC的性能影响很大。如何将各分区调整到合适的大小&#xff0c;分析活跃数据的大小是很好的切入点。 活跃数据的大小&#xff1a;应用程序稳定运行时长期存活对象在堆中占用的空间大小&#xff0c;也就是Full …

拧螺丝需求:递归算法的极致应用

前言 在一个平平无奇的下午&#xff0c;接到一个需求&#xff0c;需要给公司的中台系统做一个json报文重组的功能。 因为公司的某些业务需要外部数据的支持&#xff0c;所以会采购一些其它公司的数据&#xff0c;而且为了保证业务的连续性&#xff0c;同一种数据会采购多方的数…