Le jeu des 5 erreurs python

Résolu
Utilisateur anonyme - 28 déc. 2023 à 22:19
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 - 30 déc. 2023 à 07:58

Bonjour, je cherche en vain de coder le jeu des 5 erreurs.

J'ai un début de code mais le clic sur l'endroit de l'erreur n'apparait pas.

j'ai fais pas mal d'essai mais je suis comme qui dirais bloqué.

Si vous avez une idée je suis preneur.

Merci d'avance.

6 réponses

Gandalfix Messages postés 85 Date d'inscription vendredi 12 juin 2020 Statut Membre Dernière intervention 2 mai 2024 7
29 déc. 2023 à 05:03

Bonjour,

Vous dites avoir un début de code, mais où est-il donc ?

Si vous le poster, merci d'utiliser les outils adéquats, voir https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code.


0
Utilisateur anonyme
29 déc. 2023 à 14:44

Bonjour, tout a fait le code est le suivant :

import cv2
import random
import tkinter as tk
from tkinter import Canvas, Button, messagebox
from PIL import Image, ImageTk
from functools import partial

def generer_erreurs(image):
    img_avec_erreurs = image.copy()

    # Coordonnées manuelles des erreurs (en pixels)
    erreur_coords = [(100, 200), (300, 400), (500, 600), (700, 800), (900, 1000)]

    for x, y in erreur_coords:
        couleur = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        cv2.circle(img_avec_erreurs, (x, y), 10, couleur, -1)

    return img_avec_erreurs, erreur_coords

def afficher_images(image_originale, image_avec_erreurs, erreur_coords):
    fenetre = tk.Tk()
    fenetre.title("Jeu des erreurs")

    fenetre_width = image_originale.shape[1] * 2
    fenetre_height = max(image_originale.shape[0], image_avec_erreurs.shape[0])

    canvas = Canvas(fenetre, width=fenetre_width, height=fenetre_height)
    canvas.pack()

    img_orig = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(image_originale, cv2.COLOR_BGR2RGB)).resize((image_originale.shape[1], fenetre_height)))
    img_erreurs = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(image_avec_erreurs, cv2.COLOR_BGR2RGB)).resize((image_avec_erreurs.shape[1], fenetre_height)))

    canvas.create_image(0, 0, anchor=tk.NW, image=img_orig)
    canvas.create_image(image_originale.shape[1], 0, anchor=tk.NW, image=img_erreurs)

    def clic_erreur(event, erreur_coords):
        nonlocal erreurs_trouvees

        # Convertir les coordonnées de la fenêtre tkinter en coordonnées d'image
        x_image = event.x - image_originale.shape[1]
        y_image = event.y
        reponses.append((x_image, y_image))

        # Vérifier si le clic est à proximité d'une erreur
        for erreur_x, erreur_y in erreur_coords:
            if abs(x_image - erreur_x) < 15 and abs(y_image - erreur_y) < 15:
                erreurs_trouvees += 1
                canvas.create_oval(event.x - 5, event.y - 5, event.x + 5, event.y + 5, outline="red", width=2)
                break

        if erreurs_trouvees == 5:
            messagebox.showinfo("Bravo !", "Vous avez trouvé toutes les erreurs.")
            fenetre.quit()

    canvas.bind("<Button-1>", partial(clic_erreur, erreur_coords=erreur_coords))

    reponses = []
    erreurs_trouvees = 0

    fenetre.mainloop()

def jouer_jeu():
    image_originale = cv2.imread("image_originale.jpg")
    if image_originale is None:
        print("L'image n'a pas pu être chargée.")
        return

    image_avec_erreurs, erreur_coords = generer_erreurs(image_originale)
    afficher_images(image_originale, image_avec_erreurs, erreur_coords)

if __name__ == "__main__":
    jouer_jeu()

Merci d'avance,

Cordialement.

0
Utilisateur anonyme
29 déc. 2023 à 15:07

