1
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import platform
|
||||
import subprocess
|
||||
|
||||
import numpy as np
|
||||
|
||||
# tag::print_utils[]
|
||||
from tugo import gotypes
|
||||
|
||||
COLS = 'ABCDEFGHJKLMNOPQRST'
|
||||
STONE_TO_CHAR = {
|
||||
None: ' . ',
|
||||
gotypes.Player.black: ' x ',
|
||||
gotypes.Player.white: ' o ',
|
||||
}
|
||||
|
||||
|
||||
def print_move(player, move):
|
||||
if move.is_pass:
|
||||
move_str = 'passes'
|
||||
elif move.is_resign:
|
||||
move_str = 'resigns'
|
||||
else:
|
||||
move_str = '%s%d' % (COLS[move.point.col - 1], move.point.row)
|
||||
print('%s %s' % (player, move_str))
|
||||
|
||||
|
||||
def print_board(board):
|
||||
for row in range(board.num_rows, 0, -1):
|
||||
bump = " " if row <= 9 else ""
|
||||
line = []
|
||||
for col in range(1, board.num_cols + 1):
|
||||
stone = board.get(gotypes.Point(row=row, col=col))
|
||||
line.append(STONE_TO_CHAR[stone])
|
||||
print('%s%d %s' % (bump, row, ''.join(line)))
|
||||
print(' ' + ' '.join(COLS[:board.num_cols]))
|
||||
# end::print_utils[]
|
||||
|
||||
|
||||
# tag::human_coordinates[]
|
||||
def point_from_coords(coords):
|
||||
col = COLS.index(coords[0]) + 1
|
||||
row = int(coords[1:])
|
||||
return gotypes.Point(row=row, col=col)
|
||||
# end::human_coordinates[]
|
||||
|
||||
|
||||
def coords_from_point(point):
|
||||
return '%s%d' % (
|
||||
COLS[point.col - 1],
|
||||
point.row
|
||||
)
|
||||
|
||||
def clear_screen():
|
||||
# see https://stackoverflow.com/a/23075152/323316
|
||||
if platform.system() == "Windows":
|
||||
subprocess.Popen("cls", shell=True).communicate()
|
||||
else: # Linux and Mac
|
||||
# the link uses print("\033c", end=""), but this is the original sequence given in the book.
|
||||
print(chr(27) + "[2J")
|
||||
|
||||
# NOTE: MoveAge is only used in chapter 13, and doesn't make it to the main text.
|
||||
# This feature will only be implemented in goboard_fast.py so as not to confuse
|
||||
# readers in early chapters.
|
||||
class MoveAge():
|
||||
def __init__(self, board):
|
||||
self.move_ages = - np.ones((board.num_rows, board.num_cols))
|
||||
|
||||
def get(self, row, col):
|
||||
return self.move_ages[row, col]
|
||||
|
||||
def reset_age(self, point):
|
||||
self.move_ages[point.row - 1, point.col - 1] = -1
|
||||
|
||||
def add(self, point):
|
||||
self.move_ages[point.row - 1, point.col - 1] = 0
|
||||
|
||||
def increment_all(self):
|
||||
self.move_ages[self.move_ages > -1] += 1
|
||||
Reference in New Issue
Block a user