-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtools.py
More file actions
124 lines (109 loc) · 4.42 KB
/
tools.py
File metadata and controls
124 lines (109 loc) · 4.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from defines import *
import time
# Point (x, y) if in the valid position of the board.
def isValidPos(x,y):
return x>0 and x<Defines.GRID_NUM-1 and y>0 and y<Defines.GRID_NUM-1
def init_board(board):
for i in range(21):
board[i][0] = board[0][i] = board[i][Defines.GRID_NUM - 1] = board[Defines.GRID_NUM - 1][i] = Defines.BORDER
for i in range(1, Defines.GRID_NUM - 1):
for j in range(1, Defines.GRID_NUM - 1):
board[i][j] = Defines.NOSTONE
def make_move(board, move, color):
board[move.positions[0].x][move.positions[0].y] = color
board[move.positions[1].x][move.positions[1].y] = color
def unmake_move(board, move):
board[move.positions[0].x][move.positions[0].y] = Defines.NOSTONE
board[move.positions[1].x][move.positions[1].y] = Defines.NOSTONE
def is_win_by_premove(board, preMove):
directions = [(1, 0), (0, 1), (1, 1), (1, -1)]
for direction in directions:
for i in range(len(preMove.positions)):
count = 0
position = preMove.positions[i]
n = x = position.x
m = y = position.y
movStone = board[n][m]
if (movStone == Defines.BORDER or movStone == Defines.NOSTONE):
return False;
while board[x][y] == movStone:
x += direction[0]
y += direction[1]
count += 1
x = n - direction[0]
y = m - direction[1]
while board[x][y] == movStone:
x -= direction[0]
y -= direction[1]
count += 1
if count >= 6:
return True
return False
def get_msg(max_len):
buf = input().strip()
return buf[:max_len]
def log_to_file(msg):
g_log_file_name = Defines.LOG_FILE
try:
with open(g_log_file_name, "a") as file:
tm = time.time()
ptr = time.ctime(tm)
ptr = ptr[:-1]
file.write(f"[{ptr}] - {msg}\n")
return 0
except Exception as e:
print(f"Error: Can't open log file - {g_log_file_name}")
return -1
def move2msg(move):
if move.positions[0].x == move.positions[1].x and move.positions[0].y == move.positions[1].y:
msg = f"{chr(ord('S') - move.positions[0].x + 1)}{chr(move.positions[0].y + ord('A') - 1)}"
return msg
else:
msg = f"{chr(move.positions[0].y + ord('A') - 1)}{chr(ord('S') - move.positions[0].x + 1)}" \
f"{chr(move.positions[1].y + ord('A') - 1)}{chr(ord('S') - move.positions[1].x + 1)}"
return msg
def msg2move(msg):
move = StoneMove()
if len(msg) == 2:
move.positions[0].x = move.positions[1].x = ord('S') - ord(msg[1]) + 1
move.positions[0].y = move.positions[1].y = ord(msg[0]) - ord('A') + 1
move.score = 0
return move
else:
move.positions[0].x = ord('S') - ord(msg[1]) + 1
move.positions[0].y = ord(msg[0]) - ord('A') + 1
move.positions[1].x = ord('S') - ord(msg[3]) + 1
move.positions[1].y = ord(msg[2]) - ord('A') + 1
move.score = 0
return move
def print_board(board, preMove=None):
print(" " + "".join([chr(i + ord('A') - 1)+" " for i in range(1, Defines.GRID_NUM - 1)]))
for i in range(1, Defines.GRID_NUM - 1):
print(f"{chr(ord('A') - 1 + i)}", end=" ")
for j in range(1, Defines.GRID_NUM - 1):
x = Defines.GRID_NUM - 1 - j
y = i
stone = board[x][y]
if stone == Defines.NOSTONE:
print(" -", end="")
elif stone == Defines.BLACK:
print(" O", end="")
elif stone == Defines.WHITE:
print(" *", end="")
print(" ", end="")
print(f"{chr(ord('A') - 1 + i)}", end="\n")
print(" " + "".join([chr(i + ord('A') - 1)+" " for i in range(1, Defines.GRID_NUM - 1)]))
def print_score(move_list, n):
board = [[0] * Defines.GRID_NUM for _ in range(Defines.GRID_NUM)]
for move in move_list:
board[move.x][move.y] = move.score
print(" " + "".join([f"{i:4}" for i in range(1, Defines.GRID_NUM - 1)]))
for i in range(1, Defines.GRID_NUM - 1):
print(f"{i:2}", end="")
for j in range(1, Defines.GRID_NUM - 1):
score = board[i][j]
if score == 0:
print(" -", end="")
else:
print(f"{score:4}", end="")
print()