黑马程序员技术交流社区

标题: [智力]小球推箱子源代码 [打印本页]

作者: 你说呢    时间: 2015-7-17 17:52
标题: [智力]小球推箱子源代码
本帖最后由 你说呢 于 2015-7-17 17:59 编辑

#include<stdio.h>
#define Row 10
#define Col 11
int main(){
        void printMap(char map[][Col]);
        void move(char map[][Col],int oldX,int oldY,int newX, int newY);
//********        定义变量
//        定义地图
        char map[Row][Col]={
                "##########",
                "#0 ####  #",
                "# X####  #",
                "#        #",
                "######   #",
                "#  ####  #",
                "#        #",
                "#   ######",
                "#         ",
                "##########"
                };
//        定义变量保存位置信息
        //小人的当前信息
        int personX=1,personY=1;
//                箱子的位子
        int boxX=2,boxY=2;
        char box='X';
// 小人下移动的一个位置信息
        int personNextX=1,personNextY=1;         

//        定义变量接受用户输入的方向       
        char direction,ch,street=' ';
//*****        打印地图
//        打印一边地图
        printMap(map);
//        编写循环控制程序
        printf("请输入移动方向:w.上 s.下 a.左 d.右 q.退出\n");
//        接受用户的输入方向
//        根据用户输入的方向判断如何移动       
//        判断方向
        while(1){
//                输入方向
        scanf("%c",&direction);scanf("%c",&ch);
//        防止穿墙
        personNextX=personX;
        personNextY=personY;
        switch(direction){
                case 'w':
                case 'W':
                        personNextX--;break;
                case 's':
                case 'S':
                        personNextX++;break;
                case 'A':
                case 'a':
                        personNextY--;break;
                case 'D':
                case 'd':       
                        personNextY++;break;
                case 'Q':
                case 'q':       
                        printf("程序正在退出.....\n");
                        printf("程序已经退出!\n");
                        return 0;
                default:
                        break;
                }
//        先判断小人的下一个位置是否是路
        if(map[personNextX][personNextY]==street){
                move(map,personX,personY,personNextX,personNextY);
                personX=personNextX;
                personY=personNextY;       
        }else //不是路那么是不是箱子
                if(map[personNextX][personNextY]==box){
                        int boxNextX=boxX+(boxX-personX);
                        int boxNextY=boxY+(boxY-personY);
//                        箱子下面是不是路
                        if(map[boxNextX][boxNextY]==street){
                                move(map,boxX,boxY,boxNextX,boxNextY);
                                move(map,personX,personY,boxX,boxY);
                                personX=personNextX;
                                personY=personNextY;
                                boxX=boxNextX;
                                boxY=boxNextY;        
                        }
                }
                printMap(map);
                if(boxY==Col-2){
                        printf("喔喔!!你竟然出来了!\n");
                        break;
                }
        }


}
//打印地图
void printMap(char map[][Col]){
        for(int i=0;i<Row;i++){
                printf("%s\n",map);        }
}
//move 小球移动位置
void move(char map[][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;
}


作者: 382780396    时间: 2015-7-19 00:09
参考一下
作者: zhaofeizlj    时间: 2015-7-19 13:01
参考一下!!!!!!!!!!!!!!!
作者: 默凉雨    时间: 2015-7-19 21:20
有意思。。。
作者: ylxkab    时间: 2015-7-20 09:12
我也来看看,考过了运行下。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2