溫馨提示×

溫馨提示×

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

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

C語言實(shí)現(xiàn)拼圖小游戲

發(fā)布時(shí)間:2020-09-30 19:21:11 來源:腳本之家 閱讀:197 作者:張宜強(qiáng) 欄目:編程語言

最近閑著無聊,寫了一個(gè)拼圖游戲,正好學(xué)習(xí)一下圖片的處理。

效果圖如下:

C語言實(shí)現(xiàn)拼圖小游戲

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

void get_arr()
{
 int book[10] = { 0 };
 srand((unsigned int)time(NULL)); //設(shè)置時(shí)間種子
 for(int i=0; i<3; i++) //隨機(jī)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;
}

因?yàn)檫@里數(shù)字并不大,所以我就暴力寫了一下。

總共有5張圖片,為了簡化難度,我加了一張純數(shù)字的。

C語言實(shí)現(xiàn)拼圖小游戲

部分截圖:

C語言實(shí)現(xiàn)拼圖小游戲

拼圖成功后,會(huì)出現(xiàn)拼圖成功的提示,因?yàn)樗夭南拗?,只能弄成下面的樣?/p>

C語言實(shí)現(xiàn)拼圖小游戲

部分游戲截圖:

C語言實(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 //圖片長和寬,為便于計(jì)算取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è)置時(shí)間種子
 for(int i=0; i<3; i++) //隨機(jī)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è)置時(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í)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI