完整版本的推箱子小游戲,最簡單的純C語言打造


/*
    推箱子小游戲
        1.定義繪制樣式
            用二維數組的方式
        2.繪制圖像
        3.找出當前位置
        4.邏輯判斷,制造動作
            根據數學xy軸的規律,這里使用ij
            上移,行軸上升,行數減少
            下移,行數下降,函數增加
            左移,列數向左,列數減少
            右移,列數向右,列數增加
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define ROWS    8            //行數
#define COLS    9            //列數

int i = 0;                    //行軸
int    j = 0;                    //列軸


//定義繪制樣式
/*
    0    代表    空地
    1    代表    牆壁
    3    代表    目的地
    4    代表    箱子
    5    代表    推箱子的人
    7    代表    目的地上的箱子
    8    代表    目的地上的人
*/
int cMap[ROWS][COLS] = {
    { 0, 1, 1, 1, 1, 1, 1, 1, 0 },
    { 0, 1, 0, 0, 3, 3, 3, 1, 0 },
    { 0, 1, 5, 0, 0, 1, 1, 1, 1 },
    { 1, 0, 0, 4, 0, 0, 0, 0, 1 },
    { 1, 0, 0, 0, 1, 4, 1, 0, 1 },
    { 1, 0, 4, 0, 1, 0, 0, 0, 1 },
    { 1, 0, 0, 0, 1, 1, 1, 1, 1 },
    { 1, 1, 1, 1, 1, 0, 0, 0, 0 }
};

//繪制圖像
int GreatMap()
{

    for (int i = 0; i < ROWS;i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            switch (cMap[i][j])
            {
            case 0:
                printf("  ");
                break;
            case 1:
                printf("");
                break;
            case 3:
                printf("");
                break;
            case 4:
                printf("");
                break;
            case 5:
                printf("");
                break;
            case 7:
                printf("");
                break;
            case 8:
                printf("");
                break;
            default:
                break;
            }
        }
        printf("\n");
    }
    



    return 0;
}

//找出人的當前位置
int FindManIndex()
{
    for (i = 0; i < ROWS;i++)
    {
        for (j = 0; j < COLS;j++)
        {
            if (cMap[i][j] == 5 || cMap[i][j] == 8)
                break;
        }
        if (cMap[i][j] == 5 || cMap[i][j] == 8)
            break;
    }
    printf("人的坐標:[%d,%d]",j,i);

    return 0;
}

//制造動作
int CreateActions()
{
    char cAction = _getch();                    //輸入字符不用回車
    switch (cAction)
    {
    case 'W':
    case 'w':
        //----------------------------------上移
        //如果上方是空地或者目的地
        if (cMap[i - 1][j] == 0 || cMap[i - 1][j] == 3)
        {
            cMap[i - 1][j]    += 5;                
            cMap[i][j]        -= 5;
        }
        //如果上方是箱子或者目的地上的箱子,同時更上方是空地或者目的地
        if ((cMap[i - 1][j] == 4 || cMap[i - 1][j] == 7) && 
            (cMap[i - 2][j] == 0 || cMap[i - 2][j] == 3))
        {
            cMap[i - 2][j] += 4;
            
            cMap[i - 1][j] += 1;
            cMap[i][j] -= 5;
        }
        
        break;
    case 'A':
    case 'a':
        //----------------------------------左移
        //如果左方是空地或者目的地
        if (cMap[i][j-1] == 0 || cMap[i][j-1] == 3)
        {
            cMap[i][j-1] += 5;
            cMap[i][j] -= 5;
        }
        //如果左方是箱子或者目的地上的箱子,同時更左方是空地或者目的地
        if ((cMap[i][j-1] == 4 || cMap[i ][j-1] == 7) &&
            (cMap[i][j-2] == 0 || cMap[i ][j-2] == 3))
        {
            cMap[i][j-2] += 4;
            cMap[i][j-1] += 1;
            cMap[i][j] -= 5;
        }
        break;
    case 'S':
    case 's':
        //----------------------------------下移
        //如果下方是空地或者目的地
        if (cMap[i + 1][j] == 0 || cMap[i + 1][j] == 3)
        {
            cMap[i + 1][j] += 5;
            cMap[i][j] -= 5;
        }
        //如果下方是箱子或者目的地上的箱子,同時更下方是空地或者目的地
        if ((cMap[i + 1][j] == 4 || cMap[i + 1][j] == 7) &&
            (cMap[i + 2][j] == 0 || cMap[i + 2][j] == 3))
        {
            cMap[i + 2][j] += 4;
            cMap[i + 1][j] += 1;
            cMap[i][j] -= 5;
        }
        break;
    case 'D':
    case 'd':
        //----------------------------------右移
        //如果右方是空地或者目的地
        if (cMap[i][j + 1] == 0 || cMap[i][j + 1] == 3)
        {
            cMap[i][j + 1] += 5;
            cMap[i][j] -= 5;
        }
        //如果右方是箱子或者目的地上的箱子,同時更右方是空地或者目的地
        if ((cMap[i][j + 1] == 4 || cMap[i][j + 1] == 7) &&
            (cMap[i][j + 2] == 0 || cMap[i][j + 2] == 3))
        {
            cMap[i][j + 2] += 4;
            cMap[i][j + 1] += 1;
            cMap[i][j] -=5;
        }
        break;
    }
    return 0;
}

int main()
{

    while (1)
    {
        GreatMap();
        FindManIndex();

        CreateActions();
        system("cls");
    }
    

    system("pause");
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM