Skip to main content

A Python library for the Santorini board game

Project description

Graphical output example

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: 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


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)

Uploaded Source

Built Distribution

SantorinAI-1.3.3-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

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

Hashes for SantorinAI-1.3.3.tar.gz
Algorithm Hash digest
SHA256 c30c7c88014acaf056f9091d289885b09fa8796e3e61c2b5ef1b1a4c3c793dea
MD5 9040abad7ded24bdd0ec8f11dfefc47e
BLAKE2b-256 01bbd5bfc30c0ae25c98a2eaef31fae2fc915b3d1ef09a2463117ed424356220

See more details on using hashes here.

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

Hashes for SantorinAI-1.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4382c51e79ab9fc912a3332d1725d5dbfa8d92ea0573ef7ff7b841e897acf845
MD5 a83461baa03fb5dbf4e24598c30fa5f4
BLAKE2b-256 2c654611f87d24613e7df3c524429ffe5a4ce2b6485723b9afc5cf042f4729a9

See more details on using hashes here.

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