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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 你说呢 中级黑马   /  2015-7-17 17:52  /  939 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 你说呢 于 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;
}

4 个回复

倒序浏览
参考一下
回复 使用道具 举报
参考一下!!!!!!!!!!!!!!!
回复 使用道具 举报
有意思。。。
回复 使用道具 举报
我也来看看,考过了运行下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马