黑马程序员-IOS学习笔记 c实现 推箱子游戏

原创 2015年07月11日 10:31:43

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-------


#define kRows 10

#define kCols 11


/*

    打印地图

    @param map 地图的数组

 */

void printMap(char map[kRows][kCols]){

    for (int i=0; i<kRows; i++) {

        printf("%s\n",map[i]);  // 由于map[i]代表每一行的首地址,遇到\0结束

    }


}


/*

    移动的函数

 

 */

void move1(char map[kRows][kCols],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 demo8(){

    

    // ******** 定义变量,保存地图,位置信息 ********

    

    //1、定义地图

    char map[kRows][kCols]={

        "##########",

        "#0 ####  #",

        "# X####  #",

        "#        #",

        "######   #",

        "#  ####  #",

        "#        #",

        "#   ######",

        "#         ",

        "##########",

        

    };

    

    //定义变量保存位置信息

    

    //定义小人当前位置信息

    int personX = 1;

    int personY = 1;

    //小人将要移动的下一个位置信息

    int personNestX = personX;

    int personNestY = personY;

    

    //定义箱子的当前位置

    int boxX = 2;

    int boxY = 2;

    

    //定义变量接收用户输入方向

    char direction;

    

    //定义路的字符

    char street = ' ';

    

    //定箱子的字符

    char box ='X';

    

    // ******** 打印地图 ********

    //2、打印一边地图

    printMap(map);

    

    printf("请控制小人移动:w=上 s=下 s=左 d=右 q=退出\n");

    

    // ******** 编写循环控制程序 ********

    while (1) {

        

    //3,接收用户输入的方向

        scanf("%c",&direction);

        getchar();  //获取一个字符 吸收回车符

        

        //防止穿墙

        personNestX = personX;

        personNestY = personY;

        

    //4、判断方向

        switch (direction) {

            case 'w':

            case 'W':

                //下一个位置 -1

                personNestX--;

                

                break;

            case 's':

            case 'S':

                personNestX++;

                

                break;

            case 'a':

            case 'A':

                personNestY--;

                

                break;

            case 'd':

            case 'D':

                personNestY++;

                

                break;

            case 'q':

            case 'Q':

                return 0;

                break;

            default:

                break;


        }

    

    

    //5、根据用户输入的方向 判断如何移动

        

        //      先判断小人的下个位置 是否是路

        

        //          是路:先让小人移动

        

        if(map[personNestX][personNestY]==street){

            //移动,让小人和路进行交换

            move1(map,personX,personY,personNestX,personNestY);

            

            //重新调整小人的位置

            personX = personNestX;

            personY = personNestY;

            

        }else if(map[personNestX][personNestY]==box){

         

    

    //          不是路:

    // ******** 判断模块 ********

    //                  再次判断是否是箱子

    //                      如果是箱子,计算箱子的下一个位置

            int boxNextX = boxX + (boxX - personX);

            int boxNextY = boxY + (boxY - personY);

            

    //                          再次判断箱子的下一个位置是否是路

            if (map[boxNextX][boxNextY]==street) {

    //                              如果是路,要移动小人和箱子

    //                                  如何移动小人和箱子?

    //                                  1)移动箱子到箱子的下一个位置

                move1(map, boxX, boxY, boxNextX, boxNextY);

    //                                  2)让小人移动到箱子原来的位置

                move1(map, personX, personY, boxX, boxY);

                

                //重新调整 箱子和小人的位置

                personX = personNestX;

                personY = personNestY;

                

                boxX = boxNextX;

                boxY = boxNextY;

            }

    //                      如果不是箱子,什么也不干

        }

    

    

    

    // ******** 刷新地图 ********

        printMap(map);

    // ******** 判断是否走出来 ********

        if(boxY == kCols-2){

            printf("哈哈!你成功完成任务!\n");

            break;

        }

    }

    

    return 0;

    

    

}


相关文章推荐

黑马程序员——C基础---推箱子游戏的代码实现

黑马程序员——C基础---推箱子游戏的代码的简单实现 ------- android培训、java培训、期待与您交流! ----------...

【黑马程序员】C语言—推箱子游戏实现

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- C语言推箱子游戏代码实现: // // main.c // 推箱子游戏 // // C...

黑马程序员JNI学习笔记

  • 2013年05月23日 23:49
  • 37KB
  • 下载

黑马程序员_第二天_iOS学习笔记之C数据类型和使用

C的关键字auto double int struct break else long sitch case enum register typedef char extern return unio...
  • tutucoo
  • tutucoo
  • 2015年06月11日 23:03
  • 202

黑马程序员——Objective-C程序设计(第4版)学习笔记之08-继承——黑马 IOS 技术博客

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一切从根类开始: 没有父类的类,位于类层次结构的最顶层,称为根(...

黑马程序员——Objective-C程序设计(第4版)学习笔记之07-类——黑马 IOS 技术博客

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 要注意的一件事情(这个和C语言差不多,就是头文件引用规则): 导入的文件...

黑马程序员——Objective-C程序设计(第4版)学习笔记之10-变量和数据类型——黑马 IOS 技术博客

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 枚举数据类型可以为只存储一些值的链表这种数据类型定义名称。Objective-...

黑马程序员——Objective-C程序设计(第4版)学习笔记之17-内存管理和自动引用计数——黑马 IOS 技术博客

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 内存管理关心的是清理(回收)不用的内存,以便内存能够再次利用。 ...

黑马程序员——Objective-c学习笔记——类(面向对象)——黑马 ios 技术博客

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Objective-c学习笔记02——类(面向对象)01 O...

黑马程序员——Objective-C程序设计(第4版)学习笔记之13-基本的C语言特性——黑马 IOS 技术博客

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 这章,讲述了Objective-C相关联的C语言特性,大部分内容学过C语言的都...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员-IOS学习笔记 c实现 推箱子游戏
举报原因:
原因补充:

(最多只允许输入30个字)