1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
| import tkinter as tk
import random
Sg = 0
Sc = 0
# Taille du plateau
TAILLE = 11
TAILLE_CASE = 50
MARGE = 50
# Dictionnaires pour stocker les rectangles et les textes
cases = {}
textes = {}
# Création de la fenêtre
fenetre = tk.Tk()
fenetre.title("Escat Game")
# Création du canevas
largeur = MARGE + TAILLE * TAILLE_CASE
hauteur = MARGE + TAILLE * TAILLE_CASE + 100 # espace en dessous pour les scores
canvas = tk.Canvas(fenetre, width=largeur, height=hauteur)
canvas.pack()
# Création du cadre pour les infos joueurs
cadre_info = tk.Frame(fenetre)
cadre_info.pack(pady=10)
# Création score
label_score_chat = tk.Label(cadre_info, text=f"Score Chats : {Sc}", font=("Arial", 12))
label_score_chat.pack()
label_score_gardiens = tk.Label(cadre_info, text=f"Score Gardiens : {Sg}", font=("Arial", 12))
label_score_gardiens.pack()
# Fonction pour vérifier si une case est vide
def vide(ligne, colonne):
ligne_idx = ligne - 1
colonne_idx = ord(colonne.upper()) - ord('A')
return textes[(ligne_idx, colonne_idx)] is None
# Nouvelle version de pos_robot
def pos_robot(nombre):
essais_max = 500 # Pour éviter une boucle infinie
essais = 0
positions_placees = 0
while positions_placees < nombre and essais < essais_max:
ligne = random.randint(1, 11)
colonne = chr(random.randint(ord('A'), ord('K')))
if vide(ligne, colonne): # Vérifie si la case est vide
position(ligne, colonne, 'R') # Place le robot
positions_placees += 1 # Incrémente le compteur
essais += 1 # Évite une boucle infinie
# Lettres colonnes (A à K)
for col in range(TAILLE):
lettre = chr(ord('A') + col)
x = MARGE + col * TAILLE_CASE + TAILLE_CASE // 2
canvas.create_text(x, MARGE // 2, text=lettre, font=("Arial", 16, "bold"))
# Chiffres lignes (1 à 11)
for lig in range(TAILLE):
y = MARGE + lig * TAILLE_CASE + TAILLE_CASE // 2
canvas.create_text(MARGE // 2, y, text=str(lig + 1), font=("Arial", 16, "bold"))
# Création des cases vides
for i in range(TAILLE):
for j in range(TAILLE):
x1 = MARGE + j * TAILLE_CASE
y1 = MARGE + i * TAILLE_CASE
x2 = x1 + TAILLE_CASE
y2 = y1 + TAILLE_CASE
rect = canvas.create_rectangle(x1, y1, x2, y2, fill="white", outline="black")
cases[(i, j)] = rect
textes[(i, j)] = None # Pas encore de texte dans la case
# Fonction pour modifier une case (ligne: 1-11, colonne: 'A'-'K')
def position(ligne, colonne, nouveau_texte):
ligne_idx = ligne - 1
colonne_idx = ord(colonne.upper()) - ord('A')
if 0 <= ligne_idx < TAILLE and 0 <= colonne_idx < TAILLE:
x = MARGE + colonne_idx * TAILLE_CASE + TAILLE_CASE // 2
y = MARGE + ligne_idx * TAILLE_CASE + TAILLE_CASE // 2
# Supprimer ancien texte si présent
if textes[(ligne_idx, colonne_idx)] is not None:
canvas.delete(textes[(ligne_idx, colonne_idx)])
# Ajouter le nouveau texte
textes[(ligne_idx, colonne_idx)] = canvas.create_text(
x, y, text=nouveau_texte, font=("Arial", 20, "bold")
)
# Demande des pseudos dans la console
joueur1 = input("Quel est le pseudo du joueur 1 ? ")
joueur2 = input("Quel est le pseudo du joueur 2 ? ")
print(joueur1)
print(joueur2)
# Affichage dans l'interface
label_joueur1 = tk.Label(cadre_info, text=f"Équipe Chats : {joueur1} - Score : 0", font=("Arial", 12))
label_joueur1.pack()
label_joueur2 = tk.Label(cadre_info, text=f"Équipe Gardiens : {joueur2} - Score : 0", font=("Arial", 12))
label_joueur2.pack()
# Positions Chats
position(11, 'D', 'C1')
position(11, 'E', 'C2')
position(11, 'F', 'C3')
position(11, 'G', 'C4')
position(11, 'H', 'C5')
position(10, 'D', 'C6')
position(10, 'E', 'C7')
position(10, 'F', 'C8')
position(10, 'G', 'C9')
position(10, 'H', 'C10')
position(9, 'E', 'C11')
position(9, 'F', 'C12')
position(9, 'G', 'C13')
position(8, 'F', 'Ç')
# Position Gardiens
position(2, 'C', 'W')
position(2, 'I', 'W')
# Position Sorties
position(1, 'F', 'S')
position(5, 'A', 'S')
position(5, 'K', 'S')
# Position Bassin
position(3, 'E', 'O')
position(3, 'F', 'O')
position(3, 'G', 'O')
position(4, 'E', 'O')
position(4, 'F', 'O')
position(4, 'G', 'O')
# Position Robot
pos_robot(9)
# Mise à jour du score
def actu_scores():
label_score_chat.config(text=f"Score Chats : {Sc}")
label_score_gardiens.config(text=f"Score Gardiens : {Sg}")
fenetre.mainloop() |
Partager