C語言實現(xiàn)拼圖小游戲
更新時間:2020年03月27日 17:25:40 作者:張宜強
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
最近閑著無聊,寫了一個拼圖游戲,正好學(xué)習(xí)一下圖片的處理。
效果圖如下:

程序中用到了圖形庫操作,把一張圖片分割,用一個二維數(shù)組代表各個碎片,初始打亂數(shù)組就可以得到打亂的圖片。
void get_arr()
{
int book[10] = { 0 };
srand((unsigned int)time(NULL)); //設(shè)置時間種子
for(int i=0; i<3; i++) //隨機arr數(shù)組,打亂圖片順序
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;
}
因為這里數(shù)字并不大,所以我就暴力寫了一下。
總共有5張圖片,為了簡化難度,我加了一張純數(shù)字的。

部分截圖:

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

部分游戲截圖:

全部的代碼和素材: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)); //設(shè)置時間種子
for(int i=0; i<3; i++) //隨機arr數(shù)組,打亂圖片順序
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)); //設(shè)置時間種子
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, "數(shù)字.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, "游戲結(jié)束.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(); //獲取初始數(shù)組
choosephoto(); //選擇圖片
Game(); //輸出起始拼圖
Gamestart(); //游戲開始
system("pause");
closegraph(); //關(guān)閉畫布
return 0;
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言函數(shù)調(diào)用的三種實現(xiàn)方法實例
C語言中函數(shù)的調(diào)用主要有如下三種方法,直接調(diào)用,函數(shù)指針調(diào)用,函數(shù)指針傳遞調(diào)用其中后兩種本質(zhì)一樣,但在有無返回值時還稍有差別,下面這篇文章主要給大家介紹了關(guān)于C語言函數(shù)調(diào)用的三種實現(xiàn)方法,需要的朋友可以參考下2022-01-01
c++ map索引不存在的key可能導(dǎo)致的后果分析
這篇文章主要介紹了c++ map索引不存在的key可能導(dǎo)致的后果分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12

