Advertisement
Guest User

Untitled

a guest
May 20th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.97 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] """ coordonées en x des cases"""
  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] """coordonées en y des cases"""
  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): """fonction qui fait bouger les pions quand ils tombent sur une echelle """
  104. global playersPos, canevas
  105. echellePos = 0
  106.  
  107. if playersPos[player] == 14: """case départ echelle 1"""
  108. echellePos = 0
  109. playersPos[player] = 6 """case arrivée echelle 1"""
  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]) """ on déplace le pion aux coordonées echellex et echelley """
  120. canevas.update() """met a jour le canevas"""
  121. time.sleep(0.3) """delais"""
  122. canevas.coords(playerCanevas[player][1], casex[playersPos[player]], casey[playersPos[player]]) """on déplace le joueur aux coordonées de la case arrivée de l'echelle"""
  123. canevas.update()
  124.  
  125.  
  126. def launchDe():
  127. global currentPlayer, deCanevas, labelPlayer, lastPlayer
  128. btn.config(state='disabled')""" désactive le bouton dé apres avoir appuyé dessus"""
  129.  
  130. canRelaunch = 0 """Ne peux pas relancer le dé"""
  131. rand = randint(1, 6) """chiffre aléatoire entre 1 et 6"""
  132.  
  133. """ Animation """
  134. for i in range(0, 2): """ fait apparaitre deux fois les faces du dé de 1 à 6"""
  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) """affiche le dé que l'on a tiré"""
  165. canevas.update()
  166. time.sleep(0.3)
  167. canevas.coords(deCanevas[rand - 1][1], -100, -100)"""enleve du canevas le dé que l'on a tiré"""
  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") """afficher un message"""
  182. movePlayer(currentPlayer, 8) """Si le joueur actuel est sur la case 1alors il avance de 8 cases"""
  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 trouve vous 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 tour de terrain, il doit passer son prochain tour")
  216. else:
  217. showinfo(title="carte chance", message="M IGLESIAS vous oblige à faire 2 tour 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 a 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): """Vérifie pour chaque joueur si il est sur la même case qu'un autre"""
  359. if i != j and playersPos[i] == playersPos[j]:""" si le joueur j et le joueur j sont différents et que leur position sont identique, alors :"""
  360. canevas.coords(playerCanevas[j][1], casex[playersPos[j]] + j * 5, casey[playersPos[j]] + j * 5)"""On déplace le joueur j de 5pixels en x et en y multiplié par son numéro de joueur auquel on soustrait 1"""
  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) """Bouton lancer le dé"""
  399. btn.grid(row=1, column=1)"""Le place à la premiere ligne et premiere colone d'un tableau invisible divisant la fenetre"""
  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