C游戏 推箱子游戏
2016-05-02 15:34
369 查看
一、地图:
二、重点难点:
1)小人在移动的时候,如何判断下一个是箱子
2)小人推箱子移动,箱子移动的下一个位置是路
3)要记录箱子的位置、小人的位置、箱子要移动的下一个位置
4)计算箱子的下一个位置
5)10*10地图,10*11存储
三、伪代码的实现
1)定义变量,保存地图,位置信息
2)打印地图
3)提示玩法
4)编写控制程序
5)接收用户输入的方向数据
6)判断小人移动的方向
7)判断小人将要移动的位置是否是路
a.如果是路,则移动小人:小人与路交换位置
b.不是路,判断是否是箱子
c.如果是箱子,计算下一步要移动的位置
d.在判断下一个位置是否是路
e.如果是路,则小人推箱子移动
核心代码:箱子和下一个位置交换
小人与箱子位置交换
重新调整小人与箱子的位置
f.不是箱子,什么也不做
8)重新绘制地图
9)判断是否推出来(如果箱子y方向的值==9)
四、具体实现
二、重点难点:
1)小人在移动的时候,如何判断下一个是箱子
2)小人推箱子移动,箱子移动的下一个位置是路
3)要记录箱子的位置、小人的位置、箱子要移动的下一个位置
4)计算箱子的下一个位置
5)10*10地图,10*11存储
三、伪代码的实现
1)定义变量,保存地图,位置信息
2)打印地图
3)提示玩法
4)编写控制程序
5)接收用户输入的方向数据
6)判断小人移动的方向
7)判断小人将要移动的位置是否是路
a.如果是路,则移动小人:小人与路交换位置
b.不是路,判断是否是箱子
c.如果是箱子,计算下一步要移动的位置
d.在判断下一个位置是否是路
e.如果是路,则小人推箱子移动
核心代码:箱子和下一个位置交换
小人与箱子位置交换
重新调整小人与箱子的位置
f.不是箱子,什么也不做
8)重新绘制地图
9)判断是否推出来(如果箱子y方向的值==9)
四、具体实现
#include <stdio.h> #define row 10 #define col 11 //包含\0 //打印地图 void printMap(char map[row][col]){ for (int i = 0; i < row; i ++) { printf("%s\n",map[i]); } } void swithPosition(char map[row][col], 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[row][col] ={ "##########", "#O ### #", "# X### #", "# #", "###### #", "# ### #", "# #", "# ######", "# ", "##########" }; //小人当前位置 int currentManX = 1; int currentManY = 1; //小人下个位置 int nextManX = currentManX; int nextManY = currentManY; //箱子的当前位置 int currentBoxX = 2; int currentBoxY = 2; //箱子的下一个位置 int nextBoxX = currentBoxX; int nextBoxY = currentBoxY; //用户输入的方向 char direction ;//方向 char load = ' ';//路 char box = 'X';//箱子 //2)打印地图 printMap(map); //3)提示玩法 printf("游戏玩法,w 向上 s 向左 x 向下 f向右,q 退出\n"); //4)编写控制程序 while(1){ //5)接收用户输入的方向数据 scanf("%c",&direction); getchar();//获取一个字符 //防止穿墙 nextManX = currentManX; nextManY = currentManY; //6)判断小人移动的方向 switch (direction) { case 'W': case 'w': //上 nextManX --; break; case 'S': case 's'://下 nextManX ++; break; case 'A': case 'a'://左 nextManY --; break; case 'D': case 'd': nextManY ++; break; case 'q': case 'Q': printf("游戏正在推出...."); printf("游戏已经退出!"); return 0; break; } //7)判断小人将要移动的位置是否是路 //a.如果是路,则移动小人:小人与路交换位置 //b.不是路,判断是否是箱子 //c.如果是箱子,计算下一步要移动的位置 //d.在判断下一个位置是否是路 //e.如果是路,则小人推箱子移动 //f.不是箱子,什么也不做 //判断是否是路 if (map[nextManX][nextManY] == load) { //小人与路交换位置 swithPosition(map,currentManX,currentManY,nextManX,nextManY); //调整小人的位置 currentManX = nextManX; currentManY = nextManY; }else if (map[nextManX][nextManY] == box) {//如果是箱子, //计算下一步要移动的位置 nextBoxX = currentBoxX + (currentBoxX - currentManX); nextBoxY = currentBoxY + (currentBoxY - currentManY); if(map[nextBoxX][nextBoxY] == load){ //箱子与路交换位置 swithPosition(map,currentBoxX,currentBoxY,nextBoxX,nextBoxY); //小人与路交换位置 swithPosition(map,currentManX,currentManY,currentBoxX,currentBoxY); //调整小人的位置 currentManX = nextManX; currentManY = nextManY; //调整箱子的位置 currentBoxX = nextBoxX; currentBoxY = nextBoxY; } } //8)重新绘制地图 printf("\n"); printMap(map); //9)判断是否推出来(如果箱子y方向的值==9) if (currentBoxY == col - 2) { printf("成功了,您推出来了"); break; } } printf("\n"); return 0; }
相关文章推荐
- void *变量用法
- SpringData 学习(6)—— 学习 Repository 接口的第 1 个子接口 CRUDRepository
- 开源Math.NET基础数学类库使用(01)综合介绍
- Design 控件学习
- 括号匹配练习
- 时间序列 R 07 时间序列分解 Time series decomposition
- 时间序列 R 08 指数平滑 Exponential smoothing
- exam1802 Bounty Hunter II(DAG的最小路径覆盖)
- 第1章 引言
- SICP ex1-17 ex-18 ex1-19
- Intent实现简易文件浏览查看器
- 时间序列 R 09 ARIMA
- 时间序列 R 10 其他进阶预测方法 Advanced forecasting methods
- redis安装
- 命令行创建maven模块工程
- EntityFramework之迁移操作(五)
- 冒泡排序
- 70. Climbing Stairs
- 网上名人推荐的好书
- eclipse中要让一个 Java 源文件打开时编码格式为 UTF-8