一个适合初学者的C++推箱子小游戏

一个适合初学者的C++推箱子小游戏

博主最近在学习关于C++的一些基础,这是本人突发奇想做的一个小游戏,编程其实并不难,重要的是,你的思路,以及优化,当然,这个小游戏,本人也是基于一个学习者编写的

本篇文章会教大家用C++基本语句来实现一个推箱子的小游戏。

展示

这是游戏开始时的界面。

游戏开始界面
当然,如果你喜欢,你可以任意更改地图:
在这里插入图片描述
当把所有箱子推到目的地,就完成游戏
在这里插入图片描述

思路:

当有一个问题出现的时候,我们首先应该先考虑这个问题有可能的解法:
这里博主想到的方法是

1. 通过二维数组来存储地图信息
2. 通过交换数组元素,来达到角色移动的目的
3. 而推箱子,则让箱子和角色同步移动便可。
4. 移动控制:_getch()

ps:_getch()方法需要头文件conio.h的支持,功能是不需要按回车键便可以得到输入的字符

那么这里我们有了大概的思路,但是再实际操作中,我们发现二维数组并不方便,因为它有两个下标,会加剧问题的复杂度,这里我们用一维数组便可。
移动:我们知道地图是一个方形:要么是m*n,要么就是m^2(正方形);
在这里插入图片描述

这里我们简单绘制一个长4,宽4的长方体来说明:
在这里插入图片描述
如果我在5的位置,那么我要左移,应该是当前位置 -1,同样,向右便是 +1,向上 -4,向下 +4。

地图:

有了这些知识,我们便可以开始编程了,首先写出地图:

int map[100] =                   //玩家地图
 {
  1,1,1,1,1,1,1,1,1,1,
  1,0,0,0,0,0,0,0,0,1,
  1,0,0,0,3,0,4,0,0,1,
  1,2,0,0,0,0,0,0,0,1,
  1,0,0,0,0,0,0,0,0,1,
  1,0,0,3,0,4,0,0,0,1,
  1,0,0,0,0,0,0,0,0,1,
  1,0,0,0,3,0,0,0,0,1,
  1,0,0,0,0,0,0,4,0,1,
  1,1,1,1,1,1,1,1,1,1
 };

上面地图中:0代表空地,1代表墙壁,2代表玩家,3代表箱子,4代表箱子目的地,5代表当人和箱子目的地重合的时候显示的图标,6代表箱子放在正确位置时候的图标

for (int i = 0; i < 100; i++)
  {
   switch (map[i])
   {
   case 1:std::cout << "□"; break;     //墙壁
   case 0:std::cout << "  "; break;     //空地
   case 2:std::cout << "Pe"; break;     //人
   case 3:std::cout << "■"; break;    //箱子
   case 4:std::cout << "**"; break;    //箱子目的地
   case 5:std::cout << "×"; break;    //和人重合
   case 6:std::cout << "√"; break;    //和箱子重合
   }
   if (i % w == 9)
    std::cout << '\n';
  }

我们打印一下:地图
我们发现和我们一维数组里的数字所代表的意义是一样的!

移动:

移动需要记录当前位置和移动的目标位置,比如你向上,那么
当前坐标=(当前坐标-地图宽度)

我们声明如下变量:

    int input;						//输入常数
	int nowpoint=31;				//玩家现在的地点
	int shift;                       //玩家目标点
	const int w=10;                  //地图宽度

移动方法如下:

                    shift = map[nowpoint-w];         //把目标点赋值给shift
				    map[nowpoint - w] = map[nowpoint];     
					map[nowpoint] = shift;                   //移动目标点
					nowpoint -= w;                              //移动当前所处的坐标位置

当然

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值