您好,登錄后才能下訂單哦!
最近閑著無聊,寫了一個拼圖游戲,正好學習一下圖片的處理。
效果圖如下:
程序中用到了圖形庫操作,把一張圖片分割,用一個二維數組代表各個碎片,初始打亂數組就可以得到打亂的圖片。
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, N); if (choose == 2) loadimage(&t, "馬里奧.jpeg", N, N); if (choose == 3) loadimage(&t, "火影.jpeg", N, N); if (choose == 4) loadimage(&t, "數字.png", N, 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, 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; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。