ttt-game/README.md
2021-08-10 15:24:26 +03:00

134 lines
2.5 KiB
Markdown

# TTT-game
[![codecov](https://codecov.io/gh/dm1sh/ttt-game/branch/main/graph/badge.svg?token=7GZ4FJ3E4E)](https://codecov.io/gh/dm1sh/ttt-game)
[![Test and Publish](https://github.com/dm1sh/ttt-game/actions/workflows/ci.yml/badge.svg)](https://github.com/dm1sh/ttt-game/actions/workflows/ci.yml)
A simple tic tac toe game implementation
## Usage
### Installation
Testing builds:
```bash
python -m pip install -i https://test.pypi.org/simple/ ttt-game
```
Production builds:
```bash
python -m pip install ttt-game
```
ttt-game module exports main game class `Game` and `Pl` and `Tr` enums to simplify typing.
```python
from ttt_game import Game, Tr, Pl
```
### `Game` class
```python
class Game:
"""
Board indexes preview:
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]
Board array itself:
[Tr.E, Tr.E, Tr.E, Tr.E, Tr.E, Tr.E, Tr.E, Tr.E, Tr.E]
"""
_board: List[Tr]
def get_board(self) -> List[Tr]:
"""
Returns copy of game board. Use it to display board in UI.
"""
def check_move(self, pos: int) -> bool:
"""
Checks if board cell empty
"""
def check_filled(self) -> bool:
"""
Checks if game board is filled
"""
def check_win(self, pos: int) -> bool:
"""
Checks if this move will make player a winner.
"""
def insert(self, pos: int, who: Tr) -> None:
"""
Sets game board's cell to specified value. Better use `move` method when possible
"""
def move(self, pos: int, who: Pl) -> bool:
"""
Sets game board cell to specified value when possible. It also returns true if player has won.
"""
def get_free(self) -> Tuple[int]:
"""
Returns indexes of free game board cells
"""
```
To use it you should initialize it like below:
```python
game = Game()
```
To make move, below code is listed. `result` variable will contain `True` if `Pl.X` player won the game.
```python
result = game.move(1, Tr.X)
if result:
print("Congrats, X player won!")
```
You also can get game board array with `get_board` method. To visualize it you can customize code listed below.
```python
board = game.get_board()
for i in range(9):
print(board[i], end=" ")
if i % 3 == 2:
print("\n", end="")
"""
output: Tr.E Tr.X Tr.E
Tr.E Tr.E Tr.E
Tr.E Tr.E Tr.E
"""
```
### `Pl` and `Tr` Enums
`Pl` has two members: `X` and `O` meaning X and O players.
```python
class Pl(Enum):
X = 1
O = 2
```
`Tr` enum has all members of `Pl` plus `E` entry meaning empty cell.
```python
class Tr(Enum):
E = 0
X = Pl.X
O = Pl.O
```