推箱子小游戏源码


//思路分析及伪代码

//First
//推箱子小游戏
//存在的重点:
//1)小人在移动的时候,如何判断下一步是一个箱子
//2)小人推着箱子移动,箱子要移动的下一个位置也是路
//3)要记录小人的位置、箱子的位置、箱子要移动的下一个位置
//4)计算箱子的下一个位置
//5)10*10地图,10*11存储
//Second
//《推箱子》伪代码实现
//1、定义变量,保存地图、位置信息
//  ①定义地图
//    ②定义变量保存位置信息
//    ③定义变量接收用户输入的方向
//2、打印地图
//    ①打印一遍地图
//3、编写循环控制程序
//    ①接收用户输入的方向
//4、判断模块
//  ②判断方向
//    ③根据用户输入的方向,判断如何移动
//          先判断小人的下一个位置是否是路
// 如果是路,先让小人移动
// 如果不是路,
// 再次判断是否是箱子
// 如果是箱子,计算箱子的下一个位置
//              再次判断箱子的下一个位置是否是路
// 如果箱子的下一个位置是路,要移动小人和箱子
// 如何移动小人和箱子
// ①移动箱子到箱子的下一个位置
// ②让小人移动到原来箱子的位置
// 如果不是箱子,则什么也不用处理
//5、重绘地图
//6、判断是否走出来,即箱子是否被推出来了


#include "stdafx.h"
#define kRows 10
#define kCols 11
//打印地图
void printMap(char map[kRows][kCols]){
for(int i=0;i printf("%s\n",map[i]);
}
}


//
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;
}
void main(){
char map[kRows][kCols]={
"##########",
"#0 ####  #",
"# X####  #",
"#        #",
"######   #",
"#  ####  #",
"#        #",
"#   ######",
"#         ",
"##########",
};
//定义小人当前的位置信息
int personX=1,personY=1;
//定义箱子当前的位置
int boxX=2,boxY=2;
//小人将要移动的下一个位置信息
int personNextX=personX,personNextY=personY;
char direction;
char street=' ';
char box='X';
//打印地图
printMap(map);
printf("请控制小人移动:W->上 S->下 A->左 D->右 Q->退出\n");
while(1){
scanf("%c",&direction);
getchar();
//防止穿墙
personNextX=personX;
personNextY=personY;
switch(direction){
case 'A':
case 'a':
personNextY--;
   break;
case 'S':
case 's':
   personNextX++;
   break;
case 'W':
case 'w':
   personNextX--;
   break;
case 'd':
case 'D':
   personNextY++;
   break;
case 'Q':
case 'q':
printf("程序正在退出...\n");
printf("程序已经退出!\n");
   break;
default:
   break;
}
if(map[personNextX][personNextY]==street){
//移动,让小人和路进行交换
move1(map,personX,personY,personNextX,personNextY);
//重新调整小人的位置
personX=personNextX;
personY=personNextY;
//重绘地图
printMap(map);
}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,boxX,boxY);
//重新调整箱子的位置和小人的位置
personX=personNextX;
personY=personNextY;
boxX=boxNextX;
boxY=boxNextY;
}
}
printMap(map);
if(boxY==kCols-2){
printf("哇哦,你出来了!");
break;
}
}
}

你可能感兴趣的:(IOS,C语言)