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

詳解C語言實(shí)現(xiàn)推箱子的基本功能

 更新時(shí)間:2022年02月17日 15:56:33   作者:D_eretay  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)推箱子的基本功能的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1.前言

首先推箱子是c語言的一個(gè)經(jīng)典的項(xiàng)目,本篇文字將會(huì)介紹如何從零開始實(shí)現(xiàn)c語言如何實(shí)現(xiàn)推箱子

2.游戲效果展示

3.項(xiàng)目分析

游戲元素:

  • 空地 0
  • 墻壁 1
  • 角色 2
  • 箱子 3
  • 勝利點(diǎn) 4

游戲目的:

玩家控制角色在地圖的空地上進(jìn)行移動(dòng),通過推動(dòng)箱子躲避障礙,將所有的箱子推至勝利點(diǎn)即可成功。

4.地圖實(shí)現(xiàn)

4.1存儲(chǔ)地圖

首先存儲(chǔ)地圖我們使用數(shù)組來進(jìn)行存儲(chǔ),為什么我們會(huì)用到char而不是int?是因?yàn)閕nt普遍為4字節(jié),char為1字節(jié),我們就可以大大減少存儲(chǔ)地圖所需要的內(nèi)存。如果要寫多張地圖的話,僅僅將數(shù)組擴(kuò)充至三維即可,作者將會(huì)在之后的文章進(jìn)行說明。

char map[10][10] = 
{ 
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, 
    { 1, 0, 0, 0, 0, 1, 0, 0, 0, 1 }, 
    { 1, 0, 0, 0, 0, 1, 4, 0, 0, 1 }, 
    { 1, 0, 0, 0, 0, 1, 1, 0, 0, 1 }, 
    { 1, 0, 0, 0, 0, 1, 0, 0, 0, 1 }, 
    { 1, 0, 0, 2, 0, 0, 0, 0, 0, 1 }, 
    { 1, 1, 1, 1, 0, 0, 3, 0, 0, 1 }, 
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, 
    { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, 
    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } 
};

4.2打印地圖

對(duì)應(yīng)地圖的打印我們則需要對(duì)地圖進(jìn)行遍歷,利用switch語句將地圖打印在控制臺(tái)上面。

for (size_t i = 0; i < 10; i++) 
{ 
    for (size_t j = 0; j < 10; j++) 
    { 
        switch (map[i][j]) 
        {
            case 0: 
                printf(" "); // 注意一點(diǎn)是兩個(gè)空格,如果是一個(gè)空格的時(shí)候會(huì)使地圖打印出現(xiàn)一些問題 
                break; 
            case 1: 
                printf("█"); 
                break; 
            case 2:     
                printf("♀"); 
                break; 
            case 3: 
                printf("●"); 
                break; 
            case 4: 
                printf("☆"); 
                break; 
            default: 
                break; 
        } 
    }
    printf("\n"); 
}

5.控制角色移動(dòng)

5.1找到控制的角色

int posX = 0, posY = 0; 
for (size_t i = 0; i < 10; i++) 
{ 
    for (size_t j = 0; j < 10; j++) 
    { 
        if (2 == map[i][j] || 2 + 4 == map[i][j]) 
        { 
            posX = i; 
            posY = j; 
            break; 
            //找到角色,記錄其所在的x軸和y軸的坐標(biāo)
        } 
    } 
} 

5.2實(shí)現(xiàn)移動(dòng)

// 控制(鍵盤:WSAD(上下左右)) 
// 需要從鍵盤獲取按鍵(字符) 
switch (getch()) // getch()該方法需要在開頭導(dǎo)入#include <conio.h>
{
    case 'w': 
    case 'W': 
        printf("向上\n"); 
        /*
        向上邏輯: 
        改變數(shù)組元素的值 
        以人為參考 
        上面可能是: 
        空地 移動(dòng) 
        墻壁 不動(dòng) 
        成功點(diǎn) 移動(dòng) 
        箱子 判斷箱子上面是個(gè)啥 
        空地 移動(dòng) 
        成功點(diǎn) 移動(dòng) 
        墻壁 不動(dòng) 
        另一個(gè)箱子 不動(dòng) 
        */
        // 上面是空地或成功點(diǎn) map[posX][posY]:主角所在的位置 
        if (0 == map[posX - 1][posY] || 4 == map[posX - 1][posY]) 
        { 
            // 當(dāng)前位置人離開 
            map[posX][posY] -= 2; 
            // 上面位置人過來 
            map[posX - 1][posY] += 2; 
        }
        // 上面是箱子(將箱子從點(diǎn)上推走) 
        else if (3 == map[posX - 1][posY] || 3 + 4 == map[posX - 1][posY]) 
        { 
            // 箱子上面是空地或成功點(diǎn) map[posX - 1][posY]: 箱子位置 
            if (0 == map[posX - 2][posY] || 4 == map[posX - 2][posY]) 
            { 
                // 當(dāng)前位置人離開 
                map[posX][posY] -= 2; 
                // 上面位置人過來 
                map[posX - 1][posY] += 2; 
                // 上面位置箱子離開 
                map[posX - 1][posY] -= 3; 
                // 上面的上面箱子過來 
                map[posX - 2][posY] += 3; 
            } 
        }
        break; 
    case 's': 
    case 'S': 
        printf("向下\n"); 
        break; 
    case 'a': 
    case 'A': 
        printf("向左\n"); 
        break; 
    case 'd': 
    case 'D': 
        printf("向右\n"); 
        break; 
    default: 
        break; 
}

