C語(yǔ)言實(shí)現(xiàn)拼圖游戲
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)拼圖游戲的具體代碼,供大家參考,具體內(nèi)容如下
一、完成拼圖所要實(shí)現(xiàn)的功能
1.實(shí)現(xiàn)圖形界面
一維數(shù)組,二維數(shù)組,圖形庫(kù)里面的貼圖
2.繪制一個(gè)開始界面的菜單
圖形庫(kù)(畫矩形,填充顏色),文字輸出,鼠標(biāo)操作
3.加載資源
切割技術(shù),用到隨機(jī)函數(shù),隨機(jī)產(chǎn)生一維數(shù)組下標(biāo),然后賦值給二維數(shù)組進(jìn)行初始化。
4.貼圖
我這里3行3列的。遍歷二維數(shù)組進(jìn)行 貼圖。
5.游戲過程
主要是鼠標(biāo)操作,遇到空白的一塊,左右上下都可以交換。
二、效果展示
三、代碼實(shí)現(xiàn)
/************************************************************************ * 項(xiàng)目名稱:拼圖游戲 * 項(xiàng)目描述:圖片切割,隨機(jī)函數(shù),一維二維間的賦值,樹邊操作 * 項(xiàng)目環(huán)境:VS2013 * 生成日期:2019-3-13 * 作者所屬:追夢(mèng) *************************************************************************/ #include<stdio.h> #include<stdlib.h> #include<easyx.h> #include<time.h> #include<conio.h> int array2D[3][3] = { 0 }; int array1D[9] = { 0 }; IMAGE img, block; struct blankPos { int i, j; }myPos{ 0, 0 }; struct blankPos searchPos(int array2D[][3], int l, int h) { for (int i = 0; i < l;i++) { for (int j = 0; j < h;j++) { if (array2D[i][j] == 8) { myPos.j = j; myPos.i = i; return myPos; } } } return myPos; } void drawMenu()//菜單 { initgraph(300, 300); setbkcolor(WHITE); cleardevice(); setfillcolor(BLUE); settextstyle(10, 0, L"宋體"); setbkmode(TRANSPARENT); fillrectangle(120, 60, 180, 80); fillrectangle(120, 85, 180, 105); outtextxy(130, 65, L"開始游戲"); outtextxy(130, 90, L"退出游戲"); settextcolor(RED); outtextxy(95, 140, L"追夢(mèng)拼圖游戲V1.1.0版本"); MOUSEMSG m; while (1) { m = GetMouseMsg(); if (m.x >= 120 && m.x <= 180 && m.y >= 60 && m.y <= 80) { setlinecolor(BLACK); rectangle(120 - 2, 60 - 2, 180 + 2, 80 + 2); if (m.uMsg==WM_LBUTTONDOWN) { break; } } else if (m.x >= 120 && m.x <= 180 && m.y >=85 && m.y <= 105) { setlinecolor(BLACK); rectangle(120 - 2, 85 - 2, 180 + 2, 105 + 2); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(120 - 2, 60 - 2, 180 + 2, 80 + 2); rectangle(120 - 2, 85 - 2, 180 + 2, 105 + 2); } } closegraph(); } void loadResource()//加載資源 { srand((unsigned int)time(NULL)); int length=8; int pos = 0; int i, j; for (i = 0; i < 8; i++) { array1D[i] = i; } for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (i == 2 && j == 2) { array2D[i][j] = 8; break; } pos = rand() % length; array2D[i][j] = array1D[pos]; for (int k = pos; k < length; k++) { array1D[k] = array1D[k + 1]; } length--; } if (i == 2 && j == 2) { array2D[i][j] = 8; break; } } loadimage(&img, L"圖1.jpg", 300, 300); loadimage(&block, L"空目的地.jpg", 100, 100); } void drawMap() //貼圖 { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { int x = 100 * j; int y = 100 * i; switch (array2D[i][j]) { case 0: case 1: case 2: putimage(x, y, 100, 100, &img, array2D[i][j] * 100, 0); break; case 3: case 4: case 5: putimage(x, y, 100, 100, &img, (array2D[i][j] - 3) * 100, 100); break; case 6: case 7: putimage(x, y, 100, 100, &img, (array2D[i][j] - 6) * 100, 200); break; case 8: putimage(x, y, &block); break; } } } } void playGame() //游戲過程 { MOUSEMSG m; int i, j; int i_MOUSE, j_MOUSE; while (1) { drawMap(); searchPos(array2D, 3, 3); i = myPos.i; j = myPos.j; m = GetMouseMsg(); switch (m.uMsg) { case WM_LBUTTONDOWN: i_MOUSE = m.y / 100; j_MOUSE = m.x / 100; if (i_MOUSE == i + 1 && j_MOUSE == j) { array2D[i][j] = array2D[i_MOUSE][j_MOUSE]; array2D[i_MOUSE][j_MOUSE] = 8; } if (i_MOUSE == i - 1 && j_MOUSE == j) { array2D[i][j] = array2D[i_MOUSE][j_MOUSE]; array2D[i_MOUSE][j_MOUSE] = 8; } if (i_MOUSE == i && j_MOUSE == j+1) { array2D[i][j] = array2D[i_MOUSE][j_MOUSE]; array2D[i_MOUSE][j_MOUSE] = 8; } if (i_MOUSE == i && j_MOUSE == j-1) { array2D[i][j] = array2D[i_MOUSE][j_MOUSE]; array2D[i_MOUSE][j_MOUSE] = 8; } break; } } } int main() { drawMenu(); initgraph(300, 300); loadResource(); drawMap(); playGame(); system("pause"); return 0; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
談?wù)凜語(yǔ)言中位運(yùn)算你要知道的那些事兒
C語(yǔ)言中的各種運(yùn)算都是以字節(jié)的形式進(jìn)行,在編寫很多系統(tǒng)程序時(shí),如驅(qū)動(dòng)程序、磁盤文件管理程序等,常要求將數(shù)據(jù)按位(bit)進(jìn)行運(yùn)算或者處理,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中位運(yùn)算的相關(guān)資料,需要的朋友可以參考下2022-02-02C++算法實(shí)現(xiàn)leetcode 1252奇數(shù)值單元格數(shù)目
這篇文章為大家主要介紹了C++實(shí)現(xiàn)leetcode 1252奇數(shù)值單元格的數(shù)目題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08使用c++實(shí)現(xiàn)OpenCV繪制旋轉(zhuǎn)矩形圖形
這篇文章主要給大家介紹了使用c++實(shí)現(xiàn)OpenCV繪制圖形旋轉(zhuǎn)矩形的方法案例,通過圖文及代碼形式進(jìn)行了詳細(xì)的描述,有需要的朋友可以參考下,希望可以有所幫助2021-08-08visual studio2019的安裝以及使用圖文步驟詳解
這篇文章主要介紹了visual studio2019的安裝以及使用圖文步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03