A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//小人在移动的时候,如何判断下一步是一个箱子
//小人推着箱子,箱子要移动的下一个位置
//要记录小人的位置、箱子的位置、箱子要移动的下一个位置
//计算箱子的下一个位置
//10*10地图,10*11存储
#include "stdio.h"
#define  Row 10
#define  Col 11//因为是推箱子的地图是义字符串输出的,每行字符串的末尾,有默认的'\0'结束符
void printMap(char map[Row][Col])
{
        int i=0;
        for (i=0;i<Row;i++)
        {
                printf("%s\n",map[i]);
        }
}
//移动函数
void move1(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()
{
        //1、定义变量
        char map[Row][Col]={
                "##########",
                "#0 ####  #",
                "# X####  #",
                "#        #",
                "######   #",
                "#  ####  #",
                "#        #",
                "#   ######",
                "#         ",
                "##########",
        };
        //定义小人当前位置信息
    int personX=1;
        int personY=1;
        //定义小人下一个位置
        int personNextX=personX;
        int personNextY=personY;
        int boxX=2;
        int boxY=2;
        int boxNextX=boxX;
        int boxNextY=boxY;
        char direction;
        char street=' ';
        char box='X';
    //2、打印地图
        printMap(map);
        //游戏说明
        printf("请控制小人移动:w.上,s.下,l.左,r.右\n");
        //3、编写循环控制程序
        while(1)
        {
        //4、接收用户输入的方向
        scanf("%c",&direction);
                getchar();//获取一个字符从键盘上
                //防止小人穿墙
                personNextX=personX;
                personNextY=personY;
        //5、判断方向
                switch(direction)
                {
                case  'w':
                case  'W':
            personNextX--;
                        break;
                case  's':
                case  'S':
                        personNextX++;
                        break;
                case  'l':
                case  'L':
                        personNextY--;
                        break;
                case  'r':
                case  'R':
                        personNextY++;
                        break;
                case  'q':
                case  'Q':
                        printf("程序正在退出...\n");
                        printf("程序已经退出!\n");
                        return 0;
                default:
                        break;

                }
               
        //6、根据用户输入的方向,判断如何移动
            //先判断小人的下一个位置是否是路
            //如果是路,先让小人移动
                if (map[personNextX][personNextY]==street)
                {
                        //让小人和路进行交换
                        move1(map,personX,personY,personNextX,personNextY);
                        //重新调整小人的位置
                        personX=personNextX;
                        personY=personNextY;
                }else if (map[personNextX][personNextY]==box)
                {
                        // 如果不是路
                        //再判断是否是箱子
                        //如果是箱子,计算箱子的下一个位置
             boxNextX=boxX+(boxX-personX);//计算箱子的下一个位置的X坐标的公式
                         boxNextY=boxY+(boxY-personY);//计算箱子的下一个位置的Y坐标的公式
                        //再次判断箱子的下一个位置是否是路,要移动小人和箱子
                         if (map[boxNextX][boxNextY]==street)
                         {
                                 //移动箱子到箱子的下一个位置
                                 move1(map,boxX,boxY,boxNextX,boxNextY);
                                 //让小人移动到箱子的原来的位置
                                 move1(map,personX,personY,boxX,boxY);
                                 //重新调整箱子和小人的位置
                                 personX=personNextX;
                                 personY=personNextY;
                                 boxX=boxNextX;
                                 boxY=boxNextY;
                         }
                }

          
           //如果不是箱子,什么也不干
        //7、重绘地图
                printMap(map);
        //8、判断箱子是否推出
                if (boxY==Col-2)
                {
                        printf("恭喜你推箱子成功!\n");
                        break;
                }
        }
     // scanf("%s",map);  
   return 0;
}

1 个回复

倒序浏览
很好玩的游戏,做成功了就很有意思
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马