diff --git a/Projects/Battleship-Game-Engine.md b/Projects/Battleship-Game-Engine.md new file mode 100644 index 00000000..94e44c97 --- /dev/null +++ b/Projects/Battleship-Game-Engine.md @@ -0,0 +1,104 @@ +# Battleship Game Engine + +**Tier:** 3-Advanced + +Battleship Game Engine (BGE) implements the classic turn-based board game as a +package that's separated from any presentation layer. This is a type of +architectural pattern that useful in many application since it allows +any number of apps to utilize the same service. + +The BGE itself is invoked through a series of function calls rather than +through directly coupled end user actions. In this respect using the BGE is +is similar to using an API or a series of routes exposed by a web server. + +This challenge requires that you develop the BGE and a very thin, text-based +presentation layer for testing that's separate from the engine itself. Due to +this the User Stories below are divided two sets - one for the BGE and one +for the text-based presentation layer. + +BGE is responsible for maintaining game state. + +## User Stories + +### BGE + +- [ ] Caller can invoke a `startGame()` function to begin a 1-player game. This +function will generate an 8x8 game board consisting of 3 ships having a width of +one square and a length of: + * Destroyer: 2 squares + * Cruiser: 3 squares + * Battleship: 4 squares + + `startGame()` will randomly place these ships on the board in any direction + and will return an array representing ship placement. +- [ ] Caller can invoke a `shoot()` function passing the target row and column +coordinates of the targeted cell on the game board. `shoot()` will return +indicators representing if the shot resulted in a hit or miss, the number of +ships left (i.e. not yet sunk), the ship placement array, and an updated hits +and misses array. + + Cells in the hits and misses array will contain a space if they have yet + to be targeted, `O` if they were targeted but no part of a ship was at that + location, or `X` if the cell was occupied by part of a ship. + +### Text-based Presentation Layer + +- [ ] User can see the hits and misses array displayed as a 2 dimensional +character represention of the game board returned by the `startGame()` function. +- [ ] User can be promted to enter the coordinates of a target square on the +game board. +- [ ] User can see an updated hits and misses array display after taking a +shot. +- [ ] User can see a message after each shot indicating whether the shot +resulted in a hit or miss. +- [ ] User can see an congratulations message after the shot that sinks the +last remaining ship. +- [ ] User can be prompted to play again at the end of each game. Declining +to play again stops the game. + +## Bonus features + +### BGE + +- [ ] Caller can specify the number of rows and columns in the game board as +a parameter to the `startGame()` function. +- [ ] Caller can invoke a `gameStats()` function that returns a Javascript +object containing metrics for the current game. For example, number of turns +played, current number of hits and misses, etc. +- [ ] Caller can specify the number of players (1 or 2) when calling +`startGame()` which will generate one board for each player randomly populated +with ships. + + `shoot()` will accept the player number the shot is being made for along with +the coordinates of the shot. The data it returns will be for that player. + +### Text-based Presentation Layer + +- [ ] User can see the current game statics at any point by entering the +phrase `stats` in place of target coordinates. (Note that this requires +the `gameStats()` function in the BGE) +- [ ] User can specify a two player game is to be played, with each player +alternating turns in the same terminal session (Note that this requires +cooresponding Bonus Features in the BGE) +- [ ] User can see the player number in prompts associated with the inputs in +each turn. +- [ ] User can see both players boards at the end of each turn. + +## Project Board + +You can track your progress by cloning this [TBD](url-goes-here) + +## Useful links and resources + +- [Battleship Game (Wikipedia)](https://en.wikipedia.org/wiki/Battleship_(game)) +- [Battleship Game Rules (Hasbro)](https://www.hasbro.com/common/instruct/battleship.pdf) + +## Example projects + +This YouTube video shows how a text-based +[Battleship Game](https://www.youtube.com/watch?v=TKksu3JXTTM) is played. + +The following example is provided as a demonstration of the Battleship game +if it is unfamiliar to you. Remember you are to implement a text based +presentation layer for testing. +[Battleship Game by Chris Brody](https://codepen.io/CodifyAcademy/pen/ByBEOz) diff --git a/README.md b/README.md index 8f62b542..cec8873f 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ required to complete them. ### Tier-3: Advanced Projects +<<<<<<< HEAD | Name | Description | Tier | | ---------------------------------------------------- | ------------------------------------------- | ---------- | | [GitHub Timeline](./Projects/GitHub-Timeline-App.md) | Generate a timeline of a users GitHub Repos | 3-Advanced | @@ -71,6 +72,16 @@ required to complete them. | [Slack Archiver](./Projects/Slack-Archiver.md) | Archive Slack Messages | 3-Advanced | | [Spell-It App](./Projects/SpellIt-App.md) | A twist on the classic Speak N Spell game | 3-Advanced | | [Survey App](./Projects/Survey-App.md) | Define, conduct, and view a survey | 3-Advanced | +======= +| Name | Description | Tier | +| ------------------------------------------------------------------ |-------------|------| +| [Battleship Game Engine](./Projects/Battleship-Game-Engine.md) | Create a callable engine to play the Battleship game | 3-Advanced | +| [GitHub Timeline](./Projects/GitHub-Timeline-App.md) | Generate a timeline of a users GitHub Repos | 3-Advanced | +| [Kudos Slackbot](./Projects/Kudos-Slackbot.md) | Give recognition to a deserving peer| 3-Advanced | +| [Slack Archiver](./Projects/Slack-Archiver.md) | Archive Slack Messages | 3-Advanced | +| [Spell-It App](./Projects/SpellIt-App.md) | A twist on the classic Speak N Spell game | 3-Advanced | +| [Survey App](./Projects/Survey-App.md) | Define, conduct, and view a survey | 3-Advanced | +>>>>>>> 7d230474489b2071179e6c0f57b02742bd47f17a ## Trello Collection Boards