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 pygame import mixer
  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. # Creation of the start menu
  18. start_button: tk.Button
  19. def menu():
  20. global start_button
  21. cv.delete("all")
  22. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#7993a3", outline="#7993a3")
  23. title = cv.create_text(640, 360, text="Elite Four", font=("Helvetica", 48, "bold"), fill="aliceblue")
  24. 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)
  25. start_button.place(x=576, y=600)
  26. def start():
  27. global game_number, games_list
  28. shuffle(games_list)
  29. game_number = 0
  30. start_button.destroy()
  31. next_game()
  32. def next_game():
  33. cv.delete("all")
  34. if game_number < len(games_list):
  35. if games_list[game_number] == "N":
  36. miss_n_init()
  37. elif games_list[game_number] == "C":
  38. mister_c_init()
  39. elif games_list[game_number] == "E":
  40. mister_e_init()
  41. elif games_list[game_number] == "W":
  42. miss_w_init()
  43. else:
  44. # The END
  45. cv.create_rectangle(0, 0, 1280, 720, fill="#b7ddeb", outline="#b7ddeb")
  46. cv.create_text(640, 100, text="Well played!", font=("Helvetica", 64, "bold"), fill="#194a5c")
  47. cv.create_text(640, 310, text="Thank you for playing <3", font=("Helvetica", 48, "bold"), fill="#194a5c")
  48. cv.create_text(640, 520, text="Goodbyyyyye", font=("Helvetica", 64, "bold"), fill="#194a5c")
  49. 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")
  50. cv.tag_bind(github_link, "<Button-1>", lambda _ : wb.open("https://github.com/Hvrnbi/elite-four"))
  51. def reset():
  52. 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,\
  53. 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,\
  54. 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
  55. game_number = 4
  56. # Miss N
  57. miss_n_state = 0
  58. flour_qtt = 0
  59. flour_qtt_inc = True
  60. sugar_qtt = 0
  61. sugar_qtt_inc = True
  62. eggs_qtt = 0
  63. eggs_qtt_inc = True
  64. milk_qtt = 0
  65. milk_qtt_inc = True
  66. ingredients_height = 359
  67. # Mister C
  68. mister_c_state = 0
  69. mister_c_dialog = 0
  70. skyline_image = 0
  71. ptimage = None
  72. mister_c_input = tk.Entry(root)
  73. mister_c_input.bind("<Return>", enter)
  74. mister_c_score = 0
  75. # Mister E
  76. mister_e_state = 0
  77. mister_e_time = 0
  78. mister_e_time_count = 0
  79. mister_e_timer = 0
  80. mask_images = []
  81. masks_list = []
  82. happy_mask = {}
  83. mister_e_dialog = 0
  84. # Miss W
  85. miss_w_state = 0
  86. miss_w_dialog = 0
  87. notes_id = []
  88. f_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 202]
  89. g_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 384]
  90. h_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 566]
  91. j_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 748]
  92. k_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 930]
  93. l_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 1112]
  94. miss_w_score = 0
  95. miss_w_score_text = 0
  96. menu()
  97. # General GUI functions
  98. def draw_dialog_area():
  99. dialog_rect = cv.create_rectangle(8, 500, 1272, 712, fill="#ffffff", outline="#ffffff")
  100. dialog_name_rect = cv.create_rectangle(580, 484, 700, 500, fill="#ffffff", outline="#ffffff")
  101. # Miss N game
  102. miss_n_state = 0
  103. flour_qtt = 0
  104. flour_qtt_inc = True
  105. sugar_qtt = 0
  106. sugar_qtt_inc = True
  107. eggs_qtt = 0
  108. eggs_qtt_inc = True
  109. milk_qtt = 0
  110. milk_qtt_inc = True
  111. miss_n_dialog: int
  112. flour_qtt_text: int
  113. sugar_qtt_text: int
  114. eggs_qtt_text: int
  115. milk_qtt_text: int
  116. ingredients_height = 359
  117. def miss_n_init():
  118. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#6abd9c", outline="#6abd9c")
  119. draw_dialog_area()
  120. dialog_name = cv.create_text(640, 500, text="Miss N", font=("Helvetica", 16, "bold"), fill="#163226")
  121. container_rect = cv.create_rectangle(1140, 80, 1240, 360, fill="#c9c9c9", outline="#c9c9c9")
  122. flour_rect = cv.create_rectangle(40, 100, 180, 280, fill="#fff4de", outline="#fff4de")
  123. flour_text = cv.create_text(110, 88, text="FLOUR", font=("Helvetica", 16), fill="#163226")
  124. sugar_rect = cv.create_rectangle(220, 160, 360, 280, fill="#ffb34f", outline="#ffb34f")
  125. sugar_top = cv.create_polygon(220, 160, 360, 160, 290, 100, fill="#ffb34f", outline="#ffb34f")
  126. sugar_text = cv.create_text(290, 88, text="SUGAR", font=("Helvetica", 16), fill="#163226")
  127. eggs_oval = cv.create_oval(400, 100, 540, 280, fill="#e6c493", outline="#e6c493")
  128. eggs_text = cv.create_text(470, 88, text="EGGS", font=("Helvetica", 16), fill="#163226")
  129. milk_rect = cv.create_rectangle(580, 160, 720, 280, fill="#ffffff", outline="#ffffff")
  130. milk_top = cv.create_rectangle(580, 100, 720, 160, fill="#0000cc", outline="#0000cc")
  131. milk_text = cv.create_text(650, 88, text="MILK", font=("Helvetica", 16), fill="#163226")
  132. miss_n_game()
  133. def miss_n_game():
  134. 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
  135. if miss_n_state == 0:
  136. 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\
  137. The rules are easy, just press SPACE when you think that a quantity is good.\n\
  138. If you follow the recipe, you win. If you don't, you lose.\n\
  139. Here is the recipe:\n\
  140. - 170g of flour\n\
  141. - 40g of sugar\n\
  142. - 3 eggs\n\
  143. - 600mL of milk\n\n\
  144. Press SPACE to start, good luck <3", font=("Helvetica", 12), fill="#163226")
  145. flour_qtt_text = cv.create_text(110, 308, text="", font=("Helvetica", 16), fill="#163226")
  146. sugar_qtt_text = cv.create_text(290, 308, text="", font=("Helvetica", 16), fill="#163226")
  147. eggs_qtt_text = cv.create_text(470, 308, text="", font=("Helvetica", 16), fill="#163226")
  148. milk_qtt_text = cv.create_text(650, 308, text="", font=("Helvetica", 16), fill="#163226")
  149. elif miss_n_state == 1:
  150. if flour_qtt_inc:
  151. flour_qtt += 1
  152. if flour_qtt == 400:
  153. flour_qtt_inc = False
  154. else:
  155. flour_qtt -= 1
  156. if flour_qtt == 0:
  157. flour_qtt_inc = True
  158. cv.itemconfig(flour_qtt_text, text=str(flour_qtt))
  159. root.after(8, miss_n_game)
  160. elif miss_n_state == 2:
  161. if sugar_qtt_inc:
  162. sugar_qtt += 1
  163. if sugar_qtt == 100:
  164. sugar_qtt_inc = False
  165. else:
  166. sugar_qtt -= 1
  167. if sugar_qtt == 0:
  168. sugar_qtt_inc = True
  169. cv.itemconfig(sugar_qtt_text, text=str(sugar_qtt))
  170. root.after(10, miss_n_game)
  171. elif miss_n_state == 3:
  172. if eggs_qtt_inc:
  173. eggs_qtt += 1
  174. if eggs_qtt == 5:
  175. eggs_qtt_inc = False
  176. else:
  177. eggs_qtt -= 1
  178. if eggs_qtt == 0:
  179. eggs_qtt_inc = True
  180. cv.itemconfig(eggs_qtt_text, text=str(eggs_qtt))
  181. root.after(140, miss_n_game)
  182. elif miss_n_state == 4:
  183. if milk_qtt_inc:
  184. milk_qtt += 1
  185. if milk_qtt == 1000:
  186. milk_qtt_inc = False
  187. else:
  188. milk_qtt -= 1
  189. if milk_qtt == 0:
  190. milk_qtt_inc = True
  191. cv.itemconfig(milk_qtt_text, text=str(milk_qtt))
  192. root.after(4, miss_n_game)
  193. def miss_n_end():
  194. global miss_n_state
  195. score = abs(flour_qtt - 170) * 3 + abs(sugar_qtt - 40) * 15 + abs(eggs_qtt - 3) * 200 + abs(milk_qtt - 600)
  196. if score < 300:
  197. cv.itemconfig(miss_n_dialog, text="Those crepes look delicious, great job!\nPress SPACE to continue <3")
  198. miss_n_state = 6
  199. else:
  200. cv.itemconfig(miss_n_dialog, text="It seems absolutely uneatable, I hope you'll do better next time.")
  201. root.after(5000, reset)
  202. # Mister C game
  203. mister_c_state = 0
  204. images_list = ["images/bucharest.png", "images/dallas.png", "images/dublin.png", "images/kualalumpur.png", "images/lagos.png", "images/lyon.png", "images/warsaw.png"]
  205. 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"]}
  206. mister_c_dialog: int
  207. mister_c_result: int
  208. skyline_image: int
  209. ptimage = None
  210. mister_c_input = tk.Entry(root)
  211. mister_c_score = 0
  212. def mister_c_init():
  213. shuffle(images_list)
  214. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#7cf27c", outline="#7cf27c")
  215. draw_dialog_area()
  216. dialog_name = cv.create_text(640, 500, text="Mister C", font=("Helvetica", 16, "bold"), fill="#0b6b0b")
  217. mister_c_game()
  218. def mister_c_game():
  219. global mister_c_dialog, skyline_image, ptimage
  220. if mister_c_state == 0:
  221. mister_c_dialog = cv.create_text(640, 606, text="Halloooo, my name is Mister C !\n\
  222. In my game, you'll have to recognize a city from his skyline, and the colors on the flag of its country.\n\
  223. You will see 3 images, and you'll have to make 2 correct guesses if you want to continue.\n\
  224. You only have one chance per image, good luck !\n\
  225. Press SPACE to start", font=("Helvetica", 12), fill="#0b6b0b")
  226. if mister_c_state == 1:
  227. cv.itemconfig(mister_c_dialog, text="Which city do you think it is ?")
  228. ptimage = ImageTk.PhotoImage(file=images_list[0])
  229. skyline_image = cv.create_image(640, 242, image=ptimage, anchor=tk.CENTER)
  230. mister_c_input.place(x=640, y=632, anchor=tk.CENTER)
  231. elif mister_c_state == 2:
  232. cv.itemconfig(mister_c_dialog, text="Which city do you think it is ?")
  233. ptimage = ImageTk.PhotoImage(file=images_list[1])
  234. cv.itemconfigure(skyline_image, image=ptimage)
  235. elif mister_c_state == 3:
  236. cv.itemconfig(mister_c_dialog, text="Which city do you think it is ?")
  237. ptimage = ImageTk.PhotoImage(file=images_list[2])
  238. cv.itemconfigure(skyline_image, image=ptimage)
  239. elif mister_c_state == 4:
  240. cv.itemconfig(mister_c_dialog, text="Well played!\nPress SPACE to continue.")
  241. elif mister_c_state == 5:
  242. cv.itemconfig(mister_c_dialog, text="You have to work a little more, see you later !")
  243. root.after(5000, reset)
  244. def mister_c_verif():
  245. global mister_c_score, mister_c_result
  246. if mister_c_input.get() in mister_c_answers[images_list[mister_c_state - 1]]:
  247. mister_c_score += 1
  248. if mister_c_state == 1:
  249. mister_c_result = cv.create_text(640, 680, text="Correct!", font=("Helvetica", 12), fill="#0b6b0b")
  250. else:
  251. cv.itemconfig(mister_c_result, text="Correct!")
  252. return True
  253. else:
  254. if mister_c_state == 1:
  255. mister_c_result = cv.create_text(640, 680, text="Wrong!", font=("Helvetica", 12), fill="#0b6b0b")
  256. else:
  257. cv.itemconfig(mister_c_result, text="Wrong!")
  258. return False
  259. # Mister E game
  260. mister_e_state = 0
  261. mister_e_time = 0
  262. mister_e_time_count = 0
  263. mister_e_timer: int
  264. mask_images = []
  265. masks_list = []
  266. happy_mask = {}
  267. mister_e_dialog: int
  268. def mister_e_init():
  269. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#fda3ff", outline="#fda3ff")
  270. draw_dialog_area()
  271. dialog_name = cv.create_text(640, 500, text="Mister E", font=("Helvetica", 16, "bold"), fill="#730075")
  272. mister_e_game()
  273. def mister_e_game():
  274. global mister_e_dialog, mister_e_state, mister_e_time, mister_e_time_count, mister_e_timer
  275. if mister_e_state == 0:
  276. mister_e_dialog = cv.create_text(640, 606, text="Hello! I'm Mister E, nice to meet you!\n\
  277. In my game, you'll see some comedy masks, and you'll just have to find the happy one.\n\
  278. Good luck!\n\
  279. Press SPACE to start.", font=("Helvetica", 12), fill="#730075")
  280. elif mister_e_state == 1:
  281. spawn_masks()
  282. mister_e_state = 2
  283. mister_e_time = 15
  284. mister_e_timer = cv.create_text(1252, 700, text="15", font=("Helvetica", 16, "bold"), fill="#730075")
  285. mister_e_game()
  286. elif mister_e_state == 2:
  287. move_masks()
  288. mister_e_countdown()
  289. root.after(100, mister_e_game)
  290. elif mister_e_state == 3:
  291. mister_e_clear()
  292. cv.itemconfig(mister_e_dialog, text="Well done! But it was the easy level,\nPress SPACE to continue.")
  293. elif mister_e_state == 4:
  294. spawn_masks()
  295. mister_e_time = 20
  296. cv.itemconfig(mister_e_timer, text="20")
  297. mister_e_time_count = 0
  298. mister_e_state = 5
  299. mister_e_game()
  300. elif mister_e_state == 5:
  301. move_masks()
  302. mister_e_countdown()
  303. root.after(100, mister_e_game)
  304. elif mister_e_state == 6:
  305. mister_e_clear()
  306. cv.itemconfig(mister_e_dialog, text="Good job! You're ready to the next step,\nPress SPACE to continue.")
  307. elif mister_e_state == 7:
  308. spawn_masks()
  309. mister_e_time = 25
  310. cv.itemconfig(mister_e_timer, text="25")
  311. mister_e_time_count = 0
  312. mister_e_state = 8
  313. mister_e_game()
  314. elif mister_e_state == 8:
  315. move_masks()
  316. mister_e_countdown()
  317. root.after(100, mister_e_game)
  318. elif mister_e_state == 9:
  319. mister_e_clear()
  320. cv.itemconfig(mister_e_dialog, text="Well played! The next one is the last one, good luck!\nPress SPACE to continue.")
  321. elif mister_e_state == 10:
  322. spawn_masks()
  323. mister_e_time = 30
  324. cv.itemconfig(mister_e_timer, text="30")
  325. mister_e_time_count = 0
  326. mister_e_state = 11
  327. mister_e_game()
  328. elif mister_e_state == 11:
  329. move_masks()
  330. mister_e_countdown()
  331. root.after(100, mister_e_game)
  332. elif mister_e_state == 12:
  333. mister_e_clear()
  334. cv.itemconfig(mister_e_dialog, text="You did it!\nPress SPACE to continue.")
  335. elif mister_e_state == 13:
  336. mister_e_clear()
  337. cv.itemconfig(mister_e_dialog, text="Oh nooooo, the time is up!\nyou'll be luckier next time darling.")
  338. root.after(5000, reset)
  339. def spawn_masks():
  340. global masks_list, happy_mask, mask_images
  341. mask_images.append(ImageTk.PhotoImage(file="images/happy.png"))
  342. 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()}
  343. cv.tag_bind(happy_mask["id"], "<Button-1>", button1)
  344. for i in range(40 * mister_e_state // 3 + 1):
  345. mask_images.append(ImageTk.PhotoImage(file=choice(["images/sad.png", "images/fastfood.png"])))
  346. 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()})
  347. def move_masks():
  348. global masks_list
  349. for mask in masks_list:
  350. cv.move(mask["id"], mask["velx"], mask["vely"])
  351. if cv.coords(mask["id"])[0] < 0 or 1280 < cv.coords(mask["id"])[0]:
  352. mask["velx"] = -mask["velx"]
  353. if cv.coords(mask["id"])[1] < 0 or 500 < cv.coords(mask["id"])[1]:
  354. mask["vely"] = -mask["vely"]
  355. cv.move(happy_mask["id"], happy_mask["velx"], happy_mask["vely"])
  356. if cv.coords(happy_mask["id"])[0] < 0 or 1280 < cv.coords(happy_mask["id"])[0]:
  357. happy_mask["velx"] = -happy_mask["velx"]
  358. if cv.coords(happy_mask["id"])[1] < 0 or 500 < cv.coords(happy_mask["id"])[1]:
  359. happy_mask["vely"] = -happy_mask["vely"]
  360. def mask_vel_gen():
  361. vel = randint(6, 12)
  362. sign = randint(0, 1)
  363. if sign == 1:
  364. vel = -vel
  365. return vel
  366. def mister_e_clear():
  367. global mask_images, masks_list, happy_mask
  368. for elt in masks_list:
  369. cv.delete(elt)
  370. mask_images = []
  371. masks_list = []
  372. happy_mask = {}
  373. def mister_e_countdown():
  374. global mister_e_time, mister_e_time_count, mister_e_timer, mister_e_state
  375. mister_e_time_count += 1
  376. if mister_e_time_count % 10 == 0:
  377. mister_e_time -= 1
  378. cv.itemconfig(mister_e_timer, text=str(mister_e_time))
  379. if mister_e_time == 0:
  380. mister_e_state = 13
  381. # Miss W game
  382. miss_w_state = 0
  383. miss_w_dialog: int
  384. 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],\
  385. [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],\
  386. [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],\
  387. [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]]
  388. notes_id = []
  389. f_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 202]
  390. g_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 384]
  391. h_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 566]
  392. j_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 748]
  393. k_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 930]
  394. l_list = [[i, 0] for i in range(len(notes_list)) if notes_list[i][0] == 1112]
  395. miss_w_score = 0
  396. miss_w_score_text = 0
  397. def miss_w_init():
  398. bg_rect = cv.create_rectangle(0, 0, 1280, 720, fill="#c892e0", outline="#c892e0")
  399. draw_dialog_area()
  400. dialog_name = cv.create_text(640, 500, text="Miss W", font=("Helvetica", 16, "bold"), fill="#481a5b")
  401. miss_w_game()
  402. def miss_w_game():
  403. global miss_w_state, miss_w_dialog, miss_w_score_text
  404. if miss_w_state == 0:
  405. miss_w_dialog = cv.create_text(640, 606, text="Helloooo, I'm Miss W!\n\
  406. My game is a rythm game, good luck!\n\
  407. Press SPACE to start.", font=("Helvetica", 12), fill="#481a5b")
  408. elif miss_w_state == 1:
  409. miss_w_draw_ui()
  410. spawn_notes()
  411. mixer.init()
  412. mixer.music.load("audio/scottish.mp3")
  413. mixer.music.set_volume(1.0)
  414. mixer.music.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()