Advertisement
Guest User

Untitled

a guest
May 20th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.84 KB | None | 0 0
  1. from tkinter import Tk, Label, IntVar, Radiobutton, PhotoImage, Canvas, Button, CENTER, NW
  2. from tkinter.messagebox import showinfo
  3. from PIL import Image, ImageTk
  4. import sys
  5. from random import randint
  6. import time
  7. from pygame import mixer
  8.  
  9. """ Position des cases """
  10. casex = [44,124,207,290,373,456,540,621,703,789,789,789,709,621,540,456,377,294,207,130,43,43,43,125,202,291,371,454,538,618,704,787,787,787,705,622,541,459,376,294,211,125,43,43,43,126,207,291,370,456,539,617,705,788]
  11. casey = [560,560,560,560,560,560,560,560,560,560,494,425,425,425,425,425,425,425,425,425,425,362,293,293,293,293,293,293,293,293,293,293,232,162,162,162,162,162,162,162,162,162,162,97,30,30,30,30,30,30,30,30,30,30]
  12.  
  13. """ Position des echelles """
  14. echellex = [540,207,703,621]
  15. echelley = [494,359,227,96]
  16.  
  17. """ Multiplayer variable """
  18. playerCount = 0
  19. currentPlayer = 0
  20. lastPlayer = 0
  21. playersPos = [0, 0, 0, 0]
  22. playerCanevas = [[0, 0], [0, 0], [0, 0], [0, 0]]
  23. colorPion = ['yellow', 'red', 'blue', 'black']
  24. deCanevas = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
  25. labelPlayer = [0, 0, 0, 0]
  26. pastNext = [0, 0, 0, 0]
  27. playWithComputer = 0
  28.  
  29. """ Musique """
  30. mixer.init()
  31. mixer.music.load('music/craberave.mp3')
  32. mixer.music.play(-1)
  33.  
  34. """ Start window """
  35.  
  36. lw = Tk()
  37. lw.title('Chasles Game')
  38. lw.geometry('600x310')
  39. lw.resizable(0, 0)
  40. lw.protocol("WM_DELETE_WINDOW", sys.exit)
  41.  
  42. lw.rowconfigure(1, pad=10)
  43.  
  44. img_Welcome = ImageTk.PhotoImage(
  45. Image.open('images/bienvenue.jpg').resize((600, 100)))
  46. lab_welcome = Label(lw, image=img_Welcome)
  47. lab_welcome.grid(row=0, column=0, columnspan=3)
  48.  
  49. lab_playerCount = Label(lw, text='Selection des joueurs:')
  50. lab_playerCount.grid(row=1, column=1)
  51.  
  52. var_playerCount = IntVar()
  53. var_playerCount.set(1)
  54. Radiobutton(lw, text='1 joueur avec 1 ordinateur',
  55. variable=var_playerCount, value=1).grid(row=2, column=1)
  56. Radiobutton(lw, text='2 joueurs', variable=var_playerCount,
  57. value=2).grid(row=3, column=1)
  58. Radiobutton(lw, text='3 joueurs', variable=var_playerCount,
  59. value=3).grid(row=4, column=1)
  60. Radiobutton(lw, text='4 joueurs', variable=var_playerCount,
  61. value=4).grid(row=5, column=1)
  62.  
  63. def launchGame():
  64. global playerCount, playWithComputer
  65.  
  66. lw.destroy()
  67. playerCount = var_playerCount.get()
  68. if playerCount == 1:
  69. playWithComputer = 1
  70. playerCount += 1
  71.  
  72. btn_launch = Button(lw, text='Lancer la partie', command=launchGame)
  73. btn_launch.grid(row=6, column=0)
  74.  
  75. btn_quit = Button(lw, text='Quitter la partie', command=sys.exit)
  76. btn_quit.grid(row=6, column=2)
  77.  
  78. lw.mainloop()
  79.  
  80. """ Game window """
  81.  
  82. gw = Tk()
  83. gw.title('Chasles Game')
  84. gw.geometry('855x700')
  85. gw.resizable(0, 0)
  86. gw.protocol("WM_DELETE_WINDOW", sys.exit)
  87.  
  88. back = PhotoImage(file='images/board.gif')
  89.  
  90. canevas = Canvas(gw, width=855, height=600)
  91. canevas.create_image(0, 0, anchor=NW, image=back)
  92. for i in range(0, playerCount):
  93. playerCanevas[i][0] = PhotoImage(file='images/pion_' + colorPion[i] + '.png')
  94. playerCanevas[i][1] = canevas.create_image(casex[0] + i * 5, casey[0] + i * 5, anchor=CENTER, image=playerCanevas[i][0])
  95. for i in range(0, 6):
  96. url = 'images/D' + str(i + 1) + '.png'
  97. deCanevas[i] = [0, 0]
  98. deCanevas[i][0] = ImageTk.PhotoImage(
  99. Image.open(url).resize((64, 64)))
  100. deCanevas[i][1] = canevas.create_image(-100, -100, anchor=CENTER, image=deCanevas[i][0])
  101. canevas.grid(row=0, column=0, columnspan=3)
  102.  
  103. def moveEchelle(player):
  104. global playersPos, canevas
  105. echellePos = 0
  106.  
  107. if playersPos[player] == 14:
  108. echellePos = 0
  109. playersPos[player] = 6
  110. elif playersPos[player] == 18:
  111. echellePos = 1
  112. playersPos[player] = 24
  113. elif playersPos[player] == 30:
  114. echellePos = 2
  115. playersPos[player] = 34
  116. elif playersPos[player] == 51:
  117. echellePos = 3
  118. playersPos[player] = 35
  119. canevas.coords(playerCanevas[player][1], echellex[echellePos], echelley[echellePos])
  120. canevas.update()
  121. time.sleep(0.3)
  122. canevas.coords(playerCanevas[player][1], casex[playersPos[player]], casey[playersPos[player]])
  123. canevas.update()
  124.  
  125.  
  126. def launchDe():
  127. global currentPlayer, deCanevas, labelPlayer, lastPlayer
  128. btn.config(state='disabled')
  129.  
  130. canRelaunch = 0
  131. rand = randint(1, 6)
  132.  
  133. """ Animation """
  134. for i in range(0, 2):
  135. """Met l'image du dé 1 dans le canevas"""
  136. canevas.coords(deCanevas[0][1], 428, 300)
  137. canevas.update()
  138. time.sleep(0.04)
  139. """Remet l'image du dé 1 hors du canevas"""
  140. canevas.coords(deCanevas[0][1], -100, -100)
  141. """Met l'image du dé 2 dans le canevas"""
  142. canevas.coords(deCanevas[1][1], 428, 300)
  143. canevas.update()
  144. time.sleep(0.04)
  145. canevas.coords(deCanevas[1][1], -100, -100)
  146. canevas.coords(deCanevas[2][1], 428, 300)
  147. canevas.update()
  148. time.sleep(0.04)
  149. canevas.coords(deCanevas[2][1], -100, -100)
  150. canevas.coords(deCanevas[3][1], 428, 300)
  151. canevas.update()
  152. time.sleep(0.04)
  153. canevas.coords(deCanevas[3][1], -100, -100)
  154. canevas.coords(deCanevas[4][1], 428, 300)
  155. canevas.update()
  156. time.sleep(0.04)
  157. canevas.coords(deCanevas[4][1], -100, -100)
  158. canevas.coords(deCanevas[5][1], 428, 300)
  159. canevas.update()
  160. time.sleep(0.04)
  161. canevas.coords(deCanevas[5][1], -100, -100)
  162. canevas.update()
  163.  
  164. canevas.coords(deCanevas[rand - 1][1], 428, 300)
  165. canevas.update()
  166. time.sleep(0.3)
  167. canevas.coords(deCanevas[rand - 1][1], -100, -100)
  168. canevas.update()
  169.  
  170. if playersPos[currentPlayer] + rand > 53:
  171. memo = 53 - playersPos[currentPlayer]
  172. movePlayer(currentPlayer, memo)
  173. movePlayer(currentPlayer, memo - rand)
  174. else:
  175. movePlayer(currentPlayer, rand)
  176.  
  177. if playersPos[currentPlayer] == 1:
  178. if currentPlayer == 1 and playWithComputer:
  179. showinfo(title="Notification", message="L'ordinateur avance jusqu'à la prochaine case rouge")
  180. else:
  181. showinfo(title="Notification", message="Vous avancez jusqu'à la prochaine case rouge")
  182. movePlayer(currentPlayer, 8)
  183. elif playersPos[currentPlayer] == 2 or playersPos[currentPlayer] == 7 or playersPos[currentPlayer] == 13 or playersPos[currentPlayer] == 25 or playersPos[currentPlayer] == 36 or playersPos[currentPlayer] == 43 or playersPos[currentPlayer] == 47:
  184. showinfo(title="Notification", message="Carte Chance")
  185. Chance = randint(0, 9)
  186.  
  187. if Chance == 0:
  188. if currentPlayer == 1 and playWithComputer:
  189. showinfo(title="carte chance", message="L'ordinateur fait reculer ses adversaires de 3 cases")
  190. else:
  191. showinfo(title="carte chance", message="Vous faites reculer vos adversaires de 3 cases")
  192. for i in range(0, playerCount):
  193. if i != currentPlayer:
  194. movePlayer(i, -3)
  195. elif Chance == 1:
  196. if currentPlayer == 1 and playWithComputer:
  197. showinfo(title="carte chance", message="M RADONDE vient de dire que l'ordinateur est une MACHINE! Il peut avancer de 3 cases supplémentaires")
  198. else:
  199. showinfo(title="carte chance", message="M RADONDE vient de dire que vous êtes une MACHINE! Vous pouvez avancer de 3 cases supplémentaires")
  200. movePlayer(currentPlayer, 3)
  201. elif Chance == 2:
  202. if currentPlayer == 1 and playWithComputer:
  203. showinfo(title="carte chance", message="MME DELBREIL trouve l'ordinateur très futé, elle lui offre un jet de dé supplémentaire")
  204. else:
  205. showinfo(title="carte chance", message="MME DELBREIL vous trouve très futé, elle vous offre un jet de dé supplémentaire")
  206. canRelaunch = 1
  207. elif Chance == 3:
  208. if currentPlayer == 1 and playWithComputer:
  209. showinfo(title="carte chance", message="M LOPEZ oblige l'ordinateur à faire 10 pompes, il doit passer son prochain tour")
  210. else:
  211. showinfo(title="carte chance", message="M LOPEZ vous oblige à faire 10 pompes, vous devez passer votre prochain tour")
  212. pastNext[currentPlayer] = 1
  213. elif Chance == 4:
  214. if currentPlayer == 1 and playWithComputer:
  215. showinfo(title="carte chance", message="M IGLESIAS oblige l'ordinateur à faire 2 tours de terrain, il doit passer son prochain tour")
  216. else:
  217. showinfo(title="carte chance", message="M IGLESIAS vous oblige à faire 2 tours de terrain, vous devez passer votre prochain tour")
  218. pastNext[currentPlayer] = 1
  219. elif Chance == 5:
  220. if currentPlayer == 1 and playWithComputer:
  221. showinfo(title="carte chance", message="M COSTA reprend l'ordinateur à l’ordre, il doit reculer d’une case")
  222. else:
  223. showinfo(title="carte chance", message="M COSTA vous reprend à l’ordre, vous devez reculer d’une case")
  224. movePlayer(currentPlayer, -1)
  225. elif Chance == 6:
  226. if currentPlayer == 1 and playWithComputer:
  227. showinfo(title="carte chance", message="Un dé tombe du ciel, Quelle chance! L'ordinateur à un jeu de dé supplémentaire")
  228. else:
  229. showinfo(title="carte chance", message="Un dé tombe du ciel, Quelle chance! Vous avez un jeu de dé supplémentaire")
  230. canRelaunch = 1
  231. elif Chance == 7:
  232. if currentPlayer == 1 and playWithComputer:
  233. showinfo(title="carte chance", message="L'ordinateur vient de déclencher un tremblement de terre… Chaque joueur recule d’une case, les effets des cases sont neutralisés pour tous les joueurs pour ce tour")
  234. else:
  235. showinfo(title="carte chance", message="Vous venez de déclencher un tremblement de terre… Chaque joueur recule d’une case, les effets des cases sont neutralisés pour tous les joueurs pour ce tour")
  236. for i in range(0, playerCount):
  237. if i != currentPlayer:
  238. movePlayer(i, -1)
  239. elif Chance == 8:
  240. if currentPlayer == 1 and playWithComputer:
  241. showinfo(title="carte chance", message="MME PEREZ a un oeil de lynx, elle a chopé l'ordinateur avec son téléphone. Il va à la case colle")
  242. else:
  243. showinfo(title="carte chance", message="MME PEREZ a un oeil de lynx, elle vous a chopé avec votre téléphone. Vous allez à la case colle")
  244. movePlayer(currentPlayer, ( 11 - playersPos[currentPlayer]))
  245. elif Chance == 9:
  246. if currentPlayer == 1 and playWithComputer:
  247. showinfo(title="carte chance", message="L'ordinateur avance de 3 cases")
  248. else:
  249. showinfo(title="carte chance", message="Vous avancez de 3 cases")
  250. movePlayer(currentPlayer, 3)
  251. elif playersPos[currentPlayer] == 4 or playersPos[currentPlayer] == 10 or playersPos[currentPlayer] == 20 or playersPos[currentPlayer] == 27 or playersPos[currentPlayer] == 31 or playersPos[currentPlayer] == 37 or playersPos[currentPlayer] == 40 or playersPos[currentPlayer] == 45:
  252. if currentPlayer == 1 and playWithComputer:
  253. showinfo(title="Notification", message="Le dé de l'ordinateur est doublé")
  254. else:
  255. showinfo(title="Notification", message="Votre dé est doublé")
  256. movePlayer(currentPlayer, rand)
  257. elif playersPos[currentPlayer] == 8:
  258. if currentPlayer == 1 and playWithComputer:
  259. showinfo(title="Notification", message="L'ordinateur recule jusqu'à la dernière case noire")
  260. else:
  261. showinfo(title="Notification", message="Vous reculez jusqu'à la dernière case noire")
  262. movePlayer(currentPlayer, -3)
  263. elif playersPos[currentPlayer] == 9:
  264. if currentPlayer == 1 and playWithComputer:
  265. showinfo(title="Notification", message="L'ordinateur avance jusqu'à la prochaine case rouge")
  266. else:
  267. showinfo(title="Notification", message="Vous avancez jusqu'à la prochaine case rouge")
  268. movePlayer(currentPlayer, 6)
  269. elif playersPos[currentPlayer] == 14:
  270. if currentPlayer == 1 and playWithComputer:
  271. showinfo(title="Notification", message="L'ordinateur descend l'échelle")
  272. else:
  273. showinfo(title="Notification", message="Vous descendez à l'échelle")
  274. moveEchelle(currentPlayer)
  275. elif playersPos[currentPlayer] == 15:
  276. if currentPlayer == 1 and playWithComputer:
  277. showinfo(title="Notification", message="L'ordinateur avance jusqu'à la prochaine case rouge")
  278. else:
  279. showinfo(title="Notification", message="Vous avancez jusqu'à la prochaine case rouge")
  280. movePlayer(currentPlayer, 4)
  281. elif playersPos[currentPlayer] == 17:
  282. if currentPlayer == 1 and playWithComputer:
  283. showinfo(title="Notification", message="L'ordinateur recule jusqu'à la dernière case noire")
  284. else:
  285. showinfo(title="Notification", message="Vous reculez jusqu'à la dernière case noire")
  286. movePlayer(currentPlayer, -9)
  287. elif playersPos[currentPlayer] == 18:
  288. if currentPlayer == 1 and playWithComputer:
  289. showinfo(title="Notification", message="L'ordinateur monte à l'échelle")
  290. else:
  291. showinfo(title="Notification", message="Vous montez à l'échelle")
  292. moveEchelle(currentPlayer)
  293. elif playersPos[currentPlayer] == 19:
  294. if currentPlayer == 1 and playWithComputer:
  295. showinfo(title="Notification", message="L'ordinateur avance jusqu'à la prochaine case rouge")
  296. else:
  297. showinfo(title="Notification", message="Vous avancez jusqu'à la prochaine case rouge")
  298. movePlayer(currentPlayer, 7)
  299. elif playersPos[currentPlayer] == 22:
  300. if currentPlayer == 1 and playWithComputer:
  301. showinfo(title="Notification", message="L'ordinateur recule jusqu'à la dernière case noire")
  302. else:
  303. showinfo(title="Notification", message="Vous reculez jusqu'à la dernière case noire")
  304. movePlayer(currentPlayer, -5)
  305. elif playersPos[currentPlayer] == 26:
  306. if currentPlayer == 1 and playWithComputer:
  307. showinfo(title="Notification", message="L'ordinateur avance jusqu'à la prochaine case rouge")
  308. else:
  309. showinfo(title="Notification", message="Vous avancez jusqu'à la prochaine case rouge")
  310. movePlayer(currentPlayer, 9)
  311. elif playersPos[currentPlayer] == 29:
  312. if currentPlayer == 1 and playWithComputer:
  313. showinfo(title="Notification", message="L'ordinateur recule jusqu'à la dernière case noire")
  314. else:
  315. showinfo(title="Notification", message="Vous reculez jusqu'à la dernière case noire")
  316. movePlayer(currentPlayer, -7)
  317. elif playersPos[currentPlayer] == 30:
  318. if currentPlayer == 1 and playWithComputer:
  319. showinfo(title="Notification", message="L'ordinateur monte à l'échelle")
  320. else:
  321. showinfo(title="Notification", message="Vous montez à l'échelle")
  322. moveEchelle(currentPlayer)
  323. elif playersPos[currentPlayer] == 35:
  324. if currentPlayer == 1 and playWithComputer:
  325. showinfo(title="Notification", message="L'ordinateur avance jusqu'à la prochaine case rouge")
  326. else:
  327. showinfo(title="Notification", message="Vous avancez jusqu'à la prochaine case rouge")
  328. movePlayer(currentPlayer, 11)
  329. elif playersPos[currentPlayer] == 41:
  330. if currentPlayer == 1 and playWithComputer:
  331. showinfo(title="Notification", message="L'ordinateur recule jusqu'à la dernière case noire")
  332. else:
  333. showinfo(title="Notification", message="Vous reculez jusqu'à la dernière case noire")
  334. movePlayer(currentPlayer, -12)
  335. elif playersPos[currentPlayer] == 46:
  336. if currentPlayer == 1 and playWithComputer:
  337. showinfo(title="Notification", message="L'ordinateur avance jusqu'à la prochaine case rouge")
  338. else:
  339. showinfo(title="Notification", message="Vous avancez jusqu'à la prochaine case rouge")
  340. movePlayer(currentPlayer, 2)
  341. elif playersPos[currentPlayer] == 49:
  342. if currentPlayer == 1 and playWithComputer:
  343. showinfo(title="Notification", message="L'ordinateur recule jusqu'à la dernière case noire")
  344. else:
  345. showinfo(title="Notification", message="Vous reculez jusqu'à la dernière case noire")
  346. movePlayer(currentPlayer, -8)
  347. elif playersPos[currentPlayer] == 51:
  348. if currentPlayer == 1 and playWithComputer:
  349. showinfo(title="Notification", message="L'ordinateur descend l'échelle")
  350. else:
  351. showinfo(title="Notification", message="Vous descendez à l'échelle")
  352. moveEchelle(currentPlayer)
  353. elif playersPos[currentPlayer] == 53:
  354. gw.destroy()
  355. return
  356.  
  357. for i in range (0, playerCount):
  358. for j in range(0, playerCount):
  359. if i != j and playersPos[i] == playersPos[j]:
  360. canevas.coords(playerCanevas[j][1], casex[playersPos[j]] + j * 5, casey[playersPos[j]] + j * 5)
  361. canevas.update()
  362.  
  363. if not canRelaunch :
  364. lastPlayer = currentPlayer
  365. currentPlayer += 1
  366. if currentPlayer > playerCount - 1:
  367. currentPlayer = 0
  368. if pastNext[currentPlayer]:
  369. pastNext[currentPlayer] = 0
  370. currentPlayer += 1
  371. if currentPlayer > playerCount - 1:
  372. currentPlayer = 0
  373.  
  374. labelPlayer[lastPlayer].config(font='Helvetica 9 normal', fg=colorPion[lastPlayer])
  375. labelPlayer[currentPlayer].config(font='Helvetica 11 bold', fg=colorPion[currentPlayer])
  376.  
  377. if currentPlayer == 1 and playWithComputer:
  378. time.sleep(0.3)
  379. launchDe()
  380.  
  381. btn.config(state='normal')
  382.  
  383.  
  384. def movePlayer(player, deplacement):
  385. global playersPos, canevas
  386.  
  387. for _i in range(0, abs(deplacement)):
  388. time.sleep(0.09)
  389. if deplacement > 0:
  390. playersPos[player] = playersPos[player] + 1
  391. elif deplacement < 0:
  392. playersPos[player] = playersPos[player] - 1
  393. if (playersPos[player] < 0): playersPos[player] = 0
  394. canevas.coords(playerCanevas[player][1], casex[playersPos[player]], casey[playersPos[player]])
  395. canevas.update()
  396.  
  397.  
  398. btn = Button(gw, text="Lancer le dé", command=launchDe)
  399. btn.grid(row=1, column=1)
  400.  
  401. for i in range(0, playerCount):
  402. if i == 1 and playWithComputer:
  403. playerStr = "Ordinateur"
  404. else:
  405. playerStr = "Joueur " + str(i + 1)
  406. font = 'Helvetica 9 normal'
  407. labelPlayer[i] = Label(gw, text=playerStr, font=font, fg=colorPion[i], highlightthickness=2)
  408. if i == 0:
  409. font = 'Helvetica 11 bold'
  410. labelPlayer[i].config(font=font)
  411. if i < 2:
  412. labelPlayer[i].grid(row=i+1, column=0)
  413. else:
  414. labelPlayer[i].grid(row=i-1, column=2)
  415.  
  416. gw.mainloop()
  417.  
  418. """ Finish window """
  419. fw = Tk()
  420. fw.title('Chasles Game')
  421. fw.geometry('600x300')
  422. fw.resizable(0, 0)
  423. fw.protocol("WM_DELETE_WINDOW", sys.exit)
  424.  
  425. fw.rowconfigure(1, pad=24)
  426.  
  427. img_Finish = ImageTk.PhotoImage(
  428. Image.open('images/over.png').resize((600, 200)))
  429.  
  430. lab_finish = Label(fw, image=img_Finish)
  431. lab_finish.grid(row=0, column=0, columnspan=3)
  432.  
  433. labText = ''
  434. if currentPlayer == 1 and playWithComputer:
  435. labText = 'Perdu ! L\'ordinateur a gagné !'
  436. elif playWithComputer:
  437. labText = 'Bravo, tu as gagné contre l\'ordinateur !'
  438. else:
  439. labText = 'Bravo Joueur ' + str(currentPlayer + 1) + ' ! Tu as gagné la partie !'
  440.  
  441. lab_playerWin = Label(fw, text=labText)
  442. lab_playerWin.grid(row=1, column=1)
  443.  
  444. btn_quit = Button(fw, text='Quitter la partie', command=sys.exit)
  445. btn_quit.grid(row=2, column=2)
  446.  
  447. fw.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement