aboard

Lib Python 3 de gestion de quadrillages en 2D, avec des opérations de base permettant d’implémenter une game logic ou des bots pour des jeux de plateaux.

Pas de « pip install » pour l’instant. Il faut copier manuellement les fichiers de code dans votre projet.

Le fichier « aboard_standalone.py » est généré avec tout le code de la lib. Son contenu peut être copié-collé dans n’importe quel contexte (par exemple, un puzzle ou un challenge du site codingame).

Quickstart

Création, accès aux tiles, affichage.

>>> from aboard import Board
>>> board = Board(9, 6)
>>> board[3, 2].data = 'Z'
>>> print(board.render())
.........
.........
...Z.....
.........
.........
.........

Accès à des lignes, colonnes, rectangles de tiles via des itérateurs.

>>> for tile in board[2, :]:
...     tile.data = '|'
>>> for tile in board[3:, 1]:
...     tile.data = '='
>>> for tile in board[3:, 4:6]:
...     tile.data = '#'
>>> print(board.render())
..|......
..|======
..|Z.....
..|......
..|######
..|######

Accès à partir du coin inférieur droit, avec des coordonnées négatives.

>>> for coord in [(-1, -1), (-1, 4), (-2, 4)]:
...     board[coord].data = '.'
>>> print(board.render())
..|......
..|======
..|Z.....
..|......
..|####..
..|#####.

Remplissage par propagation, à partir d’une position donnée.

>>> for tile in board.get_by_propagation((6, 3)):
...     tile.data = '/'
>>> print(board.render())
..|......
..|======
..|Z/////
..|//////
..|####//
..|#####/

Vérification des coordonnées, déplacement selon une direction.

>>> from aboard import BoardIndexError, Pos, Dir
>>> pos = Pos(9, 0)
>>> try:
...     board[pos]
... except BoardIndexError as e:
...     print(e)
Coord not in board. coord : 9, 0. board size : 9, 6.
>>> pos.move(Dir.LEFT, 7)
>>> board[pos].data = '.'
>>> pos.move(Dir.DOWN)
>>> board[pos].data = '.'
>>> print(board.render())
.........
...======
..|Z/////
..|//////
..|####//
..|#####/

Recherche du chemin le plus court. (La configuration par défaut n’autorise pas les mouvements en diagonale, mais c’est modifiable).

>>> for idx, tile in enumerate(board.get_by_pathfinding((1, 3), (6, 0))):
...    tile.data = idx
>>> print(board.render())
..45678..
.23======
.1|Z/////
.0|//////
..|####//
..|#####/