完整版本的推箱子小游戏,最简单的纯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;
}

 

posted @ 2018-07-08 20:34  邪气凛然  阅读(1516)  评论(0编辑  收藏  举报