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
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- 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.