Files
python-chess/python_chess/pieces.py
T

152 lines
4.8 KiB
Python

from mycolors import *
import pygame
class Piece:
def __init__(self,side,position):
self.name=self.id+str(self.instance%2+1)
self.side=side
self.position=position
self.diagonals=[(1,1),(-1,1),(-1,-1),(1,-1)]
self.L_diagonals=[(2,1),(1,2),(-1,2),(-2,1),(-2,-1),(-1,-2),(1,-2),(2,-1)]
self.left=[(-1,0)]
self.right=[(1,0)]
self.up=[(0,1)]
self.down=[(0,-1)]
self.vertical=self.up+self.down
self.horizontal=self.left+self.right
self.axis=self.horizontal+self.vertical
self.moves=[]
self.special_moves=[]
self.state=0
self.max_norm=10
self.direct_kill=True
def show(self,window,coordonnates,colors):
if self.side==1:
color=colors[0]
else:
color=colors[1]
x,y,sx,sy=coordonnates
sx,sy=int(sx),int(sy)
picture=pygame.image.load(self.picture_directory)
picture=pygame.transform.scale(picture,(sx+12,sy+4))
picture=colorize(picture,reverseColor(color))
window.screen.blit(picture, (x-6,y-2))
picture=pygame.transform.scale(picture,(sx,sy))
picture=colorize(picture,color)
window.screen.blit(picture, (x,y))
def __repr__(self):
return self.name+" of side "+str(self.side)+" is in "+str(self.position)
class Pawn(Piece):
instance=0
def __init__(self,side,position):
Pawn.instance+=1
self.instance=Pawn.instance
self.id="Pawn"
Piece.__init__(self,side,position)
self.vectors=self.up
self.norm=1
self.moves=(self.vectors,self.norm)
#prise en passant a ajouter
self.picture_directory="Pictures/pawn.png"
self.direct_kill=False
self.en_passant=[([(0,1)],Pawn,None,None), ([((-1,1),(0,0)),((1,1),(0,0))],True,False)]
self.diagonal_kill=[([(0,1)],Pawn,None,None), ([((-1,1),(0,0)),((1,1),(0,0))],True,False)]
self.value=1
class Tower(Piece):
instance=0
def __init__(self,side,position):
self.instance=Tower.instance
self.id="Tower"
Piece.__init__(self,side,position)
self.vectors=self.axis
self.norm=self.max_norm
self.moves=(self.vectors,self.norm)
self.picture_directory="Pictures/tower.png"
Tower.instance+=1
self.value=4
class Bishop(Piece):
instance=0
def __init__(self,side,position):
self.instance=Bishop.instance
self.id="Bishop"
Piece.__init__(self,side,position)
self.vectors=self.diagonals
self.norm=self.max_norm
self.moves=(self.vectors,self.norm)
self.picture_directory="Pictures/bishop.png"
Bishop.instance+=1
self.value=3
class Horse(Piece):
instance=0
def __init__(self,side,position):
self.instance=Horse.instance
self.id="Horse"
Piece.__init__(self,side,position)
self.vectors=self.L_diagonals
self.norm=1
self.moves=(self.vectors,self.norm)
self.picture_directory="Pictures/horse.png"
Horse.instance+=1
self.value=3
class Queen(Piece):
instance=0
def __init__(self,side,position):
self.instance=Queen.instance
self.id="Queen"
Piece.__init__(self,side,position)
self.vectors=self.axis+self.diagonals
self.norm=self.max_norm
self.moves=(self.vectors,self.norm)
self.picture_directory="Pictures/queen.png"
Queen.instance+=1
self.value=7
class King(Piece):
instance=0
def __init__(self,side,position):
self.instance=King.instance
self.id="King"
Piece.__init__(self,side,position)
self.vectors=self.axis+self.diagonals
self.norm=1
self.moves=(self.vectors,self.norm)
#roc a ajouter
#mouvements speciaux=[
#((mouvements),Entity,self.state,entity.state),]
self.picture_directory="Pictures/king.png"
self.castling=[(self.horizontal,Tower,0,0), ([((2,0),(0,1)),((-2,0),(-1,0))],False,False)]
self.special_moves=[self.castling]
King.instance+=1
self.value=1000
self.check=False
"""
Structure des mouvements speciaux:
special_moves=[special_move, ...]
special_move=(conditions,actions)
conditions=(relative_positions,entity,self.state,entity.state)
relative_positions=[relative_position, ...]
relative_position=[0,0]
entity=out/None/piece
self.state=0/None
entity.state=0/None
actions=(moves,kill,transformation)
moves=[move, ...]
move=(self.move,entity.move)
self.move=[0,1]
entity.move=[0,1] #mouvement relatif au self
kill=True/False
transformation=True/False
"""