Bonjour,
j'ai mis pour tester Random et masquer les zones d'erreurs mais impossible a masquer
j'ai ajouter le système de clic il fonctionne maintenant pour un clic une erreur.

Cdt

0
ce qui donne le code suivant : import cv2
import random
import tkinter as tk
from tkinter import Canvas, Button, messagebox
from PIL import Image, ImageTk
from functools import partial

def generer_erreurs(image):
    img_avec_erreurs = image.copy()

    # Coordonnées manuelles des erreurs (en pixels)
    erreur_coords = [(100, 200), (300, 400), (500, 600), (700, 800), (900, 1000)]

    for x, y in erreur_coords:
        couleur = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        cv2.circle(img_avec_erreurs, (x, y), 10, couleur, -1)

    return img_avec_erreurs, erreur_coords

def afficher_images(image_originale, image_avec_erreurs, erreur_coords):
    fenetre = tk.Tk()
    fenetre.title("Jeu des erreurs")

    fenetre_width = image_originale.shape[1] * 2
    fenetre_height = min(image_originale.shape[0], image_avec_erreurs.shape[0])

    canvas = Canvas(fenetre, width=fenetre_width, height=fenetre_height)
    canvas.pack()

    img_orig = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(image_originale, cv2.COLOR_BGR2RGB)).resize((image_originale.shape[1], fenetre_height)))
    img_erreurs = ImageTk.PhotoImage(image=Image.fromarray(cv2.cvtColor(image_avec_erreurs, cv2.COLOR_BGR2RGB)).resize((image_avec_erreurs.shape[1], fenetre_height)))

    canvas.create_image(0, 0, anchor=tk.NW, image=img_orig)
    canvas.create_image(image_originale.shape[1], 0, anchor=tk.NW, image=img_erreurs)

    def clic_erreur(event, erreur_coords, erreurs_visibles):
        nonlocal erreurs_trouvees, jeu_termine

        if jeu_termine:
            return

        # Convertir les coordonnées de la fenêtre tkinter en coordonnées d'image
        x_image = event.x - image_originale.shape[1]
        y_image = event.y
        reponses.append((x_image, y_image))

        # Vérifier si le clic est à proximité d'une erreur
        for i, (erreur_x, erreur_y) in enumerate(erreur_coords):
            if abs(x_image - erreur_x) < 15 and abs(y_image - erreur_y) < 15 and not erreurs_visibles[i]:
                erreurs_visibles[i] = True
                erreurs_trouvees += 1
                canvas.create_oval(event.x - 5, event.y - 5, event.x + 5, event.y + 5, outline="red", width=2)
                break

        if erreurs_trouvees == 5:
            messagebox.showinfo("Bravo !", "Vous avez trouvé toutes les erreurs.")
            jeu_termine = True
            fenetre.quit()

    erreurs_visibles = [False] * 5
    canvas.bind("<Button-1>", partial(clic_erreur, erreur_coords=erreur_coords, erreurs_visibles=erreurs_visibles))

    reponses = []
    erreurs_trouvees = 0
    jeu_termine = False

    fenetre.mainloop()

def jouer_jeu():
    image_originale = cv2.imread("image_originale.jpg")
    if image_originale is None:
        print("L'image n'a pas pu être chargée.")
        return

    image_avec_erreurs, erreur_coords = generer_erreurs(image_originale)
    afficher_images(image_originale, image_avec_erreurs, erreur_coords)

if __name__ == "__main__":
    jouer_jeu()
0
Utilisateur anonyme
29 déc. 2023 à 15:25

En fait c'est le système de choix des coordonnées pour les erreurs avant le lancement du jeu dont j'aurais besoin.

Cdt

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
29 déc. 2023 à 16:23

Je me permets d'ajouter ce message car j'ai résolu mon problème en changeant mon début de code en un autre plus complet, merci pour vos réponses.

0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
30 déc. 2023 à 07:58

Bonjour 

je marque donc ton sujet résolu.

Bonnes fêtes 


0
Rejoignez-nous