-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsettings.py
71 lines (53 loc) · 2.51 KB
/
settings.py
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
WIDTH, HEIGHT = 8, 8 # длины сторон
NORTH = -WIDTH # север
NORTHEAST = -WIDTH + 1 # северо-запад
EAST = 1 # запад
SOUTHEAST = WIDTH + 1 # юго-запад
SOUTH = WIDTH # юг
SOUTHWEST = WIDTH - 1 # юго-восток
WEST = - 1 # восток
NORTHWEST = -WIDTH - 1 # северо-восток
DIRECTIONS = (
NORTH, NORTHEAST,
EAST, SOUTHEAST,
SOUTH, SOUTHWEST,
WEST, NORTHWEST
)
COLORS = {
'B': 'Черные',
'W': 'Белые'
}
class PieceType(): # типы полей
'''Класс всех возможных состояний полей на доске'''
BOARD = '·' # пустое
BLACK = 'B' # черная фишка
WHITE = 'W' # белая фишка
MOVE = '×' # вариант хода
class NoMoves(Exception):
pass
class WrongMove(Exception):
pass
def chunks(lst, n): # разбиение массива по чанкам
for i in range(0, len(lst), n):
yield lst[i:i + n]
def out_of_bounds(piece, direction): # проверка на возможный выход за пределы поля
'''Проверка, касается ли текущее поле границы в заданном направлении'''
piece_top = 0 <= piece <= 7 # верхняя граница (индексы от 0 до 7)
piece_bot = 56 <= piece <= 63 # нижняя граница (индексы от 56 до 63)
piece_right = piece % WIDTH == 7 # правая граница (индексы, дающие 7 по модулю WIDTH)
piece_left = piece % WIDTH == 0 # левая граница (индексы, дающие 0 по модулю WIDTH)
return (direction in (NORTH, NORTHEAST, NORTHWEST) and piece_top) or \
(direction in (SOUTH, SOUTHWEST, SOUTHEAST) and piece_bot) or \
(direction in (EAST, NORTHEAST, SOUTHEAST) and piece_right) or \
(direction in (WEST, NORTHWEST, SOUTHWEST) and piece_left)
def get_color(fg=None, bg=None):
color = ''
if fg:
color += f'\x1b[38;2;{fg}m'
if bg:
color += f'\x1b[48;2;{bg}m'
return color
def reset_color():
return '\x1b[0m'
def color_string(str, fg=None, bg=None):
return get_color(fg, bg) + str + reset_color()