推箱子小游戏源码

16 篇文章 0 订阅


//思路分析及伪代码

//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<kRows;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;
}
}
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值