Aide python tkinter à placer plusieurs points dans des cases

Fermé
TARTAIRO - Modifié le 20 janv. 2023 à 13:44
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 20 janv. 2023 à 13:47

Bonjour,

Je cherche a créer un jeu. J'ai besoin d'aide pour placer les points. Je dois pouvoir poser 2 points dans les colonnes 3 sur les cases du coté et 4 au milieux.

import tkinter as tk

wind = tk.Tk()
canvas = tk.Canvas(wind, width=500, height=500, highlightthickness = 0,bg = "black")
canvas.pack()

class Interfaces:
    def __init__(self):
        """
        Initialise les variables de la classe
        """
        self.config_window()
    def config_window(self):
        """
        Configuration de la fenêtre graphique
        """
        # Nom de la fenêtre
        wind.title("Games")
        # Taille de la fenêtre
        wind.geometry("700x400")
        # Couleur de la fenêtre
        wind.config(background = "black")

interface = Interfaces()

class Player:
    def __init__(self, color):
        """
        Initialise les variables de la classe
        """
        self.color = color
    def change_color(self, square):
        canvas.itemconfig(square, fill=self.color)

class Case:
    def __init__(self, rows=5, columns=10, players=2):
        """
        Initialise les variables de la classe
        """
        self.rows = rows
        self.columns = columns
        self.players = players
        self.squares = []
        self.current_player = 0
        self.colors = ["red", "blue", "green", "yellow", "orange", "purple", "pink", "white"]
        self.players_list = [Player(self.colors[i]) for i in range(self.players)]
        self.square_colors = {}
        self.carre()
    def carre(self, color = "red"):
        """
        Création de la grille à base de case
        """
        for i in range(self.columns):
                for j in range(self.rows):
                    x1 = i * 50
                    y1 = j * 50
                    x2 = x1 + 45 - (1 if i == self.columns - 1 else 0)
                    y2 = y1 + 45 - (1 if j == self.rows - 1 else 0)
                    square = canvas.create_rectangle(x1, y1, x2, y2, fill= "black", outline=color)
                    self.squares.append(square)
                    self.square_colors[square] = "black"
                    canvas.tag_bind(square, "<1>", self.color_square)
    def color_square(self, event):
        """
        Fonction appelée lorsque un carré est cliqué
        """  
        square = event.widget.find_closest(event.x, event.y)[0]
        if self.square_colors[square] != "black":
            return
        x, y = event.x, event.y
        current_player = self.current_player
        current_color = self.players_list[current_player].color
        #calculer les coordonnées du coin supérieur gauche de la case
        x1, y1, x2, y2 = canvas.coords(square)
        x = x1 + 5
        y = y1 + 5
        point = canvas.create_oval(x, y, x + 10, y + 10, fill=current_color)
        self.square_colors[square] = current_color
        self.current_player = (self.current_player + 1) % self.players
        try:
            self.player_label.destroy()
        except:
            pass
        self.player_label = tk.Label(wind, text=f"Joueur {current_player + 1}  {current_color}", font=("Helvetica",12), fg=current_color)
        self.player_label.pack()

class Play:
    def __init__(self, wind):
        """
        Initialise les variables de la classe
        """
        self.wind = wind
        self.create_widgets()
        self.start_button = tk.Button(self.wind, text="Commencez", command=self.start_game)
        self.start_button.pack()
    def create_widgets(self):
        """
        I
        """
        row_label = tk.Label(self.wind, text="Lignes:")
        row_label.pack()
        self.row_entry = tk.Entry(self.wind)
        self.row_entry.pack()
        column_label = tk.Label(self.wind, text="Colonnes:")
        column_label.pack()
        self.column_entry = tk.Entry(self.wind)
        self.column_entry.pack()
        player_label = tk.Label(self.wind, text="Joueurs:",)
        player_label.pack()
        self.player_entry = tk.Entry(self.wind)
        self.player_entry.pack()
    def start_game(self):
        self.rows = int(self.row_entry.get())
        self.columns = int(self.column_entry.get())
        self.players = int(self.player_entry.get())
        self.grid = Case(self.rows, self.columns, self.players)

play = Play(wind)
wind.mainloop()

Merci

Modération : Merci de mettre le code en forme comme expliqué ici

1 réponse

mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
20 janv. 2023 à 13:47

Bonjour,

Peux-tu clarifier ce que tu veux faire avec un image ? Chez moi quand je lance ton programme, j'ai une fenêtre noire. Idéalement, partage un extrait de code minimal qui met ton problème en évidence.

Bonne chance

0