千家信息网

C++基于EasyX库如何实现拼图小游戏

发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,这篇"C++基于EasyX库如何实现拼图小游戏"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
千家信息网最后更新 2024年12月02日C++基于EasyX库如何实现拼图小游戏

这篇"C++基于EasyX库如何实现拼图小游戏"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C++基于EasyX库如何实现拼图小游戏"文章吧。

具体代码如下:

#pragma once#include #include #include #include #include #include #include #include using namespace std;static const int MAX_MAP = 30;     //定义最大行或者列分块常量int check[MAX_MAP][MAX_MAP];     //检查数组int map[MAX_MAP][MAX_MAP];      //序号储存int random[MAX_MAP * MAX_MAP];     //随机化数组IMAGE img_total;        //原图片IMAGE img_blank;        //白底IMAGE img[MAX_MAP][MAX_MAP];     //储存分块图片int level = 3;         //关卡难度int width_temp = 0;        //分块宽度int height_temp = 0;       //分块高度int flagi = 0;         //标记块行位置int flagj = 0;         //标记块列位置int mousei = 0;         //标记鼠标位置int mousej = 0;         //标记鼠标位置int FLAG = 0;         //胜利标记void Get_graphics();       //读取图片并预载到原图中void Set_graphics();       //设置好图片位置及对应关系void Line_flush();        //画线条分割图片void Rand_array();        //初始化随机数组void Get_mouse();        //获取鼠标操作void Judge_graphics();       //判定是否通关并选择是否下一关void Show_graphics();       //显示分块图片inline void Get_graphics()      //读取图片并预载到原图中{ loadimage(&img_total, L"1.png"); loadimage(&img_blank, L"0.png"); initgraph(img_total.getwidth(), img_total.getheight());}inline void Set_graphics()      //设置好图片位置及对应关系{ width_temp = img_total.getwidth() / level; height_temp = img_total.getheight() / level; //载入各分块的图片 SetWorkingImage(&img_total); for (int i = 0; i < level; i++) {  for (int j = 0; j < level; j++)   getimage(&img[i][j], i * width_temp, j * height_temp, width_temp, height_temp); } SetWorkingImage(); //校验数组初始化 int cnt = 0; for (int i = 0; i < level; i++) {  for (int j = 0; j < level; j++)  {   check[i][j] = cnt;   cnt++;  } }}inline void Line_flush()        //画线条分割图片{ for (int i = 0; i < level; i++) {  //setlinecolor(RED);   //可以更改线条颜色 默认白色  line(i * width_temp, 0, i * width_temp, img_total.getheight());  line(0, i * height_temp, img_total.getwidth(), i * height_temp); }}inline void Rand_array()        //初始化随机数组{ for (int i = 0; i < level * level; i++)  random[i] = i; random_device rd; mt19937 g(rd());         // 随机数引擎 shuffle(random, random + level * level, g);   // 打乱顺序 int cnt = 0; for (int i = 0; i < level; i++) {  for (int j = 0; j < level; j++)  {   map[j][i] = random[cnt];     //逆转赋值1   cnt++;  } }}void Get_mouse(){ MOUSEMSG msg = GetMouseMsg(); if (msg.uMsg == WM_LBUTTONDOWN) {  mousei = msg.x / width_temp;  mousej = msg.y / height_temp;  if ((mousei + 1 == flagi && mousej == flagj) ||   (mousei == flagi && mousej + 1 == flagj) ||   (mousei - 1 == flagi && mousej == flagj) ||   (mousei == flagi && mousej - 1 == flagj))  {   //交换图片分块   swap(map[mousej][mousei], map[flagj][flagi]);  } }}void Judge_graphics(){ int cnt = 0; for (int i = 0; i < level; i++) {  for (int j = 0; j < level; j++)  {   if (map[i][j] == check[i][j])    cnt++;  } } if (cnt == level * level) {  MessageBox(GetHWnd(), _T("过关了."), _T("消息提示."), MB_OK);  FLAG = 1;  exit(0); }}inline void Show_graphics()         //显示分块图片{ for (int i = 0; i < level; i++) {  for (int j = 0; j < level; j++)  {   if (map[j][i] == level * level - 1)    //逆转赋值2   {    flagi = i;    flagj = j;    putimage(i * width_temp, j * height_temp, &img_blank);   }   else   {    int countj = map[j][i] % level;    int counti = map[j][i] / level;    putimage(i * width_temp, j * height_temp, &img[countj][counti]);   }  } } Line_flush();}int main(){ Get_graphics(); Set_graphics(); Rand_array(); Show_graphics(); while (1) {  BeginBatchDraw();   //双缓冲防止闪烁  Get_mouse();  Show_graphics();  EndBatchDraw();    //双缓冲防止闪烁  Judge_graphics();  } if (FLAG) {  putimage(0, 0, &img_total);  FLAG = 0; } system("pause"); return 0;}

以上就是关于"C++基于EasyX库如何实现拼图小游戏"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

0