您好,登錄后才能下訂單哦!
這篇“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庫如何實現拼圖小游戲”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。