创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥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;
}
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |