Skip to main content

2023 ECM1400 Coursework - Battleships

Project description

ECM1400 Battleships

Introduction

A python package (availible on PyPi) to simulate a Battleships game against an AI in both a command line interface and a Flask GUI.

Coursework Self assessment

All features required by specification are complete (including testing & logging)

Additional

Entry Screen

The user can select the game settings (size, difficulty) on an Entry page. Game screen has a return to menu button so games can be replayed

HTML Template Sunken ships

If a ship has been sunk, the main.py script sends a list of sunk positions for either the AI or Player to the HTML code, and it colours those tiles green

Other Frontend modifications

In the placement HTML file originally allowed users to place fewer than required number of ships. This was fixed.

Storm mode

When turned on the player's board will shift one space each turn (as suggested by specification). Since the HTML grid isn't persistent this had to be coded in javascript

AI attacking

There are 5 AI difficulties code here 0. Pure Random Guessing

  1. Random but it won't guess same space twice
  2. Guessing a random position around unsunk hits
  3. Trying to guess in a line around unsunk hits
  4. Guesses in a line if there are unsunk hits, if none it calculates the probability of a ship being in any unguessed tile and guesses there

Wrote a script to test AI's against each other

drawing drawing

Prerequisites

  • Flask must be installed pip install Flask
  • numpy must be installed pip install numpy
  • For testing pytest must be installed pip install pytest
  • Pytest plugins must be installedpip install pytest-depends pip install pytest-cov
  • Python version must be ≥ 3.10 due to | symbol in typehinting

Version used in running = Python 3.11.4

Installation and Getting Started

There are 3 modes to run the game:


There are two ways to install the package:

pip (recommended)

  • In a new venv or for the whole computer run pip install battleships-edf1101
  • This will automatically install Flask and numpy
  • You can then run python -m battleships.main or python -m battleships.game_engine or python -m battleships.mp_game_engine to run each mode

Manually

  • Get the this repository's folder (clone from github, or download otherwise)
  • Open it either either with a virtual environment (useful if using PyCharm) and install Flask and numpy manually as shown in prerequisites
  • Or you can install Flask and numpy for the whole PC
  • To open files you can cd to the battleships directory (the source code folder not the project root) and run python -m main etc
  • Alternatively you could open them manually in a file browser and run them

Developer Documentation

All documentation for source code can be found here

In general

  • Components.py: Contains the basic functions for creating Battleships games
  • game_engine.py: Contains functions to run a single player game and to run a single player game
  • mp_game_engine.py: Contains functions needed for multiplayer games (against AI)
  • main.py: Contains the framework needed for a Flask GUI game
  • advanced_ai.py: Contains the functions needed for the extension 5 versions of AI
  • ai_comparison.py: Contains functions to compare different versions of AI difficulties

Testing

If pytest & plugins are installed then you can test in 2 ways.

Note scripts like game_engine.py, mp_game_engine and main.py don't have full coverage as some functions require input statements which my unittests were not intended to mock

  1. Use an IDE like PyCharm to run the tests manually
  2. Navigate to the tests folder in the project (from the root directory it would be cd tests then run pytest )

pylint

pylint can be run by going to either the root of the project or the source code folder in the terminal then running pylint battleships

Details

License

MIT License: found here

Authors

  • Student 730003140

Source

Code hosted (may be public or private depending on time of reading) on GitHub Packaged at : PyPi

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

battleships-edf1101-1.4.tar.gz (117.4 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page