Fixed badges
This commit is contained in:
parent
461a73852b
commit
89112a9dc0
121
README.md
121
README.md
@ -7,12 +7,127 @@ A simple tic tac toe game implementation
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
tic_tac_toe module exports main game class `Game` and `Pl` and `Tr` enums to simplify typing.
|
### 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
|
### `Game` class
|
||||||
|
|
||||||
TODO: Add Game class description
|
```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` and `Tr` Enums
|
||||||
|
|
||||||
`Pl` has two members: `X` and `O` meaning X and O players. `Tr` enum has all members of `Pl` plus `E` entry meaning empty cell.
|
`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
|
||||||
|
```
|
||||||
|
2
setup.py
2
setup.py
@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
|
|||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="ttt_game",
|
name="ttt_game",
|
||||||
version="0.0.1",
|
version="0.1.0",
|
||||||
author="dm1sh",
|
author="dm1sh",
|
||||||
author_email="me@dmitriy.icu",
|
author_email="me@dmitriy.icu",
|
||||||
description="A simple tic tac toe game implementation",
|
description="A simple tic tac toe game implementation",
|
||||||
|
@ -3,7 +3,7 @@ from enum import Enum
|
|||||||
|
|
||||||
|
|
||||||
class Pl(Enum):
|
class Pl(Enum):
|
||||||
X = 3
|
X = 1
|
||||||
O = 2
|
O = 2
|
||||||
|
|
||||||
|
|
||||||
@ -22,6 +22,10 @@ class Game:
|
|||||||
[3, 4, 5],
|
[3, 4, 5],
|
||||||
|
|
||||||
[6, 7, 8]]
|
[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]
|
_board: List[Tr]
|
||||||
|
|
||||||
@ -86,7 +90,7 @@ class Game:
|
|||||||
|
|
||||||
def get_free(self) -> Tuple[int]:
|
def get_free(self) -> Tuple[int]:
|
||||||
"""
|
"""
|
||||||
Returns
|
Returns indexes of free game board cells
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return tuple(filter(lambda i: self._board[i] == Tr.E, range(9)))
|
return tuple(filter(lambda i: self._board[i] == Tr.E, range(9)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user