1
0

main.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
  1. import tkinter as tk
  2. from random import shuffle, randint, choice
  3. from PIL import Image, ImageTk
  4. from vlc import MediaPlayer
  5. import webbrowser as wb
  6. # Window
  7. root = tk.Tk()
  8. root.title("Elite Four")
  9. root.resizable(False, False)
  10. root.geometry("1280x720")
  11. # Canvas
  12. cv = tk.Canvas(root, width=1280, height=720)
  13. cv.place(x=0, y=0)
  14. # Game variables
  15. game_number = 4
  16. games_list = ["N", "C", "E", "W"]
  17. games_list = []
  18. # Creation of the start menu
  19. start_button: tk.Button
  20. def menu():
  21. global start_button
  22. cv.delete("all")
  23. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#7993a3", outline="#7993a3")
  24. title = cv.create_text(640, 360, text="Elite Four", font=("Helvetica", 48, "bold"), fill="aliceblue")
  25. start_button = tk.Button(bg="#7993a3", fg="aliceblue", activebackground="aliceblue", activeforeground="#7993a3", text="START", font=("Helvetica", 24, "bold"), cursor="hand2", borderwidth=0, highlightthickness=0, command=start)
  26. start_button.place(x=576, y=600)
  27. def start():
  28. # To finish
  29. global game_number, games_list
  30. shuffle(games_list)
  31. game_number = 0
  32. start_button.destroy()
  33. next_game()
  34. def next_game():
  35. cv.delete("all")
  36. if game_number < len(games_list):
  37. if games_list[game_number] == "N":
  38. miss_n_init()
  39. elif games_list[game_number] == "C":
  40. mister_c_init()
  41. elif games_list[game_number] == "E":
  42. mister_e_init()
  43. elif games_list[game_number] == "W":
  44. miss_w_init()
  45. else:
  46. # The END
  47. cv.create_rectangle(0, 0, 1280, 720, fill="#b7ddeb", outline="#b7ddeb")
  48. cv.create_text(640, 100, text="Well played!", font=("Helvetica", 64, "bold"), fill="#194a5c")
  49. cv.create_text(640, 310, text="Thank you for playing <3", font=("Helvetica", 48, "bold"), fill="#194a5c")
  50. cv.create_text(640, 520, text="Goodbyyyyye", font=("Helvetica", 64, "bold"), fill="#194a5c")
  51. github_link = cv.create_text(640, 660, text="PS : You can click here to put a star ⭐️ on GitHub :)", font=("Helvetica", 16, "bold"), fill="#194a5c")
  52. cv.tag_bind(github_link, "<Button-1>", lambda _ : wb.open("https://github.com/Hvrnbi/elite-four"))
  53. def reset():
  54. # To finish
  55. global game_number, miss_n_state, flour_qtt, flour_qtt_inc, sugar_qtt, sugar_qtt_inc, eggs_qtt, eggs_qtt_inc, milk_qtt, milk_qtt_inc, ingredients_height, mister_c_state,\
  56. mister_c_dialog, mister_c_result, skyline_image, ptimage, mister_c_input, mister_c_score, mister_e_state, mister_e_time, mister_e_time_count, mister_e_timer, mask_images,\
  57. masks_list, happy_mask, mister_e_dialog, miss_w_state, miss_w_dialog, notes_id, f_list, g_list, h_list, j_list, k_list, l_list, miss_w_score, miss_w_score_text
  58. game_number = 4
  59. # Miss N
  60. miss_n_state = 0
  61. flour_qtt = 0
  62. flour_qtt_inc = True
  63. sugar_qtt = 0
  64. sugar_qtt_inc = True
  65. eggs_qtt = 0
  66. eggs_qtt_inc = True
  67. milk_qtt = 0
  68. milk_qtt_inc = True
  69. ingredients_height = 359
  70. # Mister C
  71. mister_c_state = 0
  72. mister_c_dialog = 0
  73. skyline_image = 0
  74. ptimage = None
  75. mister_c_input = tk.Entry(root)
  76. mister_c_input.bind("<Return>", enter)
  77. mister_c_score = 0
  78. # Mister E
  79. mister_e_state = 0
  80. mister_e_time = 0
  81. mister_e_time_count = 0
  82. mister_e_timer = 0
  83. mask_images = []
  84. masks_list = []
  85. happy_mask = {}
  86. mister_e_dialog = 0
  87. # Miss W
  88. miss_w_state = 0
  89. miss_w_dialog = 0
  90. notes_id = []
  91. f_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 202]
  92. g_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 384]
  93. h_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 566]
  94. j_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 748]
  95. k_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 930]
  96. l_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 1112]
  97. miss_w_score = 0
  98. miss_w_score_text = 0
  99. menu()
  100. # General GUI functions
  101. def draw_dialog_area():
  102. dialog_rect = cv.create_rectangle(8, 500, 1272, 712, fill="#ffffff", outline="#ffffff")
  103. dialog_name_rect = cv.create_rectangle(580, 484, 700, 500, fill="#ffffff", outline="#ffffff")
  104. # Miss N game
  105. miss_n_state = 0
  106. flour_qtt = 0
  107. flour_qtt_inc = True
  108. sugar_qtt = 0
  109. sugar_qtt_inc = True
  110. eggs_qtt = 0
  111. eggs_qtt_inc = True
  112. milk_qtt = 0
  113. milk_qtt_inc = True
  114. miss_n_dialog: int
  115. flour_qtt_text: int
  116. sugar_qtt_text: int
  117. eggs_qtt_text: int
  118. milk_qtt_text: int
  119. ingredients_height = 359
  120. def miss_n_init():
  121. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#6abd9c", outline="#6abd9c")
  122. draw_dialog_area()
  123. dialog_name = cv.create_text(640, 500, text="Miss N", font=("Helvetica", 16, "bold"), fill="#163226")
  124. container_rect = cv.create_rectangle(1140, 80, 1240, 360, fill="#c9c9c9", outline="#c9c9c9")
  125. flour_rect = cv.create_rectangle(40, 100, 180, 280, fill="#fff4de", outline="#fff4de")
  126. flour_text = cv.create_text(110, 88, text="FLOUR", font=("Helvetica", 16), fill="#163226")
  127. sugar_rect = cv.create_rectangle(220, 160, 360, 280, fill="#ffb34f", outline="#ffb34f")
  128. sugar_top = cv.create_polygon(220, 160, 360, 160, 290, 100, fill="#ffb34f", outline="#ffb34f")
  129. sugar_text = cv.create_text(290, 88, text="SUGAR", font=("Helvetica", 16), fill="#163226")
  130. eggs_oval = cv.create_oval(400, 100, 540, 280, fill="#e6c493", outline="#e6c493")
  131. eggs_text = cv.create_text(470, 88, text="EGGS", font=("Helvetica", 16), fill="#163226")
  132. milk_rect = cv.create_rectangle(580, 160, 720, 280, fill="#ffffff", outline="#ffffff")
  133. milk_top = cv.create_rectangle(580, 100, 720, 160, fill="#0000cc", outline="#0000cc")
  134. milk_text = cv.create_text(650, 88, text="MILK", font=("Helvetica", 16), fill="#163226")
  135. miss_n_game()
  136. def miss_n_game():
  137. global miss_n_dialog, flour_qtt, flour_qtt_inc, flour_qtt_text, sugar_qtt, sugar_qtt_inc, sugar_qtt_text, eggs_qtt, eggs_qtt_inc, eggs_qtt_text, milk_qtt, milk_qtt_inc, milk_qtt_text
  138. if miss_n_state == 0:
  139. miss_n_dialog = cv.create_text(640, 606, text="Hiiiiii! I'm Miss N and in my game, you'll have to make a crêpe!\n\
  140. The rules are easy, just press SPACE when you think that a quantity is good.\n\
  141. If you follow the recipe, you win. If you don't, you lose.\n\
  142. Here is the recipe:\n\
  143. - 170g of flour\n\
  144. - 40g of sugar\n\
  145. - 3 eggs\n\
  146. - 600mL of milk\n\n\
  147. Press SPACE to start, good luck <3", font=("Helvetica", 12), fill="#163226")
  148. flour_qtt_text = cv.create_text(110, 308, text="", font=("Helvetica", 16), fill="#163226")
  149. sugar_qtt_text = cv.create_text(290, 308, text="", font=("Helvetica", 16), fill="#163226")
  150. eggs_qtt_text = cv.create_text(470, 308, text="", font=("Helvetica", 16), fill="#163226")
  151. milk_qtt_text = cv.create_text(650, 308, text="", font=("Helvetica", 16), fill="#163226")
  152. elif miss_n_state == 1:
  153. if flour_qtt_inc:
  154. flour_qtt += 1
  155. if flour_qtt == 400:
  156. flour_qtt_inc = False
  157. else:
  158. flour_qtt -= 1
  159. if flour_qtt == 0:
  160. flour_qtt_inc = True
  161. cv.itemconfig(flour_qtt_text, text=str(flour_qtt))
  162. root.after(8, miss_n_game)
  163. elif miss_n_state == 2:
  164. if sugar_qtt_inc:
  165. sugar_qtt += 1
  166. if sugar_qtt == 100:
  167. sugar_qtt_inc = False
  168. else:
  169. sugar_qtt -= 1
  170. if sugar_qtt == 0:
  171. sugar_qtt_inc = True
  172. cv.itemconfig(sugar_qtt_text, text=str(sugar_qtt))
  173. root.after(10, miss_n_game)
  174. elif miss_n_state == 3:
  175. if eggs_qtt_inc:
  176. eggs_qtt += 1
  177. if eggs_qtt == 5:
  178. eggs_qtt_inc = False
  179. else:
  180. eggs_qtt -= 1
  181. if eggs_qtt == 0:
  182. eggs_qtt_inc = True
  183. cv.itemconfig(eggs_qtt_text, text=str(eggs_qtt))
  184. root.after(140, miss_n_game)
  185. elif miss_n_state == 4:
  186. if milk_qtt_inc:
  187. milk_qtt += 1
  188. if milk_qtt == 1000:
  189. milk_qtt_inc = False
  190. else:
  191. milk_qtt -= 1
  192. if milk_qtt == 0:
  193. milk_qtt_inc = True
  194. cv.itemconfig(milk_qtt_text, text=str(milk_qtt))
  195. root.after(4, miss_n_game)
  196. def miss_n_end():
  197. global miss_n_state
  198. score = abs(flour_qtt - 170) * 3 + abs(sugar_qtt - 40) * 15 + abs(eggs_qtt - 3) * 200 + abs(milk_qtt - 600)
  199. if score < 300:
  200. cv.itemconfig(miss_n_dialog, text="Those crepes look delicious, great job!\nPress SPACE to continue <3")
  201. miss_n_state = 6
  202. else:
  203. cv.itemconfig(miss_n_dialog, text="It seems absolutely uneatable, I hope you'll do better next time.")
  204. root.after(5000, reset)
  205. # Mister C game
  206. mister_c_state = 0
  207. images_list = ["images/bucharest.png", "images/dallas.png", "images/dublin.png", "images/kualalumpur.png", "images/lagos.png", "images/lyon.png", "images/warsaw.png"]
  208. mister_c_answers = {"images/bucharest.png": ["bucharest", "Bucharest", "BUCHAREST"], "images/dallas.png": ["dallas", "Dallas", "DALLAS"], "images/dublin.png": ["dublin", "Dublin", "DUBLIN"], "images/kualalumpur.png": ["kuala lumpur", "Kuala lumpur", "Kuala Lumpur", "KUALA LUMPUR"], "images/lagos.png": ["lagos", "Lagos", "LAGOS"], "images/lyon.png": ["lyon", "Lyon", "LYON"], "images/warsaw.png": ["warsaw", "Warsaw", "WARSAW"]}
  209. mister_c_dialog: int
  210. mister_c_result: int
  211. skyline_image: int
  212. ptimage = None
  213. mister_c_input = tk.Entry(root)
  214. mister_c_score = 0
  215. def mister_c_init():
  216. shuffle(images_list)
  217. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#7cf27c", outline="#7cf27c")
  218. draw_dialog_area()
  219. dialog_name = cv.create_text(640, 500, text="Mister C", font=("Helvetica", 16, "bold"), fill="#0b6b0b")
  220. mister_c_game()
  221. def mister_c_game():
  222. global mister_c_dialog, skyline_image, ptimage
  223. if mister_c_state == 0:
  224. mister_c_dialog = cv.create_text(640, 606, text="Halloooo, my name is Mister C !\n\
  225. In my game, you'll have to recognize a city from his skyline, and the colors on the flag of its country.\n\
  226. You will see 3 images, and you'll have to make 2 correct guesses if you want to continue.\n\
  227. You only have one chance per image, good luck !\n\
  228. Press SPACE to start", font=("Helvetica", 12), fill="#0b6b0b")
  229. if mister_c_state == 1:
  230. cv.itemconfig(mister_c_dialog, text="Which city do you think it is ?")
  231. ptimage = ImageTk.PhotoImage(file=images_list[0])
  232. skyline_image = cv.create_image(640, 242, image=ptimage, anchor=tk.CENTER)
  233. mister_c_input.place(x=640, y=632, anchor=tk.CENTER)
  234. elif mister_c_state == 2:
  235. cv.itemconfig(mister_c_dialog, text="Which city do you think it is ?")
  236. ptimage = ImageTk.PhotoImage(file=images_list[1])
  237. cv.itemconfigure(skyline_image, image=ptimage)
  238. elif mister_c_state == 3:
  239. cv.itemconfig(mister_c_dialog, text="Which city do you think it is ?")
  240. ptimage = ImageTk.PhotoImage(file=images_list[2])
  241. cv.itemconfigure(skyline_image, image=ptimage)
  242. elif mister_c_state == 4:
  243. cv.itemconfig(mister_c_dialog, text="Well played!\nPress SPACE to continue.")
  244. elif mister_c_state == 5:
  245. cv.itemconfig(mister_c_dialog, text="You have to work a little more, see you later !")
  246. root.after(5000, reset)
  247. def mister_c_verif():
  248. global mister_c_score, mister_c_result
  249. if mister_c_input.get() in mister_c_answers[images_list[mister_c_state - 1]]:
  250. mister_c_score += 1
  251. if mister_c_state == 1:
  252. mister_c_result = cv.create_text(640, 680, text="Correct!", font=("Helvetica", 12), fill="#0b6b0b")
  253. else:
  254. cv.itemconfig(mister_c_result, text="Correct!")
  255. return True
  256. else:
  257. if mister_c_state == 1:
  258. mister_c_result = cv.create_text(640, 680, text="Wrong!", font=("Helvetica", 12), fill="#0b6b0b")
  259. else:
  260. cv.itemconfig(mister_c_result, text="Wrong!")
  261. return False
  262. # Mister E game
  263. mister_e_state = 0
  264. mister_e_time = 0
  265. mister_e_time_count = 0
  266. mister_e_timer: int
  267. mask_images = []
  268. masks_list = []
  269. happy_mask = {}
  270. mister_e_dialog: int
  271. def mister_e_init():
  272. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#fda3ff", outline="#fda3ff")
  273. draw_dialog_area()
  274. dialog_name = cv.create_text(640, 500, text="Mister E", font=("Helvetica", 16, "bold"), fill="#730075")
  275. mister_e_game()
  276. def mister_e_game():
  277. global mister_e_dialog, mister_e_state, mister_e_time, mister_e_time_count, mister_e_timer
  278. if mister_e_state == 0:
  279. mister_e_dialog = cv.create_text(640, 606, text="Hello! I'm Mister E, nice to meet you!\n\
  280. In my game, you'll see some comedy masks, and you'll just have to find the happy one.\n\
  281. Good luck!\n\
  282. Press SPACE to start.", font=("Helvetica", 12), fill="#730075")
  283. elif mister_e_state == 1:
  284. spawn_masks()
  285. mister_e_state = 2
  286. mister_e_time = 15
  287. mister_e_timer = cv.create_text(1252, 700, text="15", font=("Helvetica", 16, "bold"), fill="#730075")
  288. mister_e_game()
  289. elif mister_e_state == 2:
  290. move_masks()
  291. mister_e_countdown()
  292. root.after(100, mister_e_game)
  293. elif mister_e_state == 3:
  294. mister_e_clear()
  295. cv.itemconfig(mister_e_dialog, text="Well done! But it was the easy level,\nPress SPACE to continue.")
  296. elif mister_e_state == 4:
  297. spawn_masks()
  298. mister_e_time = 20
  299. cv.itemconfig(mister_e_timer, text="20")
  300. mister_e_time_count = 0
  301. mister_e_state = 5
  302. mister_e_game()
  303. elif mister_e_state == 5:
  304. move_masks()
  305. mister_e_countdown()
  306. root.after(100, mister_e_game)
  307. elif mister_e_state == 6:
  308. mister_e_clear()
  309. cv.itemconfig(mister_e_dialog, text="Good job! You're ready to the next step,\nPress SPACE to continue.")
  310. elif mister_e_state == 7:
  311. spawn_masks()
  312. mister_e_time = 25
  313. cv.itemconfig(mister_e_timer, text="25")
  314. mister_e_time_count = 0
  315. mister_e_state = 8
  316. mister_e_game()
  317. elif mister_e_state == 8:
  318. move_masks()
  319. mister_e_countdown()
  320. root.after(100, mister_e_game)
  321. elif mister_e_state == 9:
  322. mister_e_clear()
  323. cv.itemconfig(mister_e_dialog, text="Well played! The next one is the last one, good luck!\nPress SPACE to continue.")
  324. elif mister_e_state == 10:
  325. spawn_masks()
  326. mister_e_time = 30
  327. cv.itemconfig(mister_e_timer, text="30")
  328. mister_e_time_count = 0
  329. mister_e_state = 11
  330. mister_e_game()
  331. elif mister_e_state == 11:
  332. move_masks()
  333. mister_e_countdown()
  334. root.after(100, mister_e_game)
  335. elif mister_e_state == 12:
  336. mister_e_clear()
  337. cv.itemconfig(mister_e_dialog, text="You did it!\nPress SPACE to continue.")
  338. elif mister_e_state == 13:
  339. mister_e_clear()
  340. cv.itemconfig(mister_e_dialog, text="Oh nooooo, the time is up!\nyou'll be luckier next time darling.")
  341. root.after(5000, reset)
  342. def spawn_masks():
  343. global masks_list, happy_mask, mask_images
  344. mask_images.append(ImageTk.PhotoImage(file="images/happy.png"))
  345. happy_mask = {"id": cv.create_image(randint(0, 1280), randint(0, 500), image=mask_images[0], anchor=tk.CENTER), "velx": mask_vel_gen(), "vely": mask_vel_gen()}
  346. cv.tag_bind(happy_mask["id"], "<Button-1>", button1)
  347. for i in range(40 * mister_e_state // 3 + 1):
  348. mask_images.append(ImageTk.PhotoImage(file=choice(["images/sad.png", "images/fastfood.png"])))
  349. masks_list.append({"id": cv.create_image(randint(0, 1280), randint(0, 500), image=mask_images[i + 1], anchor=tk.CENTER), "velx": mask_vel_gen(), "vely": mask_vel_gen()})
  350. def move_masks():
  351. global masks_list
  352. for mask in masks_list:
  353. cv.move(mask["id"], mask["velx"], mask["vely"])
  354. if cv.coords(mask["id"])[0] < 0 or 1280 < cv.coords(mask["id"])[0]:
  355. mask["velx"] = -mask["velx"]
  356. if cv.coords(mask["id"])[1] < 0 or 500 < cv.coords(mask["id"])[1]:
  357. mask["vely"] = -mask["vely"]
  358. cv.move(happy_mask["id"], happy_mask["velx"], happy_mask["vely"])
  359. if cv.coords(happy_mask["id"])[0] < 0 or 1280 < cv.coords(happy_mask["id"])[0]:
  360. happy_mask["velx"] = -happy_mask["velx"]
  361. if cv.coords(happy_mask["id"])[1] < 0 or 500 < cv.coords(happy_mask["id"])[1]:
  362. happy_mask["vely"] = -happy_mask["vely"]
  363. def mask_vel_gen():
  364. vel = randint(6, 12)
  365. sign = randint(0, 1)
  366. if sign == 1:
  367. vel = -vel
  368. return vel
  369. def mister_e_clear():
  370. global mask_images, masks_list, happy_mask
  371. for elt in masks_list:
  372. cv.delete(elt)
  373. mask_images = []
  374. masks_list = []
  375. happy_mask = {}
  376. def mister_e_countdown():
  377. global mister_e_time, mister_e_time_count, mister_e_timer, mister_e_state
  378. mister_e_time_count += 1
  379. if mister_e_time_count % 10 == 0:
  380. mister_e_time -= 1
  381. cv.itemconfig(mister_e_timer, text=str(mister_e_time))
  382. if mister_e_time == 0:
  383. mister_e_state = 13
  384. # Miss W game
  385. miss_w_state = 0
  386. miss_w_dialog: int
  387. notes_list = [[748, -68], [930, -118], [1112, -168], [566, -314], [384, -364], [202, -414], [748, -524], [566, -624], [384, -724], [930, -724], [384, -774], [930, -774], [384, -824], [930, -824], [566, -968], [748, -1084], [566, -1162], [384, -1212], [202, -1262], [748, -1424], [384, -1524], [1112, -1624], [202, -1758],\
  388. [748, -68 - 1808], [930, -118 - 1808], [1112, -168 - 1808], [566, -314 - 1808], [384, -364 - 1808], [202, -414 - 1808], [748, -524 - 1808], [566, -624 - 1808], [384, -724 - 1860], [930, -724 - 1860], [384, -774 - 1860], [930, -774 - 1860], [384, -824 - 1860], [930, -824 - 1860], [566, -968 - 1860], [748, -1084 - 1860], [566, -1162 - 1880], [384, -1212 - 1860], [202, -1262 - 1860], [748, -1424 - 1860], [384, -1524 - 1860], [1112, -1624 - 1860], [202, -1758 - 1860],\
  389. [748, -68 - 3680], [930, -118 - 3680], [1112, -168 - 3680], [566, -314 - 3680], [384, -364 - 3680], [202, -414 - 3680], [748, -524 - 3700], [566, -624 - 3700], [384, -724 - 3700], [930, -724 - 3700], [384, -774 - 3700], [930, -774 - 3700], [384, -824 - 3700], [930, -824 - 3700], [566, -968 - 3700], [748, -1084 - 3700], [566, -1162 - 3700], [384, -1212 - 3700], [202, -1262 - 3700], [748, -1424 - 3700], [384, -1524 - 3700], [1112, -1624 - 3700], [202, -1758 - 3700],\
  390. [748, -68 - 5500], [930, -118 - 5500], [1112, -168 - 5500], [566, -314 - 5500], [384, -364 - 5500], [202, -414 - 5500], [748, -524 - 5500], [566, -624 - 5500], [384, -724 - 5500], [930, -724 - 5500], [384, -774 - 5500], [930, -774 - 5500], [384, -824 - 5500], [930, -824 - 5500], [566, -968 - 5500], [748, -1084 - 5500], [566, -1162 - 5500], [384, -1212 - 5500], [202, -1262 - 5500], [748, -1424 - 5500], [384, -1524 - 5500], [1112, -1624 - 5500], [202, -1758 - 5500]]
  391. notes_id = []
  392. f_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 202]
  393. g_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 384]
  394. h_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 566]
  395. j_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 748]
  396. k_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 930]
  397. l_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 1112]
  398. miss_w_score = 0
  399. miss_w_score_text = 0
  400. def miss_w_init():
  401. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#c892e0", outline="#c892e0")
  402. draw_dialog_area()
  403. dialog_name = cv.create_text(640, 500, text="Miss W", font=("Helvetica", 16, "bold"), fill="#481a5b")
  404. miss_w_game()
  405. def miss_w_game():
  406. global miss_w_state, miss_w_dialog, miss_w_score_text
  407. if miss_w_state == 0:
  408. miss_w_dialog = cv.create_text(640, 606, text="Helloooo, I'm Miss W!\n\
  409. My game is a rythm game, good luck!\n\
  410. Press SPACE to start.", font=("Helvetica", 12), fill="#481a5b")
  411. elif miss_w_state == 1:
  412. miss_w_draw_ui()
  413. spawn_notes()
  414. MediaPlayer("audio/scottish.mp3").play()
  415. miss_w_state = 2
  416. miss_w_game()
  417. miss_w_score_text = cv.create_text(1252, 700, text="0", font=("Helvetica", 16, "bold"), fill="#481a5b")
  418. elif miss_w_state == 2:
  419. if cv.coords(notes_id[-1])[1] < 500:
  420. move_notes()
  421. root.after(20, miss_w_game)
  422. else:
  423. if miss_w_score < 840:
  424. miss_w_state = 3
  425. miss_w_game()
  426. else:
  427. miss_w_state = 4
  428. miss_w_game()
  429. elif miss_w_state == 3:
  430. cv.itemconfig(miss_w_dialog, text="You need more training, come back later !")
  431. root.after(5000, reset)
  432. elif miss_w_state == 4:
  433. cv.itemconfig(miss_w_dialog, text="Gg! That was a beautiful scottish! :D\nPress SPACE to continue")
  434. def miss_w_draw_ui():
  435. cv.create_rectangle(0, 438, 1280, 442, fill="#ffffff", outline="#ffffff")
  436. cv.create_text(182, 460, text="F", font=("Helvetica", 16, "bold"), fill="#ffffff")
  437. cv.create_text(364, 460, text="G", font=("Helvetica", 16, "bold"), fill="#ffffff")
  438. cv.create_text(546, 460, text="H", font=("Helvetica", 16, "bold"), fill="#ffffff")
  439. cv.create_text(728, 460, text="J", font=("Helvetica", 16, "bold"), fill="#ffffff")
  440. cv.create_text(910, 460, text="K", font=("Helvetica", 16, "bold"), fill="#ffffff")
  441. cv.create_text(1092, 460, text="L", font=("Helvetica", 16, "bold"), fill="#ffffff")
  442. def spawn_notes():
  443. global notes_id
  444. for note in notes_list:
  445. notes_id.append(cv.create_text(note[0], note[1], text="♩", font=("Helvetica", 64, "bold"), fill="#ffffff"))
  446. def move_notes():
  447. global notes_id
  448. for i in range(len(notes_id)):
  449. if cv.coords(notes_id[i])[1] < 500:
  450. cv.move(notes_id[i], 0, 4)
  451. if cv.coords(notes_id[i])[1] >= 500:
  452. cv.move(notes_id[i], 0, 500)
  453. # Handle the pressed keys
  454. def space(_):
  455. global game_number, miss_n_state, ingredients_height, mister_c_state, mister_e_state, miss_w_state
  456. if game_number < len(games_list):
  457. if games_list[game_number] == "N":
  458. if miss_n_state == 0:
  459. miss_n_state = 1
  460. miss_n_game()
  461. elif miss_n_state == 1:
  462. miss_n_state = 2
  463. ingredients_height -= round(flour_qtt / 3)
  464. cv.create_rectangle(1141, 359, 1239, ingredients_height, fill="#fff4de", outline="#fff4de")
  465. elif miss_n_state == 2:
  466. miss_n_state = 3
  467. cv.create_rectangle(1141, ingredients_height, 1239, ingredients_height - round(sugar_qtt / 3), fill="#ffb34f", outline="#ffb34f")
  468. ingredients_height -= round(sugar_qtt / 3)
  469. elif miss_n_state == 3:
  470. miss_n_state = 4
  471. cv.create_line(1141, ingredients_height, 1239, ingredients_height, fill="#ffffff")
  472. cv.create_line(1180, ingredients_height, 1200, ingredients_height, fill="#ffcc00")
  473. ingredients_height -= 1
  474. elif miss_n_state == 4:
  475. miss_n_state = 5
  476. cv.create_rectangle(1141, ingredients_height, 1239, ingredients_height - round(milk_qtt / 3), fill="#ffffff", outline="#ffffff")
  477. miss_n_end()
  478. elif miss_n_state == 6:
  479. game_number += 1
  480. next_game()
  481. elif games_list[game_number] == "C":
  482. if mister_c_state == 0:
  483. mister_c_state = 1
  484. mister_c_game()
  485. elif mister_c_state == 4:
  486. game_number += 1
  487. next_game()
  488. elif games_list[game_number] == "E":
  489. if mister_e_state in [0, 3, 6, 9]:
  490. mister_e_state += 1
  491. mister_e_game()
  492. elif mister_e_state == 12:
  493. game_number += 1
  494. next_game()
  495. elif games_list[game_number] == "W":
  496. if miss_w_state == 0:
  497. miss_w_state = 1
  498. miss_w_game()
  499. elif miss_w_state == 4:
  500. game_number += 1
  501. next_game()
  502. elif game_number == 4:
  503. start()
  504. def enter(_):
  505. global mister_c_state, mister_c_score
  506. if game_number < len(games_list):
  507. if games_list[game_number] == "C":
  508. if mister_c_state == 1:
  509. mister_c_verif()
  510. mister_c_input.delete(0, tk.END)
  511. mister_c_state = 2
  512. mister_c_game()
  513. elif mister_c_state == 2:
  514. mister_c_verif()
  515. mister_c_input.delete(0, tk.END)
  516. if mister_c_score == 2:
  517. mister_c_state = 4
  518. mister_c_input.destroy()
  519. else:
  520. mister_c_state = 3
  521. mister_c_game()
  522. elif mister_c_state == 3:
  523. if mister_c_verif():
  524. mister_c_state = 4
  525. mister_c_game()
  526. else:
  527. mister_c_state = 5
  528. mister_c_game()
  529. mister_c_input.destroy()
  530. def button1(_):
  531. global mister_e_state
  532. if game_number < len(games_list):
  533. if games_list[game_number] == "E":
  534. if mister_e_state in [2, 5, 8, 11]:
  535. mister_e_state += 1
  536. def f(_):
  537. global miss_w_score, f_list
  538. if miss_w_state == 2:
  539. for note in f_list:
  540. if note[1] == 0 and 408 <= cv.coords(notes_id[note[0]])[1] <= 472:
  541. note[1] = 1
  542. miss_w_score += 10
  543. cv.itemconfig(miss_w_score_text, text=str(miss_w_score))
  544. cv.itemconfig(notes_id[note[0]], fill="#a9e092")
  545. def g(_):
  546. global miss_w_score, g_list
  547. if miss_w_state == 2:
  548. for note in g_list:
  549. if note[1] == 0 and 408 <= cv.coords(notes_id[note[0]])[1] <= 472:
  550. note[1] = 1
  551. miss_w_score += 10
  552. cv.itemconfig(miss_w_score_text, text=str(miss_w_score))
  553. cv.itemconfig(notes_id[note[0]], fill="#a9e092")
  554. def h(_):
  555. global miss_w_score, h_list
  556. if miss_w_state == 2:
  557. for note in h_list:
  558. if note[1] == 0 and 408 <= cv.coords(notes_id[note[0]])[1] <= 472:
  559. note[1] = 1
  560. miss_w_score += 10
  561. cv.itemconfig(miss_w_score_text, text=str(miss_w_score))
  562. cv.itemconfig(notes_id[note[0]], fill="#a9e092")
  563. def j(_):
  564. global miss_w_score, j_list
  565. if miss_w_state == 2:
  566. for note in j_list:
  567. if note[1] == 0 and 408 <= cv.coords(notes_id[note[0]])[1] <= 472:
  568. note[1] = 1
  569. miss_w_score += 10
  570. cv.itemconfig(miss_w_score_text, text=str(miss_w_score))
  571. cv.itemconfig(notes_id[note[0]], fill="#a9e092")
  572. def k(_):
  573. global miss_w_score, k_list
  574. if miss_w_state == 2:
  575. for note in k_list:
  576. if note[1] == 0 and 408 <= cv.coords(notes_id[note[0]])[1] <= 472:
  577. note[1] = 1
  578. miss_w_score += 10
  579. cv.itemconfig(miss_w_score_text, text=str(miss_w_score))
  580. cv.itemconfig(notes_id[note[0]], fill="#a9e092")
  581. def l(_):
  582. global miss_w_score, l_list
  583. if miss_w_state == 2:
  584. for note in l_list:
  585. if note[1] == 0 and 408 <= cv.coords(notes_id[note[0]])[1] <= 472:
  586. note[1] = 1
  587. miss_w_score += 10
  588. cv.itemconfig(miss_w_score_text, text=str(miss_w_score))
  589. cv.itemconfig(notes_id[note[0]], fill="#a9e092")
  590. root.bind("<space>", space)
  591. root.bind("f", f)
  592. root.bind("g", g)
  593. root.bind("h", h)
  594. root.bind("j", j)
  595. root.bind("k", k)
  596. root.bind("l", l)
  597. mister_c_input.bind("<Return>", enter)
  598. menu()
  599. root.mainloop()