Advertisement
Guest User

Untitled

a guest
Jan 3rd, 2015
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.10 KB | None | 0 0
  1. from tkinter import *
  2. from PIL import Image, ImageTk
  3. import time, random
  4.  
  5. WINDOW_WIDTH = 1200
  6. WINDOW_HEIGHT = 600
  7. GEOMETRY_STRING = str(WINDOW_WIDTH)+'x'+str(WINDOW_HEIGHT)
  8.  
  9.  
  10. paddle_1_image = "pong.gif"
  11. paddle_2_image = "beer_pong.gif"
  12. paddle_width, paddle_height = 100, 50
  13. pong_ball_width, pong_ball_height = 50, 50
  14.  
  15. class Pong(Frame):
  16. def __init__(self, master = None):
  17.  
  18. Frame.__init__(self,master)
  19.  
  20.  
  21. self.master = master
  22. self.master.title("PONG VS BEER PONG!")
  23. self.pong_dx = random.randint(5, 15)
  24. self.pong_dy = random.randint(5, 10)
  25. self.init_canvas()
  26. self.init_bindings()
  27.  
  28.  
  29. def init_canvas(self):
  30. C1 = Canvas(self.master)
  31. C2 = Canvas(self.master)
  32. self.C1 = C1
  33. self.C2 = C2
  34. C1.pack(side = 'left', fill = BOTH, expand = True)
  35. C2.pack(side = 'right', fill = BOTH, expand = True)
  36.  
  37.  
  38. self.C1_photo = ImageTk.PhotoImage(file = "space_background.gif")
  39. self.C1.create_image(0, 0, image = self.C1_photo, anchor = NW)
  40. self.C2_photo = ImageTk.PhotoImage(file = "space_4.gif")
  41. self.C2.create_image(0, 0, image = self.C2_photo,
  42. anchor = NW)
  43. self.paddle_1_image = "pong.gif"
  44. self.original = Image.open(paddle_1_image)
  45. self.resized = self.original.resize((paddle_width, paddle_height),
  46. Image.ANTIALIAS)
  47. self.paddle_1_image = ImageTk.PhotoImage(self.resized)
  48. self.paddle_1 = C1.create_image(WINDOW_WIDTH / 4,
  49. 0 + paddle_height / 2,
  50. image = self.paddle_1_image)
  51.  
  52. self.paddle_2_image = "beer_pong.gif"
  53. self.original = Image.open(paddle_2_image)
  54. self.resized = self.original.resize((paddle_width, paddle_height),
  55. Image.ANTIALIAS)
  56. self.paddle_2_image = ImageTk.PhotoImage(self.resized)
  57. self.paddle_2 = C1.create_image(WINDOW_WIDTH / 4,
  58. WINDOW_HEIGHT - paddle_height / 2,
  59. image = self.paddle_2_image)
  60.  
  61. self.animated_ball_image = "pong_ball.gif"
  62. self.original = Image.open(self.animated_ball_image)
  63. self.resized = self.original.resize((pong_ball_width,
  64. pong_ball_height),
  65. Image.ANTIALIAS)
  66. self.animated_ball_image = ImageTk.PhotoImage(self.resized)
  67. self.animated_ball = C1.create_image(WINDOW_WIDTH / 4,
  68. WINDOW_HEIGHT / 2,
  69. image = self.animated_ball_image)
  70.  
  71. menu = Menu(self.master)
  72. self.master.config(menu = menu)
  73.  
  74. file = Menu(menu)
  75. file.add_command(label = 'Resume', command = self.negate_chronos)
  76. file.add_command(label = 'Pause', command = self.chronos)
  77. file.add_command(label = 'Exit', command = self.client_exit)
  78. menu.add_cascade(label = 'File', menu = file)
  79.  
  80. edit = Menu(menu)
  81.  
  82. edit.add_command(label = 'New Ball Velocity',
  83. command = self.new_velocity)
  84. edit.add_command(label = 'Slower Ball Velocity',
  85. command = self.slower_ball_velocity)
  86. edit.add_command(label = 'Faster Ball Velocity',
  87. command = self.faster_ball_velocity)
  88. #edit.add_command(label = 'Change Background',
  89. #command = self.change_background)
  90. menu.add_cascade(label = 'Configure', menu = edit)
  91.  
  92. def init_bindings(self):
  93. self.master.bind('<KeyPress-Up>', self.move_player_two)
  94. self.master.bind('<KeyPress-Down>', self.move_player_two)
  95. self.master.bind('<KeyPress-Left>', self.move_player_two)
  96. self.master.bind('<KeyPress-Right>', self.move_player_two)
  97. self.master.bind('<KeyPress-w>', self.move_player_two)
  98. self.master.bind('<KeyPress-s>', self.move_player_two)
  99. self.master.bind('<KeyPress-a>', self.move_player_two)
  100. self.master.bind('<KeyPress-d>', self.move_player_two)
  101. self.master.bind('<B1-Motion>', self.move_player_one)
  102. self.master.bind_all(self.animate_pong_ball)
  103.  
  104. def new_velocity(self):
  105. self.pong_dx = random.randint(5, 15)
  106. self.pong_dy = random.randint(5, 10)
  107.  
  108. def slower_ball_velocity(self):
  109. self.pong_dx = self.pong_dx / 2
  110. self.pong_dy = self.pong_dy / 2
  111.  
  112. def faster_ball_velocity(self):
  113. self.pong_dx = self.pong_dx * 2
  114. self.pong_dy = self.pong_dy * 2
  115.  
  116. def negate_chronos(self):
  117. time.sleep(0)
  118.  
  119. def chronos(self):
  120. time.sleep(1000)
  121.  
  122. def resize_paddles(self, image):
  123. original = Image.open(image)
  124. resized = original.resize((paddle_width, paddle_height),
  125. Image.ANTIALIAS)
  126. new_image = ImageTk.PhotoImage(resized)
  127.  
  128. return new_image
  129.  
  130. def client_exit(self):
  131. exit()
  132.  
  133. def move_player_one(self, event):
  134.  
  135. x1, y1 = self.C1.coords(self.paddle_1)
  136. x2 = self.C1.canvasx(event.x)
  137. y2 = self.C1.canvasy(event.y)
  138. self.C1.move(self.paddle_1, x2 - x1, y2 - y1)
  139.  
  140. def move_player_two(self, event):
  141.  
  142. DX = 10
  143. DY = 10
  144.  
  145. if event.keysym == 'Up':
  146. self.C1.move(self.paddle_2, 0, -DY)
  147. elif event.keysym == 'Down':
  148. self.C1.move(self.paddle_2, 0, DY)
  149. elif event.keysym == 'Right':
  150. self.C1.move(self.paddle_2, DX, 0)
  151. elif event.keysym == 'Left':
  152. self.C1.move(self.paddle_2, -DX, 0)
  153. elif event.keysym == 'w':
  154. self.C1.move(self.paddle_2, 0, -DY)
  155. elif event.keysym == 's':
  156. self.C1.move(self.paddle_2, 0, DY)
  157. elif event.keysym == 'a':
  158. self.C1.move(self.paddle_2, -DX, 0)
  159. else:
  160. self.C1.move(self.paddle_2, DX, 0)
  161.  
  162. def animate_pong_ball(self):
  163. self.C1.move(self.animated_ball, self.pong_dx, self.pong_dy)
  164. x1, y1 = self.C1.coords(self.animated_ball)
  165. if x1 <= 0:
  166. self.pong_dx *= -1
  167. elif x1 > WINDOW_WIDTH / 2:
  168. self.pong_dx *= -1
  169. if y1 <= 0:
  170. self.pong_dy *= -1
  171. elif y1 > WINDOW_HEIGHT:
  172. self.pong_dy *= -1
  173.  
  174. def detect_collisions(self):
  175.  
  176. p1_x, p1_y = self.C1.coords(self.paddle_1)
  177. p2_x, p2_y = self.C1.coords(self.paddle_2)
  178. b_x, b_y = self.C1.coords(self.animated_ball)
  179.  
  180. if p1_x == b_x or p2_x == b_x:
  181. self.pong_dx *= -1
  182. if p1_y == b_y or p2_y == b_y:
  183. self.pong_dy *= -1
  184. root = Tk()
  185. root.geometry(GEOMETRY_STRING)
  186.  
  187. pong_app = Pong(root)
  188. pong_app.pack()
  189. pong_app.animate_pong_ball()
  190.  
  191. for x in range(100000):
  192. time.sleep(0.025)
  193. pong_app.animate_pong_ball()
  194. pong_app.detect_collisions()
  195. pong_app.C2.update()
  196. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement