Mon script ne marche pas
grimoire_gris -
Bonjour,
Je ne comprends pas le problème avec mon script. Quand je le lance un simple écran noir apparaît, j'ai fait ce code sur PyCharm. Si vous avez des solution je suis vraiment preneur.
Le but est qu'un bot fasse du morpion pour après lui ait appris à jouer grâce au machine Learning ou autre, mais ça, c'est pour après. Déjà il faudrait que l'interface du morpion marche.
Voici tout le code que j'ai pour l'instant (j'utilise pygame comme bibliothèque)
import pygame
# Initialisation de Pygame
pygame.init()
# Définition des couleurs
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
# Définition de la taille de la fenêtre
WINDOW_SIZE = (500, 500)
# Définition de la police de caractères
FONT = pygame.font.Font(None, 50)
# Création de la fenêtre
screen = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption("Morpion")
# Initialisation de la matrice du jeu
game_matrix = [['', '', ''], ['', '', ''], ['', '', '']]
# Définition du joueur courant
player = 'X'
# Définition de l'état du tour de jeu
player_turn = True
# Fonction pour dessiner la grille
def draw_grid():
# Dessiner les lignes verticales
pygame.draw.line(screen, BLACK, (166, 0), (166, 500), 5)
pygame.draw.line(screen, BLACK, (332, 0), (332, 500), 5)
# Dessiner les lignes horizontales
pygame.draw.line(screen, BLACK, (0, 166), (500, 166), 5)
pygame.draw.line(screen, BLACK, (0, 332), (500, 332), 5)
# Fonction pour dessiner une croix ou un rond
def draw_XO(row, col):
# Calculer les coordonnées du centre de la case
x = col * 166 + 83
y = row * 166 + 83
# Dessiner une croix ou un rond en fonction du joueur courant
if player == 'X':
pygame.draw.line(screen, BLACK, (x - 50, y - 50), (x + 50, y + 50), 5)
pygame.draw.line(screen, BLACK, (x + 50, y - 50), (x - 50, y + 50), 5)
else:
pygame.draw.circle(screen, BLACK, (x, y), 50, 5)
# Fonction pour vérifier si le jeu est terminé
def check_game_over():
global running, winner
if player_turn:
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
# Récupérer la position de la souris
pos = pygame.mouse.get_pos()
row = pos[1] // 166
col = pos[0] // 166
# Vérifier si la case est vide
if game_matrix[row][col] == '':
# Marquer la case avec le symbole du joueur
game_matrix[row][col] = player
# Vérifier s'il y a un gagnant
if check_win():
winner = player
print(f"Le joueur {winner} a gagné !")
running = False
# Changer de joueur
player = 'O' if player == 'X' else 'X'
player_turn = False
# Fonction pour vérifier s'il y a un gagnant
def check_win():
# Vérifier les lignes
for row in range(3):
if game_matrix[row][0] == game_matrix[row][1] == game_matrix[row][2] != '':
return True
# Vérifier les colonnes
for col in range(3):
if game_matrix[0][col] == game_matrix[1][col] == game_matrix[2][col] != '':
return True
# Vérifier les diagonales
if game_matrix[0][0] == game_matrix[1][1] == game_matrix[2][2] != '':
return True
if game_matrix[0][2] == game_matrix[1][1] == game_matrix[2][0] != '':
return True
# Aucun gagnant
return False
# Boucle principale du jeu
winner = None
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if player_turn:
# Récupérer la position de la souris
pos = pygame.mouse.get_pos()
row = pos[1] // 166
col = pos[0] // 166
# Vérifier si la case est vide
if game_matrix[row][col] == '':
# Marquer la case avec le symbole du joueur
game_matrix[row][col] = player
# Vérifier s'il y a un gagnant
if check_win():
winner = player
print(f"Le joueur {winner} a gagné !")
running = False
# Changer de joueur
player = 'O' if player == 'X' else 'X'
player_turn = False
# Appel de la fonction pour vérifier si le jeu est terminé
check_game_over()
# Dessiner le symbole sur la grille
draw_grid()
draw_XO(row, col)
# Mettre à jour l'affichage
pygame.display.update()
# Si le jeu est terminé, afficher le message de fin
if winner:
font = pygame.font.Font(None, 36)
text = font.render(f"Le joueur {winner} a gagné !", True, BLACK)
text_rect = text.get_rect(center=(screen.get_width() // 2, screen.get_height() // 2))
screen.blit(text, text_rect)
pygame.display.flip()
pygame.time.delay(3000) # Attendre 3 secondes avant de fermer la fenêtre
running = False
# Quitter Pygame
pygame.quit()
- Script bls
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
- Script download - Télécharger - Édition & Programmation
1 réponse
Bonjour,
Si tu dessines des lignes noires sur un écran noir, ça risque de ne pas se voir ;)
De plus, chaque fois qu'une croix ou un rond sera ajouté, il faudra que tu redessines tout, toute ta matrice comprise.
# Boucle principale du jeu
winner = None
running = True
# pré-affichage
screen.fill(WHITE)
draw_grid()
pygame.display.update()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if player_turn:
# Récupérer la position de la souris
pos = pygame.mouse.get_pos()
row = pos[1] // 166
col = pos[0] // 166
# Vérifier si la case est vide
if not game_matrix[row][col]:
# Marquer la case avec le symbole du joueur
game_matrix[row][col] = player
# Vérifier s'il y a un gagnant
if check_win():
winner = player
print(f"Le joueur {winner} a gagné !")
running = False
# Changer de joueur
player = 'O' if player == 'X' else 'X'
player_turn = False
# Appel de la fonction pour vérifier si le jeu est terminé
# check_game_over() ?
screen.fill(WHITE)
# Dessiner le symbole sur la grille
draw_grid()
for i, line in enumerate(game_matrix):
for j, el in enumerate(line):
x = 83 + 166 * j
y = 83 + 166 * i
if el == 'X':
pygame.draw.line(screen, BLACK, (x - 50, y - 50), (x + 50, y + 50), 5)
pygame.draw.line(screen, BLACK, (x + 50, y - 50), (x - 50, y + 50), 5)
elif el == 'O':
pygame.draw.circle(screen, BLACK, (x, y), 50, 5)
# Mettre à jour l'affichage
pygame.display.update()
# Si le jeu est terminé, afficher le message de fin
if winner:
font = pygame.font.Font(None, 36)
text = font.render(f"Le joueur {winner} a gagné !", True, BLACK)
text_rect = text.get_rect(center=(screen.get_width() // 2, screen.get_height() // 2))
screen.blit(text, text_rect)
pygame.display.flip()
pygame.time.delay(3000) # Attendre 3 secondes avant de fermer la fenêtre
running = False
pygame.display.update()
Il est fortement déconseillé de faire plusieurs appels à display.update dans un code.
Ta fonction draw_XO devient caduque, sans doute faire une fonction matrix_draw, quant à check_game_over ?
Bonne continuation.