C++基于EasyX庫實現(xiàn)拼圖小游戲
更新時間:2021年07月23日 08:37:27 作者:好吃的秋梨膏
這篇文章主要為大家詳細介紹了C++基于EasyX庫實現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
用C++的EasyX庫做的拼圖小游戲,供大家參考,具體內容如下
記錄一下自己做的第一個項目,還有一些改進空間QWQ,可以支持難度升級,但是通關判斷似乎有點小問題肯定不是我菜通不了關 。
#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]; //檢查數(shù)組
int map[MAX_MAP][MAX_MAP]; //序號儲存
int random[MAX_MAP * MAX_MAP]; //隨機化數(shù)組
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(); //初始化隨機數(shù)組
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();
//校驗數(shù)組初始化
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() //初始化隨機數(shù)組
{
for (int i = 0; i < level * level; i++)
random[i] = i;
random_device rd;
mt19937 g(rd()); // 隨機數(shù)引擎
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語言中關于庫函數(shù) qsort 的模擬實現(xiàn)過程
庫函數(shù)的模擬實現(xiàn)有利于我們去深入了解這個函數(shù)內部是怎樣實現(xiàn)的,以及學習它的算法,使我們更加了解這個函數(shù)該怎樣去使用,接下來我將詳細的介紹qsort的應用及用法,并且用代碼模擬實現(xiàn)它們的功能2021-09-09
VS2019配置opencv詳細圖文教程和測試代碼的實現(xiàn)
這篇文章主要介紹了VS2019配置opencv詳細圖文教程和測試代碼的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04
Qt使用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查
這篇文章主要為大家詳細介紹了Qt如何使用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06

