最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

效果圖如下:

程序中用到了圖形庫(kù)操作,把一張圖片分割,用一個(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張圖片,為了簡(jiǎn)化難度,我加了一張純數(shù)字的。

部分截圖:

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

部分游戲截圖:

全部的代碼和素材:C語(yǔ)言拼圖游戲

下面是代碼:

#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 //圖片長(zhǎng)和寬,為便于計(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()) { //檢測(cè)鍵盤輸入
 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;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 探討:C++中函數(shù)返回引用的注意事項(xiàng)

    探討:C++中函數(shù)返回引用的注意事項(xiàng)

    本篇文章是對(duì)C++中函數(shù)返回引用的注意事項(xiàng)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • MinGW-w64 C/C++編譯器下載和安裝的方法步驟(入門教程)

    MinGW-w64 C/C++編譯器下載和安裝的方法步驟(入門教程)

    如果電腦沒有安裝MinGW-w64 C/C++編譯器,就無法運(yùn)行g(shù)cc命令,本文主要介紹了MinGW-w64 C/C++編譯器下載和安裝的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++ 刪除字符串的2種方法小結(jié)

    C++ 刪除字符串的2種方法小結(jié)

    這篇文章主要介紹了C++ 刪除字符串的2種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的推箱子游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的推箱子游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++統(tǒng)計(jì)中英文大小寫字母、數(shù)字、空格及其他字符個(gè)數(shù)的方法

    C++統(tǒng)計(jì)中英文大小寫字母、數(shù)字、空格及其他字符個(gè)數(shù)的方法

    這篇文章主要介紹了C++統(tǒng)計(jì)中英文大小寫字母、數(shù)字、空格及其他字符個(gè)數(shù)的方法,涉及C++字符串的遍歷與簡(jiǎn)單判定技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • VC++中進(jìn)程與多進(jìn)程管理的方法詳解

    VC++中進(jìn)程與多進(jìn)程管理的方法詳解

    這篇文章主要介紹了VC++中進(jìn)程與多進(jìn)程管理的方法,以實(shí)例形式詳細(xì)分析了進(jìn)程與多進(jìn)程管理中所涉及的進(jìn)程、子進(jìn)程、進(jìn)程的互斥運(yùn)行與進(jìn)程的結(jié)束等概念與具體實(shí)現(xiàn)方法,非常具有參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C++實(shí)現(xiàn)LeetCode(兩個(gè)有序數(shù)組的中位數(shù))

    C++實(shí)現(xiàn)LeetCode(兩個(gè)有序數(shù)組的中位數(shù))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(兩個(gè)有序數(shù)組的中位數(shù)),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • c語(yǔ)言通過棧判斷括號(hào)匹配是否配對(duì)

    c語(yǔ)言通過棧判斷括號(hào)匹配是否配對(duì)

    前面實(shí)現(xiàn)了棧的基本數(shù)據(jù)結(jié)構(gòu),這里來做一個(gè)聯(lián)系,用棧來解決一道比較常見的算法題,就是括號(hào)配對(duì)是否滿足規(guī)則,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2023-09-09
  • C++中STL的優(yōu)先隊(duì)列priority_queue詳解

    C++中STL的優(yōu)先隊(duì)列priority_queue詳解

    這篇文章主要介紹了C++中STL的優(yōu)先隊(duì)列priority_queue詳解,今天講一講優(yōu)先隊(duì)列(priority_queue),實(shí)際上,它的本質(zhì)就是一個(gè)heap,我從STL中扒出了它的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-08-08
  • C語(yǔ)言設(shè)計(jì)簡(jiǎn)易電話簿

    C語(yǔ)言設(shè)計(jì)簡(jiǎn)易電話簿

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言設(shè)計(jì)簡(jiǎn)易電話簿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評(píng)論

辽宁省| 剑川县| 柏乡县| 巴林右旗| 长宁区| 金阳县| 元氏县| 巴林右旗| 旬邑县| 白水县| 惠水县| 浠水县| 苍梧县| 荃湾区| 临桂县| 亳州市| 大新县| 揭阳市| 达日县| 元江| 且末县| 镇安县| 东宁县| 合作市| 大田县| 磐安县| 舒城县| 武山县| 屏南县| 新民市| 安阳县| 普格县| 科技| 炎陵县| 阿鲁科尔沁旗| 安乡县| 博兴县| 蒙自县| 青阳县| 顺义区| 鸡东县|