黑马程序员-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;

    

    

}


黑马程序员_我的Linux基础整理笔记

Linux Linux文件目录和分区 文件目录: /:根目录 /root:存放root用户的相关文件 /home:存放普通用户的相关文件 /bin:存放普通用户的可执行命令 /sbin:...
  • zhengzhongjie1990
  • zhengzhongjie1990
  • 2014年07月05日 17:08
  • 1509

c++之简单的推箱子游戏

linux 可运行推箱子游戏,只有一个箱子,地图固定,人可以到达目标地点并且离开后,目标地点不会被刷掉。...
  • zhoutian_19950630
  • zhoutian_19950630
  • 2017年01月16日 16:46
  • 1772

一款用C语言编写的推箱子游戏(适合新手学习)

一款用C语言编写的推箱子游戏(适合新手学习),代码简洁。
  • Pastthewind
  • Pastthewind
  • 2016年09月07日 08:20
  • 13568

黑马程序员--C语言自学笔记---11数组、指针、推箱子小游戏

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------   1.   数组指针 1)        数组名只是代表数组的首地址,不代表整个数组...
  • biangabiang
  • biangabiang
  • 2015年12月21日 21:47
  • 717

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

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- C语言推箱子游戏代码实现: // // main.c // 推箱子游戏 // // C...
  • u011199045
  • u011199045
  • 2015年11月17日 16:55
  • 390

黑马程序员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

黑马程序员——IOS学习笔记(Object-c基础)

-----------android培训、java培训、IOS学习型技术博客、期待与您交流!------------  第一个OC程序: 打开Xcode,创建一个新项目 选择命令行...
  • u012386336
  • u012386336
  • 2015年09月22日 11:44
  • 251

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

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 这章,讲述了Objective-C相关联的C语言特性,大部分内容学过C语言的都...
  • dumengqiu
  • dumengqiu
  • 2014年12月21日 15:55
  • 902

黑马程序员——Objective-C程序设计(第4版)学习笔记之20-Cocoa和Cocoa Touch简介——黑马 IOS 技术博客

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Cocoa实际上由三个框架组成: 1)Foundation框架; ...
  • dumengqiu
  • dumengqiu
  • 2014年12月21日 16:04
  • 811
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员-IOS学习笔记 c实现 推箱子游戏
举报原因:
原因补充:

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