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

詳解C語言實現推箱子的基本功能

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

1.前言

首先推箱子是c語言的一個經典的項目,本篇文字將會介紹如何從零開始實現c語言如何實現推箱子

2.游戲效果展示

3.項目分析

游戲元素:

  • 空地 0
  • 墻壁 1
  • 角色 2
  • 箱子 3
  • 勝利點 4

游戲目的:

玩家控制角色在地圖的空地上進行移動,通過推動箱子躲避障礙,將所有的箱子推至勝利點即可成功。

4.地圖實現

4.1存儲地圖

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

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打印地圖

對應地圖的打印我們則需要對地圖進行遍歷,利用switch語句將地圖打印在控制臺上面。

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

5.控制角色移動

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軸的坐標
        } 
    } 
} 

5.2實現移動

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

對地圖遍歷搜索,如果發(fā)現沒有箱子的話,就可以判斷為勝利。(size_t是C++里面的東西,size_t相當于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;
}

總結

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

相關文章

  • C語言數據結構中二分查找遞歸非遞歸實現并分析

    C語言數據結構中二分查找遞歸非遞歸實現并分析

    這篇文章主要介紹了C語言數據結構中二分查找遞歸非遞歸實現并分析的相關資料,需要的朋友可以參考下
    2017-03-03
  • C++ Boost.Range與Adapters庫使用詳解

    C++ Boost.Range與Adapters庫使用詳解

    這篇文章主要介紹了C++ Boost.Range與Adapters庫使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-11-11
  • Qt通過圖片組繪制動態(tài)圖片

    Qt通過圖片組繪制動態(tài)圖片

    這篇文章主要為大家詳細介紹了Qt通過圖片組繪制動態(tài)圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++編程中使用設計模式中的policy策略模式的實例講解

    C++編程中使用設計模式中的policy策略模式的實例講解

    這篇文章主要介紹了C++編程中使用設計模式中的policy策略模式的實例講解,文章最后對策略模式的優(yōu)缺點有一個簡單的總結,需要的朋友可以參考下
    2016-03-03
  • C++線程安全的隊列你了解嘛

    C++線程安全的隊列你了解嘛

    這篇文章主要為大家詳細介紹了C++線程安全的隊列,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言編程const遇上指針分析

    C語言編程const遇上指針分析

    本篇文章是C語言編程篇,主要為大家介紹C語言編程中當Const遇上指針的分析講解,有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • Cocos2d-x學習筆記之CCScene、CCLayer、CCSprite的默認坐標和默認錨點實驗

    Cocos2d-x學習筆記之CCScene、CCLayer、CCSprite的默認坐標和默認錨點實驗

    這篇文章主要介紹了Cocos2d-x學習筆記之CCScene、CCLayer、CCSprite的默認坐標和默認錨點實驗,這是一個非常值得研究的問題,需要的朋友可以參考下
    2014-09-09
  • 迷宮游戲控制臺版C++代碼

    迷宮游戲控制臺版C++代碼

    這篇文章主要為大家詳細介紹了迷宮游戲控制臺版C++代碼,可以調整大小的迷宮游戲,給定迷宮的入口,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 用C++實現推箱子

    用C++實現推箱子

    這篇文章主要為大家詳細介紹了用C++實現推箱子,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 利用Matlab復刻舉牌加油小人生成器

    利用Matlab復刻舉牌加油小人生成器

    upuptoyou是一款非常有創(chuàng)意的小工具,可以在線生成舉牌小人,看起來很可愛,也比較有趣,并能用于表白,或節(jié)日送祝福等場景。本文將用Matlab復刻這一小工具,需要的可以參考一下
    2022-03-03

最新評論