黑马程序员-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;
}
三、推箱子代码实现
------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; }
相关文章推荐
- 让程序员跳槽的非钱原因
- 阅读一个程序员的生命周期有感
- 黑马程序员--java 类的继承
- 黑马程序员--Java中的split函数的用法
- 黑马程序员---集合类
- 就业季必看的职业规划
- 黑马程序员---Java SE 7引入的三个新特性
- 黑马程序员---Java注解Annotations的详解以及使用实例
- 黑马程序员--C基础--循环结构总结
- 黑马程序员_多线程_2
- 黑马程序员_多线程_1
- HR面试五大经典问题和问答
- 程序员看法上的几个典型错误
- "蓝筹"程序员是如何炼成的?
- java面试核心基础(1)
- 程序员喜欢怎样的职位描述?
- 和程序员打交道的十大禁忌
- 黑马程序员——Java基础:String类、StringBuffer、基本数据类型对象包装类
- 老菜鸟致青春,程序员应该选择java 还是 c#-(转)
- 剑指offer 面试题7