这篇“c++基于EasyX库如何实现拼图小游戏”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++基于EasyX库如何实现拼
这篇“c++基于EasyX库如何实现拼图小游戏”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++基于EasyX库如何实现拼图小游戏”文章吧。
具体代码如下:
#pragma once#include <iOStream>#include <graphics.h>#include <windows.h>#include <alGorithm>#include <easyx.h>#include <cstdlib>#include <random>#include <cmath>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库如何实现拼图小游戏”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网其他教程频道。
--结束END--
本文标题: C++基于EasyX库如何实现拼图小游戏
本文链接: https://www.lsjlt.com/news/296256.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0