战舰游戏引擎
等级: 3-高级
战舰游戏引擎(BGE)实现了经典的回合制棋盘游戏,并将其作为一个与任何展示层分离的包。这是一种在许多应用中都有用的架构模式,因为它允许任何数量的应用程序利用相同的服务。
BGE本身是通过一系列函数调用调用的,而不是通过直接耦合的最终用户操作。在这方面,使用BGE类似于使用API或由网络服务器暴露的一系列路由。
这个挑战要求你开发BGE和一个非常薄的、基于文本的展示层,用于测试,该层与引擎本身分开。因此,下面的用户故事分为两组 - 一组针对BGE,一组针对基于文本的展示层。
BGE负责维护游戏状态。
用户故事
BGE
-
[ ] 调用者可以调用
startGame()
函数开始一场1人游戏。此函数将生成一个8x8的游戏棋盘,包含3艘宽度为一格、长度为:- 驱逐舰:2格
- 巡洋舰:3格
- 战列舰:4格
startGame()
将在棋盘上随机放置这些舰船,方向任意,并返回一个表示舰船放置的数组。 -
[ ] 调用者可以调用
shoot()
函数,传递目标单元格在游戏棋盘上的行和列坐标。shoot()
将返回表示射击是否命中的指示器、剩余舰船数量(即尚未沉没)、舰船放置数组以及更新后的命中和未命中数组。命中和未命中数组中的单元格将包含空格,如果它们尚未被瞄准;
O
,如果它们被瞄准但那个位置没有舰船的部分;或者X
,如果该单元格被舰船的一部分占据。
基于文本的展示层
- [ ] 用户可以看到
startGame()
函数返回的游戏棋盘的二维字符表示形式的命中和未命中数组。 - [ ] 用户可以被提示输入游戏棋盘上目标方格的坐标。
- [ ] 用户可以在射击后看到更新的命中和未命中数组显示。
- [ ] 用户可以在每次射击后看到表示射击是否命中的消息。
- [ ] 用户可以在击沉最后一条剩余舰船后看到祝贺消息。
- [ ] 用户可以在每局游戏结束时被提示再次玩。拒绝再次玩则停止游戏。
额外功能
BGE
- [ ] 调用者可以通过
startGame()
函数的参数指定游戏棋盘的行数和列数。 - [ ] 调用者可以调用
gameStats()
函数,返回一个包含当前游戏指标的Javascript对象。例如,已玩的回合数、当前命中和未命中的次数等。 -
[ ] 调用者在调用
startGame()
时可以指定玩家数量(1或2),这将为每个玩家随机生成一个棋盘,并填充舰船。shoot()
将接受射击者的玩家编号以及射击坐标。它返回的数据将针对该玩家。
基于文本的展示层
- [ ] 用户可以通过输入短语
stats
来查看任何时候的当前游戏统计数据。(注意这需要BGE中的gameStats()
函数) - [ ] 用户可以指定要玩的双人对战游戏,在同一终端会话中交替进行回合。(注意这需要在BGE中有相应的额外功能)
- [ ] 用户可以在每次回合的输入相关的提示中看到玩家编号。
- [ ] 用户可以在每次回合结束时看到两名玩家的棋盘。
有用链接和资源
- [战舰游戏(维基百科)](https://en.wikipedia.org/wiki/Battleship_(game)>
- 战舰游戏规则(孩之宝)
示例项目
这个YouTube视频展示了如何玩基于文本的战舰游戏。
以下示例作为对您不熟悉的战舰游戏的演示提供。请记住,您需要实现一个基于文本的展示层进行测试。