91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何使用C語言實現推箱子游戲

發布時間:2022-02-20 08:24:33 來源:億速云 閱讀:278 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“如何使用C語言實現推箱子游戲”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何使用C語言實現推箱子游戲”這篇文章吧。

    1.前言

    推箱子是c語言的一個經典的項目

    2.游戲效果展示

    如何使用C語言實現推箱子游戲

    3.項目分析

    游戲元素:

    • 空地 0

    • 墻壁 1

    • 角色 2

    • 箱子 3

    • 勝利點 4

    游戲目的:

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

    如何使用C語言實現推箱子游戲

    4.地圖實現

    4.1存儲地圖

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

    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.判斷勝利

    對地圖遍歷搜索,如果發現沒有箱子的話,就可以判斷為勝利。(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語言實現推箱子游戲”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    门源| 普宁市| 泰宁县| 新疆| 洪江市| 丽江市| 修武县| 凤阳县| 东辽县| 长岛县| 朝阳县| 山丹县| 惠东县| 天气| 康马县| 朔州市| 汝城县| 大城县| 安阳市| 陈巴尔虎旗| 衡山县| 镇宁| 洮南市| 榆中县| 长丰县| 海安县| 金门县| 赤城县| 新平| 晋宁县| 陇西县| 山丹县| 隆昌县| 汝州市| 乌兰浩特市| 化德县| 久治县| 黎川县| 贡嘎县| 临安市| 东方市|