-
Notifications
You must be signed in to change notification settings - Fork 0
/
pre_game.py
133 lines (111 loc) · 4.39 KB
/
pre_game.py
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
import sqlite3
from tkinter import *
from tkinter import ttk
from game import *
def error_gamer(case: int):
"""
Arguments :
case: Numéro indiquant le type d'erreur à afficher.
Retourne : Rien.
Description : Affiche un message d'erreur spécifique en fonction du cas indiqué et termine le programme. Utilisé pour gérer les erreurs dans le choix des joueurs pour une partie de jeu.
"""
from tkinter import messagebox
if case == 1:
messagebox.showerror(
"Les joueurs doivent être rempli pour commencer la partie !"
)
elif case == 2:
messagebox.showerror(
"Les joueurs doivent être différents pour commencer la partie !"
)
exit()
def config_game():
"""
Arguments : Aucun.
Retourne : Rien.
Description : Crée une fenêtre de configuration pour une nouvelle partie de jeu, permettant de sélectionner les joueurs parmi une liste obtenue de la base de données. Affiche les options pour commencer la partie ou l'annuler. Utilise Tkinter pour l'interface graphique.
"""
def select_gamers():
"""
Arguments :
Aucun, utilisations des variables de config_game().
Retourne : Rien.
Description : Fonction interne de `config_game` permettant de sélectionner les joueurs pour une nouvelle partie. Vérifie que les noms des joueurs sont différents et non vides, affiche des messages d'erreur si nécessaire, et configure le bouton de démarrage du jeu. Utilise des variables non locales pour accéder aux informations de l'interface graphique Tkinter.
"""
nonlocal name_j1_list, name_j2_list, player_names, button_frame, player_ids, pre_game, new_game, annul_button
value_combo_j1 = name_j1_list.get()
j1 = value_combo_j1
value_combo_j2 = name_j2_list.get()
j2 = value_combo_j2
assert j1 != "" and j2 != "", error_gamer(1)
if j1 == j2:
error_gamer(2)
else:
new_game.destroy()
annul_button.destroy()
start = ttk.Button(
button_frame,
text="Commencer",
command=lambda: [pre_game.destroy(), wait_game(j1, j2, 1)],
)
start.grid(row=0, column=0, padx=10, pady=10)
pre_game = Tk()
pre_game.title("Configuration du jeu | NSI")
screen_height = pre_game.winfo_screenheight()
pre_game.geometry("970x710")
pre_game.resizable(False, False)
background_label = Label(pre_game, bg="#88cffa")
background_label.place(x=0, y=0, relwidth=1, relheight=1)
title = Label(
pre_game,
text="Nouvelle partie",
fg="black",
font=("Parisine", 45, "normal"),
bg="#88cffa",
)
title.pack(pady=(50, 0))
disclaimer = Label(
pre_game,
text="Si votre nom/pseudo n'apparaît pas dans les listes, \n accédez au leaderboard pour créer votre joueur.",
fg="black",
font=("Parisine", 20, "normal"),
bg="#88cffa",
padx=0,
pady=0,
)
disclaimer.pack(pady=(0, 50))
selectIn = sqlite3.connect("general.db")
cursor = selectIn.cursor()
cursor.execute("SELECT nom,id FROM joueurs")
player_names = [row[0] for row in cursor.fetchall()]
player_ids = [row[1] for row in cursor.fetchall()]
selectIn.close()
name_j1 = Label(pre_game, text="Premier joueur :", bg="#88cffa", padx=10, pady=10)
name_j1.pack()
name_j1_list = ttk.Combobox(pre_game, values=player_names)
name_j1_list.pack()
name_j2 = Label(pre_game, text="Deuxième joueur :", bg="#88cffa", padx=10, pady=10)
name_j2.pack()
name_j2_list = ttk.Combobox(pre_game, values=player_names, background="#88cffa")
name_j2_list.pack()
button_frame = Frame(pre_game, bg="#88cffa")
button_frame.pack()
new_game = ttk.Button(
button_frame,
text="Continuer",
command=lambda: select_gamers(),
)
new_game.grid(row=0, column=0, padx=10, pady=10)
annul_button = ttk.Button(
button_frame,
text="Annuler",
command=lambda: [exit()],
)
annul_button.grid(row=0, column=1, padx=10, pady=10)
pre_game.update_idletasks()
# screen_width = pre_game.winfo_screenwidth()
# screen_height = pre_game.winfo_screenheight()
# x = screen_width // 5
# y = screen_height // 5
# pre_game.geometry("+{}+{}".format(x, y))
pre_game.mainloop()