[Aide] Python : jeu d'echec
RésoluSmoodie -
Bonjour,
J'aimerais créer un jeu d'echec en python (seulement avec pygame/sdl2 sans python-chess),
mais malheureuseent j suis deja coincé dans le positionnement des pieces, je n'arrive pas a faire en sorte de bien positionner les pieces selon la cases, par exemple e4 serait a x = ... et y = ..
mais j'ai du mal a situer avec pygame, surtout au niveau de x, voila le resultat actuel :
voila le code (ne faite ps attention a la variable turn elle est censé instauré la notion de tours, par exemple turn = 0 le tour des blanc, mais si turn = 1 alors ceux des noirs, ne faites egalement pas très attention au classes, elle sont pour l'instant pas trop utilisé pour quoi ils ont été)
import pygame
class Board:
def __init__(self, size=8):
self.size = size
self.grid = [['' for _ in range(size)] for _ in range(size)]
def get_square(self, x, y):
return self.grid[y][x]
def set_square(self, x, y, piece):
self.grid[y][x] = piece
def is_square_empty(self, x, y):
return self.get_square(x, y) == ''
def is_valid_square(self, x, y):
return 0 <= x < self.size and 0 <= y < self.size
def clear(self):
self.grid = [['' for _ in range(self.size)] for _ in range(self.size)]
class Piece:
def __init__(self, image, position):
self.image = image
self.rect = self.image.get_rect()
self.rect.x, self.rect.y = position
class Pawn(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class Rook(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class Knight(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class Bishop(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class Queen(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class King(Piece):
def __init__(self, image, position):
super().__init__(image, position)
def load():
board = pygame.image.load('assets/board.png')
window.blit(board, (0, 0))
white_pieces = {}
black_pieces = {}
turn = 0
# Créer les pions blancs
for i in range(8):
name = f"pawn_{i}_white"
image = pygame.image.load("assets/white/pawn.png")
position = ((i + 0.5) * 75, 510) # calculer la position centrale de la case
white_pieces[name] = Pawn(image, position)
# Créer les pions noirs
for i in range(8):
name = f"pawn_{i}_black"
image = pygame.image.load("assets/black/pawn.png")
position = ((i + 0.5) * 70, 87) # calculer la position centrale de la case
black_pieces[name] = Pawn(image, position)
# Créer les autres pièces blanches
white_pieces["rook_0_white"] = Rook(pygame.image.load("assets/white/rook.png"), (0, 560))
white_pieces["rook_1_white"] = Rook(pygame.image.load("assets/white/rook.png"), (560, 560))
white_pieces["knight_0_white"] = Knight(pygame.image.load("assets/white/knight.png"), (70, 560))
white_pieces["knight_1_white"] = Knight(pygame.image.load("assets/white/knight.png"), (490, 560))
white_pieces["bishop_0_white"] = Bishop(pygame.image.load("assets/white/bishop.png"), (140, 560))
white_pieces["bishop_1_white"] = Bishop(pygame.image.load("assets/white/bishop.png"), (420, 560))
white_pieces["queen_white"] = Queen(pygame.image.load("assets/white/queen.png"), (280, 560))
white_pieces["king_white"] = King(pygame.image.load("assets/white/king.png"), (210, 560))
# Créer les autres pièces noires
black_pieces["rook_0_black"] = Rook(pygame.image.load("assets/black/rook.png"), (0, 0))
black_pieces["rook_1_black"] = Rook(pygame.image.load("assets/black/rook.png"), (560, 0))
black_pieces["knight_0_black"] = Knight(pygame.image.load("assets/black/knight.png"), (70, 0))
black_pieces["knight_1_black"] = Knight(pygame.image.load("assets/black/knight.png"), (490, 0))
black_pieces["bishop_0_black"] = Bishop(pygame.image.load("assets/black/bishop.png"), (140, 0))
black_pieces["bishop_1_black"] = Bishop(pygame.image.load("assets/black/bishop.png"), (420, 0))
black_pieces["queen_black"] = Queen(pygame.image.load("assets/black/queen.png"), (280, 0))
black_pieces["king_black"] = King(pygame.image.load("assets/black/king.png"), (210, 0))
return board, white_pieces, black_pieces, turn
def display_pieces(white_pieces, black_pieces):
for piece in white_pieces.values():
window.blit(piece.image, piece.rect)
for piece in black_pieces.values():
window.blit(piece.image, piece.rect)
def main():
board, white_pieces, black_pieces, turn = load()
display_pieces(white_pieces, black_pieces)
pygame.display.flip()
# Boucle principale
running = True
while running:
# Gestion des événements
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Affichage du plateau et des pièces
window.blit(board, (0, 0))
for piece in white_pieces.values():
window.blit(piece.image, piece.rect)
for piece in black_pieces.values():
window.blit(piece.image, piece.rect)
pygame.display.flip()
pygame.quit()
if __name__ == '__main__':
pygame.init()
window_size = (670, 670)
window = pygame.display.set_mode(window_size)
pygame.display.set_caption("pyChess")
main()
- Echec python
- Mode sans echec ps4 - Guide
- Citizen code python avis - Accueil - Outils
- Démarrage sans échec - Guide
- Echec de l'analyse antivirus - Astuces et Solutions
- Echec du upnp ✓ - Forum Freebox
1 réponse
Bonjour,
Ton plateau est constitué de carrés de 84X84 pixels, donc l'image de fond et la window doivent faire 672X672. Tu fais des images des pièces faisant toutes aussi 84x84 et dans ton programme tu positionnes les pièces sur des multiples de 84, en x et y
import pygame
class Board:
def __init__(self, size=8):
self.size = size
self.grid = [['' for _ in range(size)] for _ in range(size)]
def get_square(self, x, y):
return self.grid[y][x]
def set_square(self, x, y, piece):
self.grid[y][x] = piece
def is_square_empty(self, x, y):
return self.get_square(x, y) == ''
def is_valid_square(self, x, y):
return 0 <= x < self.size and 0 <= y < self.size
def clear(self):
self.grid = [['' for _ in range(self.size)] for _ in range(self.size)]
class Piece:
def __init__(self, image, position):
self.image = image
self.rect = self.image.get_rect()
self.rect.x, self.rect.y = position
class Pawn(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class Rook(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class Knight(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class Bishop(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class Queen(Piece):
def __init__(self, image, position):
super().__init__(image, position)
class King(Piece):
def __init__(self, image, position):
super().__init__(image, position)
def load():
board = pygame.image.load('assets/board.png')
window.blit(board, (0, 0))
white_pieces = {}
black_pieces = {}
turn = 0
# Créer les pions blancs
for i in range(8):
name = f"pawn_{i}_white"
image = pygame.image.load("assets/white/pawn.png")
position = (i * 84, 6*84)
white_pieces[name] = Pawn(image, position)
# Créer les pions noirs
for i in range(8):
name = f"pawn_{i}_black"
image = pygame.image.load("assets/black/pawn.png")
position = (i * 84, 84)
black_pieces[name] = Pawn(image, position)
# Créer les autres pièces blanches
white_pieces["rook_0_white"] = Rook(pygame.image.load("assets/white/rook.png"), (0*84, 7*84))
white_pieces["rook_1_white"] = Rook(pygame.image.load("assets/white/rook.png"), (7*84, 7*84))
white_pieces["knight_0_white"] = Knight(pygame.image.load("assets/white/knight.png"), (1*84, 7*84))
white_pieces["knight_1_white"] = Knight(pygame.image.load("assets/white/knight.png"), (6*84, 7*84))
white_pieces["bishop_0_white"] = Bishop(pygame.image.load("assets/white/bishop.png"), (2*84, 7*84))
white_pieces["bishop_1_white"] = Bishop(pygame.image.load("assets/white/bishop.png"), (5*84, 7*84))
white_pieces["queen_white"] = Queen(pygame.image.load("assets/white/queen.png"), (3*84, 7*84))
white_pieces["king_white"] = King(pygame.image.load("assets/white/king.png"), (4*84, 7*84))
# Créer les autres pièces noires
black_pieces["rook_0_black"] = Rook(pygame.image.load("assets/black/rook.png"), (0*84, 0))
black_pieces["rook_1_black"] = Rook(pygame.image.load("assets/black/rook.png"), (7*84, 0))
black_pieces["knight_0_black"] = Knight(pygame.image.load("assets/black/knight.png"), (1*84, 0))
black_pieces["knight_1_black"] = Knight(pygame.image.load("assets/black/knight.png"), (6*84, 0))
black_pieces["bishop_0_black"] = Bishop(pygame.image.load("assets/black/bishop.png"), (2*84, 0))
black_pieces["bishop_1_black"] = Bishop(pygame.image.load("assets/black/bishop.png"), (5*84, 0))
black_pieces["queen_black"] = Queen(pygame.image.load("assets/black/queen.png"), (3*84, 0))
black_pieces["king_black"] = King(pygame.image.load("assets/black/king.png"), (4*84, 0))
return board, white_pieces, black_pieces, turn
def display_pieces(white_pieces, black_pieces):
for piece in white_pieces.values():
window.blit(piece.image, piece.rect)
for piece in black_pieces.values():
window.blit(piece.image, piece.rect)
def main():
board, white_pieces, black_pieces, turn = load()
display_pieces(white_pieces, black_pieces)
pygame.display.flip()
# Boucle principale
running = True
while running:
# Gestion des événements
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Affichage du plateau et des pièces
window.blit(board, (0, 0))
for piece in white_pieces.values():
window.blit(piece.image, piece.rect)
for piece in black_pieces.values():
window.blit(piece.image, piece.rect)
pygame.display.flip()
pygame.quit()
if __name__ == '__main__':
pygame.init()
window_size = (670, 670)
window = pygame.display.set_mode(window_size)
pygame.display.set_caption("pyChess")
main()

merci beaucoup ça marche a la perfection !