应用:推箱子游戏
2015-05-18 23:59
176 查看
推箱子游戏
跟着视频慢慢敲出来的,虽然游戏简单,但运行成功的那一刻还是蛮有成就感的。
#include <stdio.h>
#define ROW 10
#define COL 11
/**
* 打印地图
*
* @param map
传入的地图
*/
void printMap(char map[ROW][COL]){
for (int i =
0; i < ROW; i ++) {
printf("%s\n", map [i]);
}
}
/**
* 移动到下一位置
*
* @param map
地图
* @param oldX
移动前x
* @param oldY
移动前y
* @param newX
移动后x
* @param newY
移动后y
*/
void move1(char map[ROW][COL],
int oldX, int oldY,
int newX, int newY){
//
交换位置
int temp;
temp = map[oldX][oldY];
map[oldX][oldY] = map[newX][newY];
map[newX][newY] = temp;
}
int main(int argc,
const char * argv[]) {
//**********
定义变量 *************
//
定义地图
char map[ROW][COL] ={
"##########",
"#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';
//**********
打印地图 *************
//
打印一遍地图
printMap(map);
//**********
循环控制 *************
//
提示用户输入指令
printf("请输入指令:w.上 s.下
a.左 d.右 q.退出\n");
//
进行循环控制
while (1) {
//
接收用户输入的指令
scanf("%c", &direction);
getchar();
// 用来吸收多余的‘\n’
//
判断用户输入的指令
switch (direction) {
case 'w':
case 'W':
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("程序已经退出。");
return 0;
default:
break;
}
//*********
判断移动情况 ***********
//
先判断小人的下一个位置是不是路
if (map[personNextX][personNextY] == street) {
//
如果是路,先让小人移动
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) {
//
如果箱子的下一位置是路,移动箱子和小人
move1(map, boxX, boxY, boxNextX, boxNextY);
// 先移动箱子到箱子的下一位置
move1(map, personX, personY, personNextX, personNextY);
// 然后移动小人到箱子的位置
// 重新保存箱子和小人的位置
personX = personNextX;
personY = personNextY;
boxX = boxNextX;
boxY = boxNextY;
}
} else {
// 如果不是路也不是箱子,那就是墙壁
//
小人保持当前位置不变
personNextX = personX;
personNextY = personY;
}
//*********
重绘地图 **************
// 重绘地图
printMap(map);
//*********
判断箱子是否移出 *******
//
判断箱子是否推出
if (boxY == COL -
2) {
printf("你推出来了!");
break;
}
}
return 0;
}
跟着视频慢慢敲出来的,虽然游戏简单,但运行成功的那一刻还是蛮有成就感的。
#include <stdio.h>
#define ROW 10
#define COL 11
/**
* 打印地图
*
* @param map
传入的地图
*/
void printMap(char map[ROW][COL]){
for (int i =
0; i < ROW; i ++) {
printf("%s\n", map [i]);
}
}
/**
* 移动到下一位置
*
* @param map
地图
* @param oldX
移动前x
* @param oldY
移动前y
* @param newX
移动后x
* @param newY
移动后y
*/
void move1(char map[ROW][COL],
int oldX, int oldY,
int newX, int newY){
//
交换位置
int temp;
temp = map[oldX][oldY];
map[oldX][oldY] = map[newX][newY];
map[newX][newY] = temp;
}
int main(int argc,
const char * argv[]) {
//**********
定义变量 *************
//
定义地图
char map[ROW][COL] ={
"##########",
"#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';
//**********
打印地图 *************
//
打印一遍地图
printMap(map);
//**********
循环控制 *************
//
提示用户输入指令
printf("请输入指令:w.上 s.下
a.左 d.右 q.退出\n");
//
进行循环控制
while (1) {
//
接收用户输入的指令
scanf("%c", &direction);
getchar();
// 用来吸收多余的‘\n’
//
判断用户输入的指令
switch (direction) {
case 'w':
case 'W':
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("程序已经退出。");
return 0;
default:
break;
}
//*********
判断移动情况 ***********
//
先判断小人的下一个位置是不是路
if (map[personNextX][personNextY] == street) {
//
如果是路,先让小人移动
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) {
//
如果箱子的下一位置是路,移动箱子和小人
move1(map, boxX, boxY, boxNextX, boxNextY);
// 先移动箱子到箱子的下一位置
move1(map, personX, personY, personNextX, personNextY);
// 然后移动小人到箱子的位置
// 重新保存箱子和小人的位置
personX = personNextX;
personY = personNextY;
boxX = boxNextX;
boxY = boxNextY;
}
} else {
// 如果不是路也不是箱子,那就是墙壁
//
小人保持当前位置不变
personNextX = personX;
personNextY = personY;
}
//*********
重绘地图 **************
// 重绘地图
printMap(map);
//*********
判断箱子是否移出 *******
//
判断箱子是否推出
if (boxY == COL -
2) {
printf("你推出来了!");
break;
}
}
return 0;
}
相关文章推荐
- 第十二天学习内容 综合应用 推箱子和对战游戏
- 指针小应用:推箱子游戏
- 俄罗斯游戏软件:C语言应用初步感受
- 游戏------深度优先遍历的应用
- 从游戏开发到应用开发的转变
- Redis在游戏开发中的典型应用
- Android开发入门——推箱子游戏开发实战(二)
- 金山张宴:PHP在金山游戏运营中的应用
- 91无线报告:Android应用下载量翻番 手机游戏占30%
- 物理小球在游戏中的应用
- Android由应用主导,iOS被游戏霸占
- 位运算 游戏开发中的应用
- 策略模式的应用——游戏中武器的选择
- 【网易游戏】推箱子
- 推荐12个亲测Android开发源码(包括应用、游戏、效果等等)
- 盘点大数据在游戏行业中的应用
- App Zap的非常货币化策略:付费游戏的应用内购买
- JAVA推箱子游戏(一)
- 有限状态机在游戏中的应用
- 金山换帅张宏江 从游戏回归应用 推荐