c实现 推箱子游戏

原创 2015年07月09日 13:55:17

#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语言实现推箱子小游戏

#include #include #include #define N 1000 /* r目的地  o箱子  i人  x墙   路(空格)  w上  a左  d右  s下  */ void menu...
  • qq_34624951
  • qq_34624951
  • 2016年04月11日 22:38
  • 999

C语言-推箱子游戏代码

推箱子游戏的运行规则:在街道上上小人推动箱子移动,直到把箱子移动到目的地。 思路分析: 小人及箱子的移动就是小人或者箱子和路的交换; 1 定义二维字符数组,存储地图 2 显示地图,提示游戏玩法...
  • zhudong10
  • zhudong10
  • 2015年10月24日 23:50
  • 3317

C语言之推箱子游戏代码

每天学习一点点,每天容易一点点。一个简单的C语言程序,用来复习c语言,代码通俗易懂。有什么问题望各位不吝赐教。/******************************************* ...
  • Yan_Less
  • Yan_Less
  • 2017年06月14日 22:56
  • 1759

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

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

自己动手写推箱子游戏——界面(源码)

MFC开发自己的推箱子游戏 第一:推箱子游戏的主界面    游戏的主界面其实就是8×8的区域,在初始化函数中定义它们的矩形区域,里面是我自己收集的8个选关 void CPushBoxDlg::Ini...
  • jin123wang
  • jin123wang
  • 2011年08月08日 14:10
  • 3167

C++实现推箱子游戏

一,项目简介 用两天闲余时间回顾了推箱子这款经典的小游戏,目前设置了5关,只能实现基本的人物移动。判断胜利条件,其他功能还未实现(例:撤回到上一步,自由选择关卡等),也顺便复习了C++的相关知识。 ...
  • Amumu12138
  • Amumu12138
  • 2018年01月12日 11:00
  • 128

JAVA开发的一个推箱子游戏原型

自从打通了JAVA的任督二脉之后,想法不断出现,想停下来都不行,逼的只能编程实现。下面是开发一个简单的推箱子游戏。       推箱子游戏很简单,用C大一的学生都做出来,关键要解决的问题有:地图, 元...
  • andywxf01
  • andywxf01
  • 2016年12月07日 22:37
  • 1081

Qt实现推箱子小游戏

学习Qt有一个月了,想要实现一个推箱子的游戏来检验一下自己。今天先设计一下将要完成的具体表现,因为是第一次做,所以设计的稍微简单点,以后逐渐修改。首先要创建菜单栏,分为三个主菜单,第一个主菜单为开始游...
  • q5512049
  • q5512049
  • 2015年08月05日 16:52
  • 3033

Java实现的推箱子游戏,H5 版坦克大战游戏

用java的swing实现的推箱子小游戏,并且有地图自动生成程序。(即游戏关卡自己创建) 最新版H5实现的坦克大战,源码开放,体验地址:http://v587.jsp.jspee.com.cn/ ...
  • wzj26638719
  • wzj26638719
  • 2012年05月18日 15:02
  • 3551

用C++写的推箱子小游戏2.2(支持步数显示,回撤,穿墙,闯关,输入等功能)

用C++写的推箱子游戏2.2 推箱子游戏支持回滚,步数显示,回撤,穿墙,闯关,输入等操作。 含控制台上运行的代码。...
  • qq_35963183
  • qq_35963183
  • 2016年09月03日 19:47
  • 1466
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c实现 推箱子游戏
举报原因:
原因补充:

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