C游戏 推箱子游戏

一、地图:
这里写图片描述
二、重点难点:
1)小人在移动的时候,如何判断下一个是箱子
2)小人推箱子移动,箱子移动的下一个位置是路
3)要记录箱子的位置、小人的位置、箱子要移动的下一个位置
4)计算箱子的下一个位置
5)10*10地图,10*11存储
三、伪代码的实现
1)定义变量,保存地图,位置信息
2)打印地图
3)提示玩法
4)编写控制程序
5)接收用户输入的方向数据
6)判断小人移动的方向
7)判断小人将要移动的位置是否是路
a.如果是路,则移动小人:小人与路交换位置
b.不是路,判断是否是箱子
c.如果是箱子,计算下一步要移动的位置
d.在判断下一个位置是否是路
e.如果是路,则小人推箱子移动
核心代码:箱子和下一个位置交换
小人与箱子位置交换
重新调整小人与箱子的位置
f.不是箱子,什么也不做
8)重新绘制地图
9)判断是否推出来(如果箱子y方向的值==9)

四、具体实现

#include <stdio.h>
#define row  10
#define col  11 //包含\0
//打印地图
void printMap(char map[row][col]){
    for (int i = 0; i < row; i ++) {
        printf("%s\n",map[i]);
    }
}
void swithPosition(char map[row][col], int oldX, int oldY, int newX, int newY){
    char temp;
    temp = map[oldX][oldY];
    map[oldX][oldY] = map[newX][newY];
    map[newX][newY] = temp;
}
/*核心代码:箱子和下一个位置交换
 小人与箱子位置交换
 重新调整小人与箱子的位置
 */
int main(int argc, const char * argv[])
{

    //1)定义变量:保存地图,位置信息
    char map[row][col] ={
    "##########",
    "#O ###   #",
    "# X###   #",
    "#        #",
    "######   #",
    "#  ###   #",
    "#        #",
    "#   ######",
    "#         ",
    "##########"
    };
    //小人当前位置
    int currentManX = 1;
    int currentManY = 1;
    //小人下个位置
    int nextManX = currentManX;
    int nextManY = currentManY;

    //箱子的当前位置
    int currentBoxX = 2;
    int currentBoxY = 2;
    //箱子的下一个位置
    int nextBoxX = currentBoxX;
    int nextBoxY = currentBoxY;

    //用户输入的方向
    char direction ;//方向
    char load = ' ';//路
    char box = 'X';//箱子
    //2)打印地图
    printMap(map);
    //3)提示玩法
    printf("游戏玩法,w 向上 s 向左 x 向下 f向右,q 退出\n");
    //4)编写控制程序
    while(1){

    //5)接收用户输入的方向数据
        scanf("%c",&direction);
        getchar();//获取一个字符

        //防止穿墙
        nextManX = currentManX;
        nextManY = currentManY;


    //6)判断小人移动的方向
        switch (direction) {
            case 'W':
            case 'w': //上
                nextManX --;

                break;
            case 'S':
            case 's'://下
                nextManX ++;
                break;
            case 'A':
            case 'a'://左
                nextManY --;
                break;
            case 'D':
            case 'd':
                nextManY ++;
                break;
            case 'q':
            case 'Q':
                printf("游戏正在推出....");
                printf("游戏已经退出!");
                return 0;
                break;


        }
        //7)判断小人将要移动的位置是否是路
        //a.如果是路,则移动小人:小人与路交换位置
        //b.不是路,判断是否是箱子
        //c.如果是箱子,计算下一步要移动的位置
        //d.在判断下一个位置是否是路
        //e.如果是路,则小人推箱子移动
        //f.不是箱子,什么也不做

        //判断是否是路
        if (map[nextManX][nextManY] == load) {
            //小人与路交换位置
            swithPosition(map,currentManX,currentManY,nextManX,nextManY);
            //调整小人的位置
            currentManX = nextManX;
            currentManY = nextManY;
        }else if (map[nextManX][nextManY] == box) {//如果是箱子,
            //计算下一步要移动的位置
            nextBoxX = currentBoxX + (currentBoxX - currentManX);
            nextBoxY = currentBoxY + (currentBoxY - currentManY);

            if(map[nextBoxX][nextBoxY] == load){
                //箱子与路交换位置
                swithPosition(map,currentBoxX,currentBoxY,nextBoxX,nextBoxY);
                //小人与路交换位置
                swithPosition(map,currentManX,currentManY,currentBoxX,currentBoxY);
                //调整小人的位置
                currentManX = nextManX;
                currentManY = nextManY;

                //调整箱子的位置
                currentBoxX = nextBoxX;
                currentBoxY = nextBoxY;



            }
        }

        //8)重新绘制地图
        printf("\n");
        printMap(map);
        //9)判断是否推出来(如果箱子y方向的值==9)
        if (currentBoxY == col - 2) {
            printf("成功了,您推出来了");
            break;
        }

    }

    printf("\n");
    return 0;
}

—————————————————–
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
请先拍 购买地址, 下载请用百度盘
目录如下:
01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)

01高级架构师四十二个阶段高内容:
这里写图片描述
这里写图片描述
—————————————————–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值