autoformatter go brr
This commit is contained in:
parent
bc71e758cf
commit
74ab281f75
1 changed files with 90 additions and 64 deletions
56
blokus.py
56
blokus.py
|
|
@ -4,12 +4,14 @@ import random
|
|||
|
||||
BOARD_SIZE = 14
|
||||
|
||||
|
||||
def make_board():
|
||||
a = np.array([[0 for i in range(BOARD_SIZE)] for j in range(BOARD_SIZE)])
|
||||
a[4, 4] = -1
|
||||
a[9, 9] = -1
|
||||
return a
|
||||
|
||||
|
||||
tiles = [
|
||||
np.array([[1]]),
|
||||
np.array([[1], [1]]),
|
||||
|
|
@ -56,6 +58,7 @@ def get_permutations(which_tiles: list[tuple[int,int]]):
|
|||
|
||||
return unique_arrays
|
||||
|
||||
|
||||
def can_place(board, tile, player):
|
||||
placements = []
|
||||
has_minus_one = False
|
||||
|
|
@ -63,7 +66,7 @@ def can_place(board, tile, player):
|
|||
for y in range(BOARD_SIZE):
|
||||
if board[x, y] == -1:
|
||||
has_minus_one = True
|
||||
with np.nditer(tile, flags=['multi_index']) as it:
|
||||
with np.nditer(tile, flags=["multi_index"]) as it:
|
||||
for v in it:
|
||||
if v == 1:
|
||||
(i, j) = it.multi_index
|
||||
|
|
@ -85,51 +88,77 @@ def can_place(board, tile, player):
|
|||
placements.append((x, y))
|
||||
final = []
|
||||
if has_minus_one:
|
||||
for (x,y) in placements:
|
||||
with np.nditer(tile, flags=['multi_index']) as it:
|
||||
for x, y in placements:
|
||||
with np.nditer(tile, flags=["multi_index"]) as it:
|
||||
for v in it:
|
||||
(i, j) = it.multi_index
|
||||
if v == 1 and board[x + i, y + j] == -1:
|
||||
final.append((x, y))
|
||||
break
|
||||
else:
|
||||
for (x,y) in placements:
|
||||
with np.nditer(tile, flags=['multi_index']) as it:
|
||||
for x, y in placements:
|
||||
with np.nditer(tile, flags=["multi_index"]) as it:
|
||||
for v in it:
|
||||
(i, j) = it.multi_index
|
||||
if x+i+1 < BOARD_SIZE and y+j+1 < BOARD_SIZE and board[x+i+1][y+j+1] == player:
|
||||
if (
|
||||
x + i + 1 < BOARD_SIZE
|
||||
and y + j + 1 < BOARD_SIZE
|
||||
and board[x + i + 1][y + j + 1] == player
|
||||
):
|
||||
final.append((x, y))
|
||||
break
|
||||
if x+i+1 < BOARD_SIZE and y+j-1 >= 0 and board[x+i+1][y+j-1] == player:
|
||||
if (
|
||||
x + i + 1 < BOARD_SIZE
|
||||
and y + j - 1 >= 0
|
||||
and board[x + i + 1][y + j - 1] == player
|
||||
):
|
||||
final.append((x, y))
|
||||
break
|
||||
if x+i-1 >= 0 and y+j+1 < BOARD_SIZE and board[x+i-1][y+j+1] == player:
|
||||
if (
|
||||
x + i - 1 >= 0
|
||||
and y + j + 1 < BOARD_SIZE
|
||||
and board[x + i - 1][y + j + 1] == player
|
||||
):
|
||||
final.append((x, y))
|
||||
break
|
||||
if x+i-1 >= 0 and y+j-1 >= 0 and board[x+i-1][y+j-1] == player:
|
||||
if (
|
||||
x + i - 1 >= 0
|
||||
and y + j - 1 >= 0
|
||||
and board[x + i - 1][y + j - 1] == player
|
||||
):
|
||||
final.append((x, y))
|
||||
break
|
||||
return final
|
||||
|
||||
|
||||
def do_placement(tidx, tile, placement, game_state, player):
|
||||
(x, y) = placement
|
||||
with np.nditer(tile, flags=['multi_index']) as it:
|
||||
with np.nditer(tile, flags=["multi_index"]) as it:
|
||||
for v in it:
|
||||
(i, j) = it.multi_index
|
||||
if v == 1:
|
||||
game_state[0][x + i, y + j] = player
|
||||
game_state[player].remove(tidx)
|
||||
|
||||
|
||||
def print_game_state(game_state):
|
||||
(board, p1tiles, p2tiles) = game_state
|
||||
|
||||
for row in board:
|
||||
print("".join([" " if x == 0 else "X" if x == 1 else "O" if x == 2 else "S" for x in row]))
|
||||
print(
|
||||
"".join(
|
||||
[
|
||||
" " if x == 0 else "X" if x == 1 else "O" if x == 2 else "S"
|
||||
for x in row
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
print("")
|
||||
print(f"Player 1 tiles left: {p1tiles}")
|
||||
print(f"Player 2 tiles left: {p2tiles}")
|
||||
|
||||
|
||||
game_state = (
|
||||
make_board(),
|
||||
[i for i in range(21)],
|
||||
|
|
@ -141,7 +170,7 @@ playing = True
|
|||
player = 1
|
||||
while playing:
|
||||
moves = []
|
||||
for (tidx, tile) in get_permutations(game_state[player]):
|
||||
for tidx, tile in get_permutations(game_state[player]):
|
||||
for placement in can_place(game_state[0], tile, player):
|
||||
moves.append((tidx, tile, placement))
|
||||
|
||||
|
|
@ -156,10 +185,7 @@ while playing:
|
|||
(tidx, tile, placement) = random.choice(moves)
|
||||
do_placement(tidx, tile, placement, game_state, player)
|
||||
|
||||
|
||||
if player == 1:
|
||||
player = 2
|
||||
elif player == 2:
|
||||
player = 1
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue