C語言實現拼圖小遊戲
阿新 • • 發佈:2020-03-29
最近閒著無聊,寫了一個拼圖遊戲,正好學習一下圖片的處理。
效果圖如下:
程式中用到了圖形庫操作,把一張圖片分割,用一個二維陣列代表各個碎片,初始打亂陣列就可以得到打亂的圖片。
void get_arr() { int book[10] = { 0 }; srand((unsigned int)time(NULL)); //設定時間種子 for(int i=0; i<3; i++) //隨機arr陣列,打亂圖片順序 for (int j = 0; j < 3; j++) { if (i == 2 && j == 2) break; while (1) { int s = rand() % 8; if (book[s] == 0) { book[s] = 1; arr[i][j] = s; break; } } } arr[2][2] = 9; }
因為這裡數字並不大,所以我就暴力寫了一下。
總共有5張圖片,為了簡化難度,我加了一張純數字的。
部分截圖:
拼圖成功後,會出現拼圖成功的提示,因為素材限制,只能弄成下面的樣。
部分遊戲截圖:
全部的程式碼和素材:C語言拼圖遊戲
下面是程式碼:
#include <stdio.h> #include <stdlib.h> #include <graphics.h> #include <windows.h> #include <conio.h> #include<time.h> #include <iostream> #include <algorithm> #define N 600 //圖片長和寬,為便於計算取600 #define M N/3 //分為9塊,每塊有 using namespace std; IMAGE t,over; int arr[5][5]; void get_arr() { int book[10] = { 0 }; srand((unsigned int)time(NULL)); //設定時間種子 for(int i=0; i<3; i++) //隨機arr陣列,打亂圖片順序 for (int j = 0; j < 3; j++) { if (i == 2 && j == 2) break; while (1) { int s = rand() % 8; if (book[s] == 0) { book[s] = 1; arr[i][j] = s; break; } } } arr[2][2] = 9; } void choosephoto() { int choose; srand((unsigned int)time(NULL)); //設定時間種子 choose = rand() % 5; //選擇圖片 if(choose==0) loadimage(&t,"少司命.jpeg",N,N); //載入圖片 if (choose == 1) loadimage(&t,"柯南.jpg",N); if (choose == 2) loadimage(&t,"馬里奧.jpeg",N); if (choose == 3) loadimage(&t,"火影.jpeg",N); if (choose == 4) loadimage(&t,"數字.png",N); } void Game() //顯示拼圖 { initgraph(N,N); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { putimage(j * M,i * M,M,&t,arr[i][j]%3*M,arr[i][j]/3*M); //切割圖片 } } } int GameOver() { int temp = 1; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (arr[i][j] != 3 * i + j) { temp = 0; break; } } if (temp == 0) break; } if (temp == 1) { loadimage(&over,"遊戲結束.png",400,400); putimage(100,100,&over); return 1; } } void Gamestart() { char ch; int tx,ty; while (1) { if (_kbhit()) { //檢測鍵盤輸入 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) if (arr[i][j] == 9) { tx = i; ty = j; break; } } ch = _getch(); if (ch == 72 || ch=='w') //按鍵為w或者上 { if (tx >= 1) { //swap(arr[tx][ty],arr[tx - 1][ty]); int x = arr[tx][ty]; arr[tx][ty] = arr[tx - 1][ty]; arr[tx - 1][ty] = x; } } else if (ch == 75 || ch=='a') //按鍵為a或者左 { if (ty >= 1) { int x = arr[tx][ty]; arr[tx][ty] = arr[tx][ty - 1]; arr[tx][ty - 1] = x; } } else if (ch == 80 || ch=='s') //按鍵為s或者下 { if (tx < 2) { int x = arr[tx][ty]; arr[tx][ty] = arr[tx + 1][ty]; arr[tx + 1][ty] = x; } } else if (ch == 77 || ch=='d') //按鍵為d或者右 { if (ty < 2) { int x = arr[tx][ty]; arr[tx][ty] = arr[tx][ty + 1]; arr[tx][ty + 1] = x; } } Game(); //輸出拼圖介面 if (GameOver()) break; } } while (ch=getchar()) if (ch == '\n') break; } int main() { get_arr(); //獲取初始陣列 choosephoto(); //選擇圖片 Game(); //輸出起始拼圖 Gamestart(); //遊戲開始 system("pause"); closegraph(); //關閉畫布 return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。