Skip to main content

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

Release files for SantorinAI 1.3.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for SantorinAI 1.3.3
File Size Uploaded
SantorinAI-1.3.3.tar.gz 18.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for SantorinAI 1.3.3
File Interpreter ABI Platform
SantorinAI-1.3.3-py3-none-any.whl Python 3 none any Details

Total release size: 40.0 kB

Release files / SantorinAI-1.3.3.tar.gz

Download URL SantorinAI-1.3.3.tar.gz
Size 18.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c30c7c88014acaf056f9091d289885b09fa8796e3e61c2b5ef1b1a4c3c793dea
BLAKE2b-256 checksum
How to use checksums
01bbd5bfc30c0ae25c98a2eaef31fae2fc915b3d1ef09a2463117ed424356220
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.17

Release files / SantorinAI-1.3.3-py3-none-any.whl

Download URL SantorinAI-1.3.3-py3-none-any.whl
Size 21.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4382c51e79ab9fc912a3332d1725d5dbfa8d92ea0573ef7ff7b841e897acf845
BLAKE2b-256 checksum
How to use checksums
2c654611f87d24613e7df3c524429ffe5a4ce2b6485723b9afc5cf042f4729a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.17

Release history Release notifications | RSS feed

This release

1.3.3 This release

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page