C語言實現拼圖遊戲
阿新 • • 發佈:2020-03-16
本文例項為大家分享了C語言實現拼圖遊戲的具體程式碼,供大家參考,具體內容如下
一、完成拼圖所要實現的功能
1.實現圖形介面
一維陣列,二維陣列,圖形庫裡面的貼圖
2.繪製一個開始介面的選單
圖形庫(畫矩形,填充顏色),文字輸出,滑鼠操作
3.載入資源
切割技術,用到隨機函式,隨機產生一維陣列下標,然後賦值給二維陣列進行初始化。
4.貼圖
我這裡3行3列的。遍歷二維陣列進行 貼圖。
5.遊戲過程
主要是滑鼠操作,遇到空白的一塊,左右上下都可以交換。
二、效果展示
三、程式碼實現
/************************************************************************ * 專案名稱:拼圖遊戲 * 專案描述:圖片切割,隨機函式,一維二維間的賦值,樹邊操作 * 專案環境:VS2013 * 生成日期:2019-3-13 * 作者所屬:追夢 *************************************************************************/ #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,L"宋體"); setbkmode(TRANSPARENT); fillrectangle(120,60,180,80); fillrectangle(120,85,105); outtextxy(130,65,L"開始遊戲"); outtextxy(130,90,L"退出遊戲"); settextcolor(RED); outtextxy(95,140,L"追夢拼圖遊戲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,105 + 2); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(120 - 2,80 + 2); rectangle(120 - 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,&img,array2D[i][j] * 100,0); break; case 3: case 4: case 5: putimage(x,(array2D[i][j] - 3) * 100,100); break; case 6: case 7: putimage(x,(array2D[i][j] - 6) * 100,200); break; case 8: putimage(x,&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; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。