-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogic.py
140 lines (118 loc) · 4.38 KB
/
logic.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
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
from board import *
from pieces import *
import numpy as np
class ChessGame:
def __init__(self):
#variable to keep track of checks, since you can only be in check if its your go we dont have to record who is in check
self.check=False
#variable to keep track of available en pasaunts since can only be one availabel at a time we dont need to record whos it was
self.pawn_in_movement=[(None,None),(None,None)]
#a 2d array of the piece at each square in the board
self.piece_map=[
[-4,-3,-2,-5,-6,-2,-3,-4],
[-1,-1,-1,-1,-1,-1,-1,-1],
[ 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0],
[ 1, 1, 1, 1, 1, 1, 1, 1],
[ 4, 3, 2, 5, 6, 2, 3, 4]
]
#store the pieces in a list
self.white_pieces = []
self.black_pieces = []
#the pawns
for i in range(8):
self.white_pieces.append(Pawn((6,i),True))
self.black_pieces.append(Pawn((1,i),False))
#the kings
self.white_pieces.append(King((7,3),True))
self.black_pieces.append(King((0,3),False))
#the queens
self.white_pieces.append(Queen((7,4),True))
self.black_pieces.append(Queen((0,4),False))
#the bishops
self.white_pieces.append(Bishop((7,2),True))
self.white_pieces.append(Bishop((7,5),True))
self.black_pieces.append(Bishop((0,2),False))
self.black_pieces.append(Bishop((0,5),False))
#the knights
self.white_pieces.append(Knight((7,1),True))
self.white_pieces.append(Knight((7,6),True))
self.black_pieces.append(Knight((0,1),False))
self.black_pieces.append(Knight((0,6),False))
#the rooks
self.white_pieces.append(Rook((7,0),True))
self.white_pieces.append(Rook((7,7),True))
self.black_pieces.append(Rook((0,0),False))
self.black_pieces.append(Rook((0,7),False))
#draw the pieces on the creen
def draw(self,screen):
for piece in self.white_pieces:
piece.draw(screen)
for piece in self.black_pieces:
piece.draw(screen)
#return a list of possible moves for the piece at a give square including itslef
def get_possible_moves(self,square,white_to_move):
if self.check:
return []
if white_to_move:
for piece in self.white_pieces:
if np.all(piece.position == square):
if piece.piece_type==1:
return [square]+piece.possible_moves(self.piece_map,self.pawn_in_movement)
else:
return [square]+piece.possible_moves(self.piece_map)
else:
for piece in self.black_pieces:
if np.all(piece.position == square):
if piece.piece_type==1:
return [square]+piece.possible_moves(self.piece_map,self.pawn_in_movement)
else:
return [square]+piece.possible_moves(self.piece_map)
return []
#move the piece at the start position if it exists to the end position
def move(self, white_to_move,start_position, end_position):
#remove piece if their is one being taken
if self.piece_map[end_position[0]][end_position[1]]!=0:
if white_to_move:
for piece in self.black_pieces:
if np.all(piece.position == end_position):
self.black_pieces.remove(piece)
else:
for piece in self.white_pieces:
if np.all(piece.position == end_position):
self.white_pieces.remove(piece)
#update piece map
self.piece_map[end_position[0]][end_position[1]]=self.piece_map[start_position[0]][start_position[1]]
self.piece_map[start_position[0]][start_position[1]]=0
piece_type=0
#move the piece
if white_to_move:
for piece in self.white_pieces:
if np.all(piece.position == start_position):
piece.move_to(end_position)
piece_type=piece.piece_type
else:
for piece in self.black_pieces:
if np.all(piece.position == start_position):
piece.move_to(end_position)
piece_type=piece.piece_type
#remove pawn if enpausaunted
if piece_type==1:
if np.all(end_position==self.pawn_in_movement[0]):
print("Enpausant")
self.piece_map[self.pawn_in_movement[1][0]][self.pawn_in_movement[1][1]]=0
if white_to_move:
for piece in self.black_pieces:
if np.all(piece.position == self.pawn_in_movement[1]):
self.black_pieces.remove(piece)
else:
for piece in self.white_pieces:
if np.all(piece.position == self.pawn_in_movement[1]):
self.white_pieces.remove(piece)
#remeber if a pawn moved two squares
self.pawn_in_movement=[(None,None),(None,None)]
if piece_type==1:
if abs(end_position[0]-start_position[0])==2:
self.pawn_in_movement=[(start_position[0]+1-2*white_to_move,start_position[1]),end_position]