亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言實現拼圖小游戲

發布時間:2020-09-30 19:21:11 來源:腳本之家 閱讀:207 作者:張宜強 欄目:編程語言

最近閑著無聊,寫了一個拼圖游戲,正好學習一下圖片的處理。

效果圖如下:

C語言實現拼圖小游戲

程序中用到了圖形庫操作,把一張圖片分割,用一個二維數組代表各個碎片,初始打亂數組就可以得到打亂的圖片。

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語言實現拼圖小游戲

部分截圖:

C語言實現拼圖小游戲

拼圖成功后,會出現拼圖成功的提示,因為素材限制,只能弄成下面的樣。

C語言實現拼圖小游戲

部分游戲截圖:

C語言實現拼圖小游戲

全部的代碼和素材: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;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴林右旗| 安西县| 阿坝县| 抚远县| 扎囊县| 南溪县| 通城县| 庄河市| 尼勒克县| 临武县| 永济市| 马边| 浮梁县| 通辽市| 揭东县| 塘沽区| 璧山县| 莫力| 梧州市| 长顺县| 吉林省| 新竹县| 巨鹿县| 遂溪县| 吉木萨尔县| 莲花县| 杭州市| 定远县| 沭阳县| 栾城县| 盐池县| 曲松县| 临高县| 张家口市| 集安市| 张北县| 永昌县| 越西县| 罗江县| 罗山县| 马公市|