107 lines
3.4 KiB
Python
107 lines
3.4 KiB
Python
import pygame
|
|
|
|
class Pawn:
|
|
def __init__(self,side,color,position):
|
|
self.side=side
|
|
self.color=color
|
|
self.position=position
|
|
self.diagonal1=[(i,i) for i in range(-10,10)]
|
|
self.diagonal2=[(-i,i) for i in range(-10,10)]
|
|
self.horizontal=[(i,0) for i in range(-10,10)]
|
|
self.vertical=[(0,i) for i in range(-10,10)]
|
|
self.moves=[]
|
|
self.special_moves=[]
|
|
self.steps=0
|
|
|
|
def getMoves(self,board):
|
|
moves=[]
|
|
for move in self.moves:
|
|
x,y=move
|
|
entity=board.grid[y][x]
|
|
if entity is None:
|
|
moves.append(move)
|
|
else:
|
|
if entity.side!=self.side:
|
|
moves.append(move)
|
|
|
|
for move in special_moves:
|
|
x,y,condition=move
|
|
if condition(board):
|
|
entity=board.grid[y][x]
|
|
if entity is None:
|
|
moves.append(move)
|
|
else:
|
|
if entity.side!=self.side:
|
|
moves.append(move)
|
|
|
|
|
|
def showMoves(self,moves,board,window):
|
|
wsx,wsy=window.size
|
|
sx,sy=board.size
|
|
for move in moves:
|
|
x,y=move
|
|
raw_position=[x*wsx/sx,y*wsy/sy]
|
|
raw_radius=min(wsx/sx,wsy/sy)*2/3
|
|
pygame.draw.circle(window.screen,board.potential_moves_color,raw_position,raw_radius,0)
|
|
|
|
|
|
|
|
def show(self,coordonnates,window):
|
|
x,y,sx,sy=coordonnates
|
|
picture=pygame.image.load(self.picture_directory)
|
|
picture=pygame.transform.scale(picture,(sx,sy))
|
|
picture=colorize(picture,self.color)
|
|
window.screen.blit(picture, (x,y))
|
|
|
|
class Knight(Pawn):
|
|
def __init__(self,side,color,position):
|
|
Pawn.__init__(self,side,color,position)
|
|
self.moves=[(0,1)]
|
|
self.special_moves=[(0,2,self.twoSteps)]
|
|
#prise en passant a ajouter
|
|
self.picture_directory="Pictures/knight.png"
|
|
|
|
def twoSteps(self,board):
|
|
return self.steps==0
|
|
|
|
|
|
class Tower(Pawn):
|
|
def __init__(self,side,color,position):
|
|
Pawn.__init__(self,side,color,position)
|
|
self.moves=self.horizontal+self.vertical
|
|
self.picture_directory="Pictures/tower.png"
|
|
|
|
class Bishop(Pawn):
|
|
def __init__(self,side,color,position):
|
|
Pawn.__init__(self,side,color,position)
|
|
self.moves=self.diagonal1+self.diagonal2
|
|
self.picture_directory="Pictures/bishop.png"
|
|
|
|
class Horse(Pawn):
|
|
def __init__(self,side,color,position):
|
|
Pawn.__init__(self,side,color,position)
|
|
self.moves=[(-2, 1), ( 2, 1),
|
|
(-2,-1), ( 2,-1)]
|
|
self.picture_directory="Pictures/horse.png"
|
|
|
|
class Queen(Pawn):
|
|
def __init__(self,side,color,position):
|
|
Pawn.__init__(self,side,color,position)
|
|
self.moves=self.horizontal+self.vertical+self.diagonal1+self.diagonal2
|
|
self.picture_directory="Pictures/queen.png"
|
|
|
|
class King(Pawn):
|
|
def __init__(self,side,color,position):
|
|
Pawn.__init__(self,side,color,position)
|
|
self.moves=[(-1, 1), ( 0, 1), ( 1, 1),
|
|
(-1, 0), ( 0, 0), ( 1, 0),
|
|
(-1,-1), ( 0,-1), ( 1,-1)]
|
|
#roc a ajouter
|
|
self.picture_directory="Pictures/king.png"
|
|
|
|
def colorize(image, newColor):
|
|
image = image.copy()
|
|
image.fill((0, 0, 0, 255), None, pygame.BLEND_RGBA_MULT)
|
|
image.fill(newColor[0:3] + (0,), None, pygame.BLEND_RGBA_ADD)
|
|
return image
|