-
Notifications
You must be signed in to change notification settings - Fork 0
/
piece.py
69 lines (48 loc) · 2.42 KB
/
piece.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
class Piece:
"""
Class that represents a BoxShogi piece
"""
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name
def isOpponentPiece(self, otherPiece):
if self.name.islower():
return otherPiece.name.isupper()
else:
return otherPiece.name.islower()
def ownerOfPiece(self):
return self.name[-1].isupper() * 1
def maxRange(self):
# maximum possible delta_X and delta_Y the pieces can move in.
# the ones that are earlier in their respective lists are closer
# to the piece. See the first list of notes below for an example.
drive = [[[0, 1]],[[1, 0]],[[0, -1]],[[-1, 0]],[[1, 1]],[[1, -1]],[[-1, -1]],[[-1, 1]]]
notes = [[[1, 0], [2, 0], [3, 0], [4, 0]],\
[[-1,0], [-2,0], [-3,0], [-4,0]],\
[[0, 1], [0, 2], [0, 3], [0, 4]],\
[[0,-1], [0,-2], [0,-3], [0,-4]]]
governence = [[[1, 1], [2, 2], [3, 3], [4, 4]],\
[[1, -1], [2, -2], [3, -3], [4, -4]],\
[[-1,-1], [-2,-2], [-3,-3], [-4,-4]],\
[[-1, 1], [-2, 2], [-3, 3], [-4, 4]]]
# Have to divide shield and relay into cases because they are not symmetric wrt x axis
shieldLower = [[[-1,0]], [[-1,1]], [[0, 1]], [[1, 1]], [[1, 0]], [[0,-1]]]
shieldUpper = [[[1, 0]], [[1,-1]], [[0,-1]], [[-1,-1]], [[-1,0]], [[0, 1]]]
shieldOptions = [shieldLower, shieldUpper]
relayLower = [[[-1,-1]], [[-1,1]], [[0, 1]], [[1, 1]], [[1,-1]]]
relayUpper = [[[1, 1]], [[1,-1]], [[0,-1]], [[-1,-1]], [[-1,1]]]
relayOptions = [relayLower, relayUpper]
player = self.name[-1].isupper()
if self.name[-1].upper() == "D": # King
return drive
if self.name[-1].upper() == "N": # Rook
return notes if self.name[0] != '+' else notes + drive
if self.name[-1].upper() == "G": # Bishop
return governence if self.name[0] != '+' else governence + drive
if self.name[-1].upper() == "S":
return shieldOptions[player]
if self.name[-1].upper() == "R":
return relayOptions[player] if self.name[0] != '+' else shieldOptions[player]
if self.name[-1].upper() == "P":
return [[[[0, 1]]],[[[0, -1]]]][player] if self.name[0] != '+' else shieldOptions[player]