如果用户输入了无效命令,你的程序必须输出:
没有菜单项
级别文件
关卡文件将包含与游戏相关的数据,例如行星的尺寸、名称、探测器位置和属性以及图块信息。
该文件的格式如下:
[行星]
姓名,
[瓷砖]
[ ,]
瓷砖数量取决于星球的尺寸。例如,如果宽度为 6,高度为 5,则列出的瓷砖数量应严格为 30。
如果满足以下条件,则认为级别文件的结构正确:
• 行星部分下指定了4个字段,并且图块的数量与行星的 尺寸相匹配。
• 指定的流动站坐标大于或等于0。
• 探测器的坐标必须在该行星的尺寸范围内。
• 宽度和高度值都需要大于或等于5。
• 对于图块而言,最高海拔严格大于最低海拔。正确结构的关卡文件片段:
[行星]名称,冥王星宽度,5 高度,5 探测器,1,0
[瓷砖]平原,0 阴影,0 平原,1阴影,0,-1
瓷砖按行主序排列。您必须从上到下、从左到右插入瓷砖。放置探测车时要记住的规则是:x 对应于行索引,而 y 对应于列索引。例如:
[瓷砖] | 对应 | 到: | |
一个 | |A|B| | ||
乙 | |C|D| | ||
碳 | |||
德 |
您的程序必须能够支持加载使用此格式的任何关卡文件。但是,您的程序需要检测关卡文件是否正确。要检测关卡文件是否正确,它将需要行星和图块的两个部分。
我们会为您提供一些演示级别供您在测试时使用,但建议您编写自己的测试级别或生成自己的测试级别的脚本。
行星
行星被定义为地形图块的二维网格。所有图块都是正方形且长度单位。每个图块将具有不同的数据,如图块部分所述。
行星是球形的,而不是平的。这意味着网格最左边的列应该与最右边的列“相接” 。同样,最上面一行应该与最下面一行相接。
您需要设计一个程序,允许在行星上导航并跟踪探测车所在的方格。该行星具有以下属性:
• 宽度。
• 高度。
• 具有会影响流动站的瓦片属性的瓦片(必须包含宽度*高度数量的瓦片)。
您可以自由地为您的Planet类别添加其他属性。
瓷砖
一个行星由许多单独的地形图块组成,每个图块具有以下属性:
• 相对于 0 的海拔(可以是负数或正数)。
• 效果:每个图块对探测车都有各自的效果。这将在下一节“地形和坡度”中描述。
地形和坡度
地形是图块的一个属性。允许的地形类型有两种:
地形类型
• “ ” – 无阴影的平原(暴露在阳光下)、平原。
• “#” – 阴影平原,阴影。
海拔效应
• “+” – 相对于探测车升高的瓦片。
• “-” – 相对于探测车下降的瓦片。
由2 个海拔值描述的图块是倾斜的。这将允许探测车在提供的两个给定海拔值之间向上或向下移动。坡度在最高和最低(最高-最低)之间只有1的差值。
• “\” – 下坡,允许移动到较低的水平。
• “/” —上坡,允许移动到上层。
举个例子:shaded,0,-1
如果探测车的海拔为 -1,则该图块将显示为上坡。这允许探测车访问海拔为 0 的图块。
如果探测车的海拔为 0,那么该方格将显示为向下倾斜,这允许探测车访问海拔为 -1 的方格。
流浪者
探测车是玩家在游戏中控制的对象。当探测车扫描周围区域时,会用H符号表示,并且必须在任何给定时间占据地形图块。
• 在关卡文件中,rover这一行表示探测车的起始位置。例如,
rover,1,0表示探测车从 (x, y) 坐标 (1, 0) 出发。
• 当前坐标(x,y)。
• 电池充电,最大充电量为 100,并且始终以 100 的充电量启动。
• 已探索的方格数量。
探测车将在行星表面移动,能够探索地形的不同部分。探测车的目标是探索整个表面,一旦探测车探索了整个行星或耗尽电量,玩家可以输入FINISH命令(在下一节中指定)以结束游戏并输出他们探索了多少行星。
您已探索{planet}的{percentage}%
电池
探测车在阴影区域移动时会断电。每次移动到阴影区域,电池电量都会减少 1。探测车在非阴影区域移动时,电池电量保持不变。如果探测车在非阴影区域等待,则会重新充电。