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

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

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

1.前言

本文章將承接著上面的文章(上篇文章的地址),繼續(xù)對推箱子的代碼進行修改和完善,對上面雜亂的代碼進行修改成函數(shù)。

2.地圖代碼修改成函數(shù)

注意:每次打印地圖的時候要在前面加入system("cls")語句來清除刷新地圖,該方法需要用到#include <Windows.h>的頭文件。

對上篇文章的推箱子的地圖代碼進行函數(shù)封裝,成果如下:

void drawMap() 
{ 
    system("CLS"); 
    // 使用循環(huán),遍歷數(shù)組(將游戲數(shù)據(jù)圖形化) 
    for (size_t i = 0; i < 10; i++) 
    { 
        for (size_t j = 0; j < 10; j++) 
        { 
            /*printf("%2d", map[i][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"); 
    } 
}

而存儲地圖的地方可以放在主函數(shù)體外面來進行聲明。

在這之后如果推到成功點和人走到成功點上僅需要加上case 2+4和case 3+4兩個條件即可,具體代碼如最后源碼所示。

3.角色移動修改成函數(shù)

對角色移動的函數(shù)我們需要分為2個函數(shù),一個是來控制角色移動的函數(shù),另一個則是來尋找角色所在位置的坐標(biāo)。

3.1尋找角色函數(shù)

在該函數(shù)中,我們需要對尋找角色,以及判斷箱子能否推動做兩個功能封裝為一個函數(shù),在該函數(shù)中,我們要先找到角色的位置,然后對移動的位置進行判斷。

// 移動邏輯 參數(shù):int X,int Y X和Y方向的偏移量 
void move(int X,int Y) 
{ 
    // 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; 
            }
        } 
    }
    // 空地或成功點 map[posX][posY]:主角所在的位置 
    if (0 == map[posX + X][posY + Y] || 4 == map[posX + X][posY + Y]) 
    { 
    map[posX][posY] -= 2; 
    map[posX + X][posY + Y] += 2; 
    }
    // 箱子(將箱子從點上推走) 
    else if (3 == map[posX + X][posY + Y] || 3 + 4 == map[posX + X][posY + Y]) 
    { 
        // 箱子上面是空地或成功點 map[posX - 1][posY]: 箱子位置 
        if (0 == map[posX + (X * 2)][posY + (Y * 2)] || 4 == map[posX + (X * 2)] [posY + (Y * 2)]) 
        { 
            // 當(dāng)前位置人離開 
            map[posX][posY] -= 2; 
            map[posX + X][posY + Y] += 2; 
            map[posX + X][posY + Y] -= 3; 
            map[posX + (X * 2)][posY + (Y * 2)] += 3; 
        } 
    } 
}

3.2角色移動函數(shù)

該函數(shù)對鍵盤輸入進行處理,并且通過傳入2個參數(shù)來一次性對移動進行操作,不需要四個方向都需要在寫一遍函數(shù),以下寫法可以防止用戶開大寫而移動不了角色。

void heroMove() 
{ 
    // 控制人物移動 
    // 2 控制(鍵盤:WSAD(上下左右)) 
    // 需要從鍵盤獲取按鍵(字符) 
    switch (getch())
    {
        case 'w': 
        case 'W': 
            move(-1, 0); 
            break; 
        case 's': 
        case 'S': 
            move(1, 0); 
            break; 
        case 'a': 
        case 'A': 
            move(0, -1); 
            break; 
        case 'd': 
        case 'D': 
            move(0, 1); 
            break; 
        default: 
            break; 
    } 
}

4.判斷勝利修改成函數(shù)

這里用到了C++的bool類型,c語言也是可以使用,如果不想用這種函數(shù),改成int也是可以使用的。

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;
}

5.主體函數(shù)的實現(xiàn)

這里的思想是,先繪制地圖,然后對移動進行判斷,直到判斷所有的箱子沒有后,判定玩家勝利。

int main() 
{ 
    while (!isWin()) // 游戲主循環(huán) 
    { 
        drawMap(); 
        heroMove(); 
    }
    drawMap(); 
    return 0; 
}

6.推箱子能實現(xiàn)基本功能的源碼

#include <stdio.h> 
#include <conio.h> 
#include <Windows.h> 
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, 4, 0, 1, 1, 0, 0, 1 }, 
    { 1, 0, 0, 3, 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 } 
};
/* 函數(shù)聲明 */ 
void drawMap(); 
void heroMove(); 
void move(int X, int Y); 
bool isWin();
int main() 
{ 
    while (!isWin()) // 游戲主循環(huán) 
    { 
        drawMap(); 
        heroMove(); 
    }
    drawMap(); 
    return 0; 
}
/* 函數(shù)定義 */ 
// 繪制地圖 
void drawMap() 
{ 
    system("CLS"); 
    // 使用循環(huán),遍歷數(shù)組(將游戲數(shù)據(jù)圖形化) 
    for (size_t i = 0; i < 10; i++) 
    { 
        for (size_t j = 0; j < 10; j++) 
        { 
            /*printf("%2d", map[i][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; 
                case 2 + 4: 
                    printf("♀");
                    break; 
                case 3 + 4: 
                    printf("★"); 
                    break; 
                default: 
                    break; 
                } 
        }
        printf("\n"); 
    } 
}
void heroMove() 
{ 
    // 控制人物移動 
    // 2 控制(鍵盤:WSAD(上下左右)) 
    // 需要從鍵盤獲取按鍵(字符) 
    switch (getch())
    {
        case 'w': 
        case 'W': 
            move(-1, 0); 
            break; 
        case 's': 
        case 'S': 
            move(1, 0); 
            break; 
        case 'a': 
        case 'A': 
            move(0, -1); 
            break; 
        case 'd': 
        case 'D': 
            move(0, 1); 
            break; 
        default: 
            break; 
    } 
}
// 移動邏輯 參數(shù):int X,int Y X和Y方向的偏移量 
void move(int X,int Y) 
{ 
    // 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; 
            }
        } 
    }
    // 空地或成功點 map[posX][posY]:主角所在的位置 
    if (0 == map[posX + X][posY + Y] || 4 == map[posX + X][posY + Y]) 
    { 
    map[posX][posY] -= 2; 
    map[posX + X][posY + Y] += 2; 
    }
    // 箱子(將箱子從點上推走) 
    else if (3 == map[posX + X][posY + Y] || 3 + 4 == map[posX + X][posY + Y]) 
    { 
        // 箱子上面是空地或成功點 map[posX - 1][posY]: 箱子位置 
        if (0 == map[posX + (X * 2)][posY + (Y * 2)] || 4 == map[posX + (X * 2)] [posY + (Y * 2)]) 
        { 
            // 當(dāng)前位置人離開 
            map[posX][posY] -= 2; 
            map[posX + X][posY + Y] += 2; 
            map[posX + X][posY + Y] -= 3; 
            map[posX + (X * 2)][posY + (Y * 2)] += 3; 
        } 
    } 
}
//判斷勝利
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++基礎(chǔ)算法動態(tài)DP解決CoinChange問題

    c++基礎(chǔ)算法動態(tài)DP解決CoinChange問題

    這篇文章主要為大家介紹了c++基礎(chǔ)算法如何利用動態(tài)DP來解決Coin Change的問題示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • C語言常用庫函數(shù)的使用及模擬實現(xiàn)詳解例舉

    C語言常用庫函數(shù)的使用及模擬實現(xiàn)詳解例舉

    C語言庫函數(shù)是把自定義函數(shù)放到庫里,是別人把一些常用到的函數(shù)編完放到一個文件里,供程序員使用,下面讓我們一起來詳細了解它
    2022-04-04
  • C++超詳細講解字符串類

    C++超詳細講解字符串類

    在C++中只有一個字符串類,即basic_string,其管理著一個 '\0' 結(jié)尾的字符數(shù)組。頭文件:#include <string>,string類支持兩種輸入方式:cin方式和getline()方式
    2022-06-06
  • Qt自定義控件實現(xiàn)圓圈加載進度條

    Qt自定義控件實現(xiàn)圓圈加載進度條

    這篇文章主要為大家詳細介紹了Qt自定義控件實現(xiàn)圓圈加載進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++實現(xiàn)LeetCode(97.交織相錯的字符串)

    C++實現(xiàn)LeetCode(97.交織相錯的字符串)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(97.交織相錯的字符串),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++ auto類型說明符

    C++ auto類型說明符

    在C++11中引入了auto類型說明符,用它就能讓編譯器替我們?nèi)シ治霰磉_式所屬的類型。當(dāng)然,auto變量必須有初始值,這樣編譯器才能推斷其類型
    2016-03-03
  • C語言實現(xiàn)反彈球消磚塊游戲

    C語言實現(xiàn)反彈球消磚塊游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)反彈球消磚塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 讓我們一起來對C語言指針再分析

    讓我們一起來對C語言指針再分析

    這篇文章主要為大家詳細介紹C語言的指針,本文進行了深度解析,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C語言打印楊輝三角示例匯總

    C語言打印楊輝三角示例匯總

    本文給大家匯總了2種使用C語言實現(xiàn)楊輝三角的方法,不過還是給大家推薦第一種,希望大家能夠喜歡。
    2016-02-02
  • C語言實現(xiàn)關(guān)機小程序

    C語言實現(xiàn)關(guān)機小程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)關(guān)機小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評論

昭平县| 阿克陶县| 八宿县| 竹北市| 谷城县| 临夏市| 大足县| 乌兰察布市| 弥渡县| 卓资县| 梁平县| 定日县| 宣汉县| 大庆市| 嘉善县| 道孚县| 宽城| 福安市| 双鸭山市| 宁南县| 仁怀市| 越西县| 隆回县| 鹿邑县| 项城市| 华安县| 大城县| 阿勒泰市| 临潭县| 荆州市| 克拉玛依市| 吴川市| 潞城市| 新巴尔虎右旗| 玛沁县| 木里| 公主岭市| 金平| 宝丰县| 长宁县| 弥渡县|