用C语言实现经典的小游戏------推箱子

思考与准备

  首先,与走迷宫一样,实现推箱子,我们可以采用 二维数组 的方式,通过改变人的坐标来实现走动的效果。

  我们额外用到的头文件有:

  • #include<getch.h>
      通过调用getch()函数来识别 上下左右的操作。
  • #include<stdlib.h>
      采用 system(“clear”);清理屏幕,实现视觉上的走动效果。

大致思路

  • 1、确定数字与子符的对应关系
       路      0
      墙壁      1
       人      2
      箱子      3
       目标点     4
      人       6   //当人走到目标点上时,为人的值加上目标点 的值,即2+4=6
      箱子      7   //当箱子推到目标点上时,为箱子的值加上目标点 的值,即3+4=7
  • 2、定义二维数组地图
  • 3、定义人的坐标
  • 4、进入死循环
         1)清理屏幕并显示地图
         2)检查是否完成任务
               是:一共走了几步,结束程序
        3)获取方向键并处理

代码

#include<stdio.h>
#include<stdlib.h>
#include<getch.h>

int main(int argc,const char* argv[])
{
	//定义二维数组地图
	char map[8][8]={
		{0,0,1,1,1,1,0,0},
		{0,0,1,4,4,1,0,0},
		{0,1,1,0,4,1,1,0},
		{0,1,0,0,3,4,1,0},
		{1,1,0,3,0,0,1,1},
		{1,0,0,1,3,3,0,1},
		{1,0,0,2,0,0,0,1},
		{1,1,1,1,1,1,1,1}
		};
	//设置人的初始位置
	char m_x=6,m_y=3;
	//记录步数
	int step=0;

	for(;;)//死循环
	{
		int cnt=0;
		int x=0,y=0;// 偏移量
		system("clear");
		//打印地图
		for(int i=0;i<8;i++)
		{
			for(int j=0;j<8;j++)
			{
				switch(map[i][j])
				{
					case 0: printf("  ");break;
					case 1: printf("# ");break;
					case 2: printf("@ ");break;
					case 3: printf("$ ");break;
					case 4: printf("0 ");break;
					case 6: printf("@ ");break;
					//打印一次到达终点的箱子时,cnt++
					case 7: printf("$ ");cnt++;break;
				}
			}
			printf("\n");
		}
		//判断是否成功
		if(4==cnt)
		{
			printf("游戏结束,共走了%d步\n",step);
			break;
		}
		//获取到对应按键的值,设置好偏移量
		switch(getch())
		{
			case 183://上
				x--;
				break;
			case 184://下
				x++;
				break;
			case 185://左
				y++;
				break;
			case 186://右
				y--;
				break;
		}
		if(0 == map[m_x+x][m_y+y] || 4 == map[m_x+x][m_y+y])
		{
			//人的前方是否为空,是的话移动
			map[m_x+x][m_y+y]+=2;
			map[m_x][m_y]-=2;
			m_x+=x;
			m_y+=y;
			step++;
		}
		//人的前方是否为箱子 或者 在目标点的箱子
		else if(3 == map[m_x+x][m_y+y] || 7 == map[m_x+x][m_y+y])
		{
			//箱子的前方是否为 空 或者 目标点,是的话移动
			if(0==map[m_x+2*x][m_y+2*y] || 4 == map[m_x+2*x][m_y+2*y])
			{
				map[m_x+2*x][m_y+2*y]+=3;
				map[m_x+x][m_y+y]-=1;
				map[m_x][m_y]-=2;
				m_x+=x;
				m_y+=y;
				step++;
			}
		}
	}
}

效果图

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值