您的位置:首页 > 职场人生

黑马程序员-C基础-推箱子(入门级)笔记总结

2015-06-24 20:30 483 查看
                                                                                 推箱子(入门级)                                              

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

   一、思考-----实现此游戏的几个重点:

1)小人在移动的时候,如何判断下一步是一个箱子

2)小人推着箱子移动,箱子要移动的下一个位置也是路

3)要记录小人的位置、箱子的位置、箱子要移动的下一个位置

4)计算箱子的下一个位置

5)10*10地图,10*11存储

   虽然这个游戏看着很弱,不过也很开脑洞,对于新手入门,还是挺不错的。

   二、伪代码的实现:

思路://1、定义变量,保存地图、位置信息

      //2、打印地图

      //3、提示玩法

      //4、编写控制程序

      //5、接受玩家输入的方向数据

      //6、判断小人移动的方向

      //7、判断小人将要移动的位置是否是路

      伪代码开始我也觉得很没必要,可是当自己写程序时,丢三拉四,明白了伪代码对于我们新手来说,还是相当重要,可以理清我们的思路。等自己熟悉后自然可以省去。

实现:

#include <stdio.h>

int main(int argc, const char * argv[]) {

//******** 定义变量 **********

    //1、定义地图

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

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

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

     //2、打印一遍地图

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

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

    //4、判断方向

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

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

        //        如果是路,先让小人移动

        //        如果不是路,

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

    //              再次判断是否是箱子

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

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

    //                 如果箱子的下一个位置是路,要移动小人和箱子

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

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

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

    

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

//******   重绘地图 ***********

    // 6、重绘地图

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

    // 7、判断箱子是否被推出来了

    

    return 0;

}

 

 

     三、推箱子代码实现

#include <stdio.h>
#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]);
}

}

/**
*  移动的函数
*
*  @param map  <#map description#>
*  @param oldX <#oldX description#>
*  @param oldY
*  @param newX <#newX description#><#oldY description#>
*  @param newY <#newY description#>
*/
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 main(int argc, const char * argv[]) {

//******** 定义变量 **********

//1、定义地图
char map[kRows][kCols]={
"##########",
"#O ####  #",
"# X####  #",
"#        #",
"######   #",
"#  ####  #",
"#        #",
"#   ######",
"#         ",
"##########"};

//定义变量保存位置信息
//定义小人当前位置信息
int personX =1;
int personY =1;
//小人将要移动的下一个位置信息
int personNextX=personX;
int personNextY=personY;

//定义箱子的当前的位置
int boxX = 2;
int boxY = 2;

//定义变量接收用户输入的方向
char direction;

//定义路的字符
char street = ' ';
char box = 'X';
//*******  打印地图 **********

//2、打印一遍地图
printMap(map);
printf("请控制小人移动:w.上  s.下  a.左  d.右  q.退出\n");
//*******  编写循环控制程序 *****
while (1) {

//3、接收用户输入的方向
scanf("%c",&direction);
getchar();  //获取一个字符从键盘上

//防止穿墙
//0
personNextX = personX;  //1
personNextY = personY;  //1

//4、判断方向
switch (direction) {
case 'w':
case 'W':
//下一个位置-1
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;
}

//5、根据用户输入的方向 判断如何移动
if (map[personNextX][personNextY] == street) {
//        先判断小人的下一个位
a455
置是否 是路

//        如果是路,先让小人移动
//移动
//让小人和路进行交换
move1(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) {

//                 如果箱子的下一个位置是路,要移动小人和箱子
//                        如何移动小人和箱子呢?
//                        1)移动箱子到箱子的下一个位置
move1(map, boxX, boxY, boxNextX, boxNextY);
//                        2)让小人移动到箱子的原来的位置
move1(map, personX, personY, boxX, boxY);

//重新调整 箱子的位置和小人的位置
personX = personNextX;
personY = personNextY;

boxX = boxNextX;
boxY = boxNextY;

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

//******   重绘地图 ***********
// 6、重绘地图
printMap(map);
//*******  判断是否走出来 ******
// 7、判断箱子是否被推出来了
if (boxY==kCols-2) {
printf("哇哦!你推出来了!\n");
break;
}
//
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  入门游戏