Fast baduk (go, weiqi) game logic for Python.
>>> from baduk import GameState, Player, Move, Point, print_board
>>> game = GameState.new_game(9)
>>> print(game.next_player)
Player.black
>>> print_board(game.board)
9 .........
8 .........
7 .........
6 .........
5 .........
4 .........
3 .........
2 .........
1 .........
ABCDEFGHJ
>>> game = game.apply_move(Move.play(Point(3, 3)))
>>> print(game.next_player)
Player.white
>>> game = game.apply_move(Move.play(Point(4, 3)))
>>> game = game.apply_move(Move.play(Point(4, 3)))
>>> game = game.apply_move(Move.play(Point(4, 4)))
>>> game = game.apply_move(Move.play(Point(5, 3)))
>>> print_board(game.board)
9 .........
8 .........
7 .........
6 .........
5 ..o......
4 ..ox.....
3 ..x......
2 .........
1 .........
ABCDEFGHJ- Rows and columns are 1-indexed, not 0-indexed. So the 1-1 point is the lower left corner of the board.
- The largest supported board size is 19x19.
- Dead stone removal (
remove_dead_stonesfunction). Based on a Monte Carlo method. Not very sophisticated, but usually gets the easy cases right. - Encoding feature planes for machine learning. The
Boardclass has several functions that return board properties as numpy arrays:black_stones_as_arraywhite_stone_as_arraystones_with_n_liberties_as_arraystones_with_min_liberties_as_arrayliberties_as_array