README

Example Guide

贡献指南

▼ 项目列表

▼ Intermediate-Level Ideas

Book Finder App

To-Do 应用

命令行计算器

Markdown预览器

Emoji翻译器应用

Password Generator

Name Generator

Meme生成器应用

FlashCards应用

Charity Finder App

Podcast目录应用

Game Suggestion App

Simple Online Store

Flip Art App

HighStriker游戏

Sports Bracket Generator

时区提醒机器人

二维码徽章应用

卡片记忆游戏

Bit Masks App

Chrome主题扩展

Currency Converter

Drawing App

GitHub个人资料

Image Scanner

Markdown表格生成器

RegExp助手应用

Sales数据库应用程序

String Art

This or That Game

Typing Practice App

Voting App

Math Editor

▼ 初学者项目合集

Bin2Dec应用

Border Radius Previewer

CSV转JSON应用

Calculator App

Calendar App

因果应用

Christmas Lights App

Color Cycle App

倒计时器应用

Dollars To Cents App

Dynamic CSS Variables App

First Database App

Flip Image App

GitHub状态应用

Hello App

IOT邮箱应用

JSON转CSV应用

Javascript正则表达式验证

Key-Value 应用

Lorem Ipsum 生成器

Notes应用

Pearson回归应用

Pomodoro时钟

产品登陆页

Quiz应用程序

随机餐点生成器

随机数生成器

Recipe App

Roman to Decimal Converter

滑块设计

Stopwatch App

True or False App

Vigenere 密码

Weather App

Windchill App

Word Frequency App

▼ Advanced Ideas

Battleship Bot

Battleship游戏引擎

Boole Bot 游戏

Bug Race Game

Calorie Counter App

Chat应用

Contribution Tracker App

Elevator App

FastFood应用

GitHub时间线应用

GitTweet应用

Instagram克隆应用

Kudos Slackbot

Movie App

MyPodcast Library App

NASA系外行星查询

Shell Game

Shuffle-Deck-App

Slack 归档器

SpellIt-App

Survey App

战舰游戏引擎

等级: 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中有相应的额外功能)
  • [ ] 用户可以在每次回合的输入相关的提示中看到玩家编号。
  • [ ] 用户可以在每次回合结束时看到两名玩家的棋盘。

有用链接和资源

示例项目

这个YouTube视频展示了如何玩基于文本的战舰游戏

以下示例作为对您不熟悉的战舰游戏的演示提供。请记住,您需要实现一个基于文本的展示层进行测试。