亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2020年03月27日 17:25:40   作者:張宜強  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

最近閑著無聊,寫了一個拼圖游戲,正好學(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)文章

  • Qt實現(xiàn)TCP同步與異步讀寫消息的示例代碼

    Qt實現(xiàn)TCP同步與異步讀寫消息的示例代碼

    這篇文章主要為大家詳細介紹了如何在?Qt?中實現(xiàn)?TCP?客戶端和服務(wù)器的同步和異步讀寫消息,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 詳解設(shè)計模式中的中介者模式在C++編程中的運用

    詳解設(shè)計模式中的中介者模式在C++編程中的運用

    這篇文章主要介紹了設(shè)計模式中的中介者模式在C++編程中的運用,中介者模式將對象間的通信封裝到一個類中,將多對多的通信轉(zhuǎn)化為一對多的通信,降低了系統(tǒng)的復(fù)雜性,需要的朋友可以參考下
    2016-03-03
  • C++將txt文件內(nèi)容保存到數(shù)組的方法

    C++將txt文件內(nèi)容保存到數(shù)組的方法

    今天小編就為大家分享一篇C++將txt文件內(nèi)容保存到數(shù)組的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C語言函數(shù)調(diào)用的三種實現(xià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++引用傳參和指針傳參的區(qū)別及說明

    c++引用傳參和指針傳參的區(qū)別及說明

    這篇文章主要介紹了c++引用傳參和指針傳參的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • C++頭文件和cpp文件的原理分析

    C++頭文件和cpp文件的原理分析

    這篇文章主要介紹了C++頭文件和cpp文件的原理分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 利用上下文屬性將?C++?對象嵌入?QML?里

    利用上下文屬性將?C++?對象嵌入?QML?里

    這篇文章主要介紹了利用上下文屬性將?C++?對象嵌入?QML里,將?QML?對象加載到?C++?應(yīng)用程序中時,直接嵌入一些可在?QML?代碼中使用的?C++?數(shù)據(jù)會很有用。例如,這使得在嵌入對象上調(diào)用?C++?方法或使用?C++?對象實例作為?QML?視圖的數(shù)據(jù)模型成為可能,下面一起來學(xué)習(xí)該內(nèi)容吧
    2021-12-12
  • Opencv實現(xiàn)圖像灰度線性變換

    Opencv實現(xiàn)圖像灰度線性變換

    這篇文章主要為大家詳細介紹了Opencv實現(xiàn)圖像灰度線性變換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C++協(xié)程實現(xiàn)序列生成器的案例分享

    C++協(xié)程實現(xiàn)序列生成器的案例分享

    序列生成器通常的實現(xiàn)是在一個協(xié)程內(nèi)部通過某種方式向外部傳一個值出去,并且將自己掛起,本文圍繞序列生成器這個經(jīng)典的協(xié)程案例介紹了協(xié)程的銷毀、co_await 運算符、await_transform 以及 yield_value 的用法,需要的朋友可以參考下
    2024-05-05
  • c++ map索引不存在的key可能導(dǎo)致的后果分析

    c++ map索引不存在的key可能導(dǎo)致的后果分析

    這篇文章主要介紹了c++ map索引不存在的key可能導(dǎo)致的后果分析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論