A Python library for the Santorini board game
Project description
SantorinAI
AI Player tester for the Santorini game
How to use
1. Install
With pip:
pip install --upgrade santorinai
You can also clone the repository and install it manually:
git clone https://github.com/Tomansion/SantorinAI.git
cd SantorinAI
pip install -r requirements.txt
2. Create a player
Create an override of the Player
class in the santorinai.player.py
file.
from santorinai.player import Player
class MyPlayer(Player):
"""
My player description
"""
def name(self):
return "My player name"
# Placement of the pawns
def place_pawn(self, board, pawn):
my_pawn_number = pawn.number # Between 1 and 6 depending on the game mode
my_player_number = pawn.player_number # Between 1 and 3 depending on the game mode
# Do some magic here to choose a position
my_choice = (2, 3) # A position on the 5x5 board
return my_choice
# Movement and building
def play_move(self, board, pawn):
my_pawn_pos = pawn.pos
board_array = board.board # A 5x5 array of integers representing the board
# 0: empty
# 1: tower level 1
# 2: tower level 2
# 3: tower level 3
# 4: terminated tower
pawns = board.pawns # The other pawns on the board
# Do some magic here to choose a position
my_move_position = ( # Moving top right
my_pawn_pos[0] + 1,
my_pawn_pos[1] + 1
)
my_build_position = ( # Building right (relative to the new position)
my_move_position[0] + 1,
my_move_position[1] + 0
)
return my_move_position, my_build_position
Check our random players example in our player examples folder to help you create your own.
3. Test your player
from santorinai.tester import Tester
from santorinai.player_examples.random_player import RandomPlayer
from my_player import MyPlayer
# Init the tester
tester = Tester()
tester.verbose_level = 2 # 0: no output, 1: Each game results, 2: Each move summary
tester.delay_between_moves = 0.1 # Delay between each move in seconds
tester.display_board = True # Display a graphical view of the board in a window
# Init the players
my_player = MyPlayer()
random_payer = RandomPlayer()
# Play 100 games
tester.play_1v1(my_player, random_payer, nb_games=100)
Output example:
Results:
Player Randy Random won 10 times
Player My player won 70 times
Graphical output example:
Board utilities
We provide some utilities to help you manipulate the board.
# Game informations
board.nb_players # Number of players in the game (2 or 3)
board.nb_pawns # Number of pawns (4 or 6) depending on the game mode
board.pawn_turn # Pawn that is currently playing
board.turn_number # Number of turn played since the beginning of the game
# Pawns
board_pawns = board.pawns # The other pawns on the board
pawn = board_pawns[0] # The first pawn on the board
pawn.pos # The position a pawn on the board (x, y), or (None, None) if it is not placed yet
pawn.number # The number of the pawn on the board (between 1 and 6) depending on the game mode
pawn.player_number # The number of the player owning the pawn (between 1 and 3) depending on the game mode
playing_pawn = board.get_playing_pawn() # The pawn that is currently playing
# Board
board_array = board.board # A 5x5 array of integers representing the board
# 0: empty
# 1: tower level 1
# 2: tower level 2
# 3: tower level 3
# 4: terminated tower
# Movements
available_move_positions = board.get_possible_movement_positions(pawn)
available_build_positions = board.get_possible_building_positions(pawn)
# Board control
board.place_pawn(pos) # Place the current playing pawn on the board
board.play_move(move_position, build_position) # Play a move (move and build) with the current playing pawn
# Other
board.is_position_valid(position)
board.is_move_possible(start_pos, end_pos)
board.is_position_within_board(pos)
board.is_position_adjacent(pos1, pos2)
board.is_pawn_on_position(pos)
board.is_build_possible(builder_pos, build_pos)
board.copy() # Create a copy of the board, useful to test moves
print(board) # Print the board
# Display
from santorinai.board_displayer.board_displayer import init_window, update_board
window = init_window([player1.name(), player2.name()])
update_board(window, board)
Credits
Creator of Santorini: Roxley Games
Board 2D Gui library: PySimpleGUI
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
SantorinAI-1.3.3.tar.gz
(18.3 kB
view details)
Built Distribution
File details
Details for the file SantorinAI-1.3.3.tar.gz
.
File metadata
- Download URL: SantorinAI-1.3.3.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c30c7c88014acaf056f9091d289885b09fa8796e3e61c2b5ef1b1a4c3c793dea |
|
MD5 | 9040abad7ded24bdd0ec8f11dfefc47e |
|
BLAKE2b-256 | 01bbd5bfc30c0ae25c98a2eaef31fae2fc915b3d1ef09a2463117ed424356220 |
File details
Details for the file SantorinAI-1.3.3-py3-none-any.whl
.
File metadata
- Download URL: SantorinAI-1.3.3-py3-none-any.whl
- Upload date:
- Size: 21.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4382c51e79ab9fc912a3332d1725d5dbfa8d92ea0573ef7ff7b841e897acf845 |
|
MD5 | a83461baa03fb5dbf4e24598c30fa5f4 |
|
BLAKE2b-256 | 2c654611f87d24613e7df3c524429ffe5a4ce2b6485723b9afc5cf042f4729a9 |