6.判斷勝利

對(duì)地圖遍歷搜索,如果發(fā)現(xiàn)沒有箱子的話,就可以判斷為勝利。(size_t是C++里面的東西,size_t相當(dāng)于unsigned int,這里僅做理解即可,可以用int來代替size_t)

bool isWin() 
{ 
    for (size_t i = 0; i < 10; i++) 
    { 
        for (size_t j = 0; j < 10; j++) 
        { 
            if (map[i][j] == 3) 
            { 
                return false; 
            } 
        } 
    }
    return true;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!       

相關(guān)文章

  • C語言編程之預(yù)處理過程與define及條件編譯

    C語言編程之預(yù)處理過程與define及條件編譯

    這篇文章主要為大家介紹了C語言編程之預(yù)處理過程與define及條件編譯,文中通過圖文及示例代碼方式作了詳細(xì)的解釋,有需要的朋友可以借鑒參考下
    2021-09-09
  • 在Visual Studio中配置C++最新版netCDF庫(kù)的方法

    在Visual Studio中配置C++最新版netCDF庫(kù)的方法

    本文介紹在Windows電腦的Visual Studio軟件中,配置C++ 語言最新版netCDF庫(kù)的方法,文中通過圖文結(jié)合的形式介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-03-03
  • 對(duì)C++ string append方法的常用用法詳解

    對(duì)C++ string append方法的常用用法詳解

    今天小編就為大家分享一篇對(duì)C++ string append方法的常用用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • C++11新特性之a(chǎn)uto的使用

    C++11新特性之a(chǎn)uto的使用

    熟悉腳本語言的人都知道,很多腳本語言都引入了“類型自動(dòng)推斷”技術(shù):比如Python,可以直接聲明變量,在運(yùn)行時(shí)進(jìn)行類型檢查。隨著C++11標(biāo)準(zhǔn)的發(fā)布,C++語言也引入了類型自動(dòng)推斷的功能。這篇文章主要介紹了C++11新特性之a(chǎn)uto的使用,有需要的朋友們可以參考借鑒。
    2016-12-12
  • 解析設(shè)計(jì)模式中的Prototype原型模式及在C++中的使用

    解析設(shè)計(jì)模式中的Prototype原型模式及在C++中的使用

    這篇文章主要介紹了設(shè)計(jì)模式中的Prototype原型模式及在C++中的使用,需要的朋友可以參考下
    2016-03-03
  • C++封裝靜態(tài)鏈接庫(kù)和使用的詳細(xì)步驟

    C++封裝靜態(tài)鏈接庫(kù)和使用的詳細(xì)步驟

    這篇文章主要介紹了C++封裝靜態(tài)鏈接庫(kù)和使用,本文描述了怎么去把一個(gè)C++程序封裝成一個(gè)靜態(tài)庫(kù)并且如何去使用這些靜態(tài)庫(kù),需要的朋友可以參考下
    2022-08-08
  • C語言匯編分析傳遞結(jié)構(gòu)體指針比傳遞結(jié)構(gòu)體變量高效的深層原因

    C語言匯編分析傳遞結(jié)構(gòu)體指針比傳遞結(jié)構(gòu)體變量高效的深層原因

    本文章使用的工具是vs2010,本篇文章主要講解結(jié)構(gòu)體指針作為參數(shù)傳遞與結(jié)構(gòu)體變量作為參數(shù)傳遞的對(duì)比,不談值傳遞與址傳遞的概念
    2022-10-10
  • QT編寫地圖實(shí)現(xiàn)離線輪廓圖的示例代碼

    QT編寫地圖實(shí)現(xiàn)離線輪廓圖的示例代碼

    這篇文章主要介紹了在利用QT編寫地圖時(shí)常常需要用到的離線輪廓圖,離線輪廓圖使用起來比線輪廓圖麻煩一點(diǎn),需要自己繪制。感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • C++如何刪除map容器中指定值的元素詳解

    C++如何刪除map容器中指定值的元素詳解

    map容器是C++ STL中的重要一員,刪除map容器中value為指定元素的問題是我們經(jīng)常與遇到的一個(gè)問題,下面這篇文章主要給大家介紹了關(guān)于利用C++如何刪除map容器中指定值的元素的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • c++ 有趣的動(dòng)態(tài)轉(zhuǎn)換

    c++ 有趣的動(dòng)態(tài)轉(zhuǎn)換

    這篇文章主要介紹了c++ 動(dòng)態(tài)轉(zhuǎn)換的相關(guān)資料,幫助大家更好的理解和使用c++編程,感興趣的朋友可以了解下
    2020-09-09

最新評(píng)論

周口市| 界首市| 新沂市| 镇平县| 迁安市| 增城市| 长岭县| 昌邑市| 隆昌县| 永年县| 海安县| 安图县| 许昌市| 岳阳市| 弥勒县| 措勤县| 承德市| 博野县| 筠连县| 长垣县| 丹江口市| 荥经县| 定西市| 广宗县| 怀仁县| 南汇区| 南开区| 波密县| 赣州市| 罗江县| 蕉岭县| 邳州市| 博罗县| 武安市| 二连浩特市| 斗六市| 崇左市| 牙克石市| 邮箱| 九龙县| 甘德县|