C实现的推箱子游戏

本文介绍了使用C语言实现的推箱子游戏,包括功能介绍、画图方法、移动逻辑、赢游戏的判断以及返回上一步的实现。游戏通过二维数组记录状态,支持关卡选择和退出功能。移动逻辑涉及多种情况判断,如空地、墙壁、箱子与目标的位置关系。赢的条件是所有箱子到达目标位置。返回上一步通过记录移动前的状态实现。文章还展示了部分代码和游戏截图。
摘要由CSDN通过智能技术生成

C实现的推箱子游戏

完整的代码在最后面

功能介绍

  1. 选择游戏模式
  2. 可以选择关卡
  3. 任意时候可以退出游戏
  4. 返回上一步功能

画图

后端用一个二维数组来记录,输出的时候根据数组中的值输出不同符号,
比如值为1的时候输出下面1对应的符号,符号在word符号库中copy。

我这个游戏用的符号:
□–空白 1
█–墙壁 2
▓–箱子 3
♀–人 4
☆–目标 5
○–覆盖目标后 6

定义一个全局变量记录等级,每过一关等级加1,根据等级绘制不同地图

移动

思路:获取四个方向并且分别用函数判断,根据情况返回不同值,
情况分为以下几种:

  • 移动位置是空 return 1
  • 移动位置是箱子,箱子后面是空白 return 2
  • 移动位置是箱子,箱子后面是目标 return 3
  • 移动位置是目标 return 4
  • 移动目标是已经压着目标的箱子,箱子后面是空白 return 5
  • 移动目标是已经压着目标的箱子,箱子后面是目标 return 6
  • 其余的(移动目标是墙之类的) return 0

获取到这些值之后进一步操作:

  • 1 : 直接移动
  • 2 :箱子推过去
  • 3 :箱子推过去后变为压着目标的箱子
  • 4 :直接移动,并且用一个全局变量来标记 人站着的位置是否压着目标
  • 5 :箱子推过去,并且用变量标记人的位置压着目标
  • 6 :箱子推过去依然是压着目标的箱子,用变量标记人的位置压着目标
  • 7 :重新获取数据,不做其他任何操作

截取一段向上移动的代码

else if (flag == 72) {
   		// 72是方向向上键
		res = up();
		if (res){
    
			numStep++;
			push(S, flag);		//依次将方向、是否踩目标、下一位置、下下位置压栈,方便返回上一步
			push(S, isOccured);
			push(S, map[personI - 1][personJ]);
			push(S, map[personI - 2][personJ]);
		}
		switch (res) {
   
		case 1: {
   			//直接移动
				if (isOccured) {
   		//人压着目标的话,移动之后还原为目标
					map[personI][personJ] = 5;
					isOccured = 0;
				}
				else
					map[personI][personJ] = 1;
				map[personI - 1][personJ] = 4;
				personI--;
			}
				break;
		case 2:{
   			//箱子推过去
				if (isOccured) {
   
					map[personI][personJ] = 5;
					isOccured = 0;
				}
				else
					map[personI]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值