Ein GUI(Tkinter) basiertes Programm für ein einfaches Ping-Pong-Spiel. Die Steuerung des Paddles soll mittel der Tastatur erfolgen.

PingPong.py 8.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #Einfaches Ping-Pong Spiel basier auf GUI(Tkinter)
  2. #Authors : Milad Shirvani Filabadi, Kai Zhang,Yuan Wei
  3. #15.11.2017
  4. #Hier sind erstmal gesamte schritte für das Programm.
  5. #Stufe 1 - Eigenschaften und Funktionen der Ball definieren
  6. #Class der Ball und Funktionen wurde in dieser Stufe difiniert.
  7. #Stufe 2 - Eigenschaften und Funktionen der Paddle definieren
  8. #Stufe 3 - Fenster und canvas erstellen für zeichnen
  9. #Stufe 4 - Animation Schleife
  10. #Stufe 5 - Game Over
  11. #hier sind die Modoule, die wir wind for das Programm brachen und muss während der Programm abgerufen werden.
  12. from tkinter import *
  13. import random
  14. import time
  15. # Eigenschaften und Funktionen der Ball definieren
  16. #Class von Ball wurde hier definiert und dann in der ball Class sind Objecte
  17. #und Eigenschaften und auch Funktionen der Ball definierte.
  18. #init-mthode ist hier benutzt.
  19. #init-methode installiert die erstellte Objecte.
  20. class Ball:
  21. def __init__(self, canvas, farbe, groesse, paddle):
  22. self.canvas = canvas
  23. self.paddle = paddle
  24. self.id = canvas.create_oval(10, 10, groesse, groesse, fill=farbe)
  25. self.canvas.move(self.id, 245, 100)
  26. self.xspeed = random.randrange(-3,3)# x-ache Geschwindigkeit random
  27. self.yspeed = -1 #y-ache Geschwindigkeit
  28. self.hit_bottom = False
  29. self.score = 0
  30. #hier wurde Die Bewegung des Balls definiert.In welche richtung das Ball bewegen sollen muss.
  31. def draw(self):
  32. self.canvas.move(self.id, self.xspeed, self.yspeed)
  33. pos = self.canvas.coords(self.id) #ball koordination ,data speichern
  34. if pos[1] <= 0:# wenn ball oberreseite trifft, wird nach unter
  35. self.yspeed = 3 # Geschwindigkeit von oben nach unten
  36. if pos[3] >= 400:# wenn ball unterseite trifft , dann wird spiel beenden.
  37. self.hit_bottom = True
  38. if pos[0] <= 0: #:#wenn ball gegen linksseite ,pos[0] nach rechts
  39. self.xspeed = 3
  40. if pos[2] >= 500:#wennn ball gegen rechtsseite, nach links
  41. self.xspeed = -3
  42. if self.hit_paddle(pos) == True:
  43. self.yspeed = -3
  44. self.xspeed = random.randrange(-3,3)
  45. self.score = self.score + 1
  46. #Definition von dem Ball wenn trifft Paddle.
  47. #hier wird so defeniert wenn die koordination von Ball trifft koordination
  48. #von Paddle ls
  49. def hit_paddle(self, pos):
  50. paddle_pos = self.canvas.coords(self.paddle.id)
  51. if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
  52. if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
  53. return True
  54. return False
  55. # Eigenschaften und Funktionen der Paddle definieren
  56. ##Class von paddle wurde hier definiert und dann in der paddle Class sind Objecte
  57. class Paddle:
  58. def __init__(self, canvas, farbe):
  59. self.canvas = canvas
  60. self.id = canvas.create_rectangle(0,0, 100, 10, fill=farbe)
  61. self.canvas.move(self.id, 200, 300)
  62. self.xspeed = 0
  63. self.canvas.bind_all('<KeyPress-Left>', self.move_left)
  64. self.canvas.bind_all('<KeyPress-Right>', self.move_right)
  65. #
  66. def draw(self):
  67. self.canvas.move(self.id, self.xspeed, 0)
  68. pos = self.canvas.coords(self.id)
  69. #wenn Paddle trift rechte oder linke seite der Wand wurde dann hier Geschwindigkeit
  70. #null defeniert
  71. if pos[0] <= 0:
  72. self.xspeed = 0
  73. if pos[2] >= 500:
  74. self.xspeed = 0
  75. #Padlle Bewegung und geschwindigkeit der Paddle
  76. def move_left(self, evt):
  77. self.xspeed = -2
  78. def move_right(self, evt):
  79. self.xspeed = 2
  80. # Fenster und canvas erstellen für zeichnen
  81. # name des Spiels
  82. # Ballsfarbe,paddlesfarbe und Hintergrundsfarbe
  83. # ball groesse
  84. tk = Tk()
  85. tk.title("Ping-Pong Spiel")
  86. canvas = Canvas(tk, width=500, he#Einfaches Ping-Pong Spiel basier auf GUI(Tkinter)
  87. #Authors : Milad Shirvani Filabadi, Kai Zhang,Yuan Wei
  88. #15.11.2017
  89. #Hier sind erstmal gesamte schritte für das Programm.
  90. #Stufe 1 - Eigenschaften und Funktionen der Ball definieren
  91. #Class der Ball und Funktionen wurde in dieser Stufe difiniert.
  92. #Stufe 2 - Eigenschaften und Funktionen der Paddle definieren
  93. #Stufe 3 - Fenster und canvas erstellen für zeichnen
  94. #Stufe 4 - Animation Schleife
  95. #Stufe 5 - Game Over
  96. #hier sind die Modoule, die wir wind for das Programm brachen und muss während der Programm abgerufen werden.
  97. from tkinter import *
  98. import random
  99. import time
  100. # Eigenschaften und Funktionen der Ball definieren
  101. #Class von Ball wurde hier definiert und dann in der ball Class sind Objecte
  102. #und Eigenschaften und auch Funktionen der Ball definierte.
  103. #init-mthode ist hier benutzt.
  104. #init-methode installiert die erstellte Objecte.
  105. class Ball:
  106. def __init__(self, canvas, farbe, groesse, paddle):
  107. self.canvas = canvas
  108. self.paddle = paddle
  109. self.id = canvas.create_oval(10, 10, groesse, groesse, fill=farbe)
  110. self.canvas.move(self.id, 245, 100)
  111. self.xspeed = random.randrange(-3,3)# x-ache Geschwindigkeit random
  112. self.yspeed = -1 #y-ache Geschwindigkeit
  113. self.hit_bottom = False
  114. self.score = 0
  115. #hier wurde Die Bewegung des Balls definiert.In welche richtung das Ball bewegen sollen muss.
  116. def draw(self):
  117. self.canvas.move(self.id, self.xspeed, self.yspeed)
  118. pos = self.canvas.coords(self.id) #ball koordination ,data speichern
  119. if pos[1] <= 0:# wenn ball oberreseite trifft, wird nach unter
  120. self.yspeed = 3 # Geschwindigkeit von oben nach unten
  121. if pos[3] >= 400:# wenn ball unterseite trifft , dann wird spiel beenden.
  122. self.hit_bottom = True
  123. if pos[0] <= 0: #:#wenn ball gegen linksseite ,pos[0] nach rechts
  124. self.xspeed = 3
  125. if pos[2] >= 500:#wennn ball gegen rechtsseite, nach links
  126. self.xspeed = -3
  127. if self.hit_paddle(pos) == True:
  128. self.yspeed = -3
  129. self.xspeed = random.randrange(-3,3)
  130. self.score = self.score + 1
  131. #Definition von dem Ball wenn trifft Paddle.
  132. #hier wird so defeniert wenn die koordination von Ball trifft koordination
  133. #von Paddle ls
  134. def hit_paddle(self, pos):
  135. paddle_pos = self.canvas.coords(self.paddle.id)
  136. if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
  137. if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
  138. return True
  139. return False
  140. # Eigenschaften und Funktionen der Paddle definieren
  141. ##Class von paddle wurde hier definiert und dann in der paddle Class sind Objecte
  142. class Paddle:
  143. def __init__(self, canvas, farbe):
  144. self.canvas = canvas
  145. self.id = canvas.create_rectangle(0,0, 100, 10, fill=farbe)
  146. self.canvas.move(self.id, 200, 300)
  147. self.xspeed = 0
  148. self.canvas.bind_all('<KeyPress-Left>', self.move_left)
  149. self.canvas.bind_all('<KeyPress-Right>', self.move_right)
  150. #
  151. def draw(self):
  152. self.canvas.move(self.id, self.xspeed, 0)
  153. pos = self.canvas.coords(self.id)
  154. #wenn Paddle trift rechte oder linke seite der Wand wurde dann hier Geschwindigkeit
  155. #null defeniert
  156. if pos[0] <= 0:
  157. self.xspeed = 0
  158. if pos[2] >= 500:
  159. self.xspeed = 0
  160. #Padlle Bewegung und geschwindigkeit der Paddle
  161. def move_left(self, evt):
  162. self.xspeed = -2
  163. def move_right(self, evt):
  164. self.xspeed = 2
  165. # Fenster und canvas erstellen für zeichnen
  166. # name des Spiels
  167. # Ballsfarbe,paddlesfarbe und Hintergrundsfarbe
  168. # ball groesse
  169. tk = Tk()
  170. tk.title("Ping-Pong Spiel")
  171. canvas = Canvas(tk, width=500, height=400, bd=0, bg='green')
  172. canvas.pack()pingpong
  173. label = canvas.create_text(5, 5, anchor=NW, text="Punkt: 0")
  174. tk.update() # update date
  175. paddle = Paddle(canvas, 'blue')
  176. ball = Ball(canvas, 'red', 25, paddle)
  177. # Animation Schleife
  178. # hier wird programm durchgeführt
  179. while ball.hit_bottom == False:
  180. ball.draw()
  181. paddle.draw()
  182. canvas.itemconfig(label, text="Punkt: "+str(ball.score))
  183. tk.update_idletasks()
  184. tk.update()
  185. time.sleep(0.01)
  186. # Game Over Wenn das Ball der Paddle nicht trifft wird Spiel beenden.
  187. #ein Text wird gezeigt nach dem Ende des Spiels.Größe und Font der Text sind hier definiert.
  188. go_label = canvas.create_text(250,200,text="GAME OVER",font=("Helvetica",30))
  189. #(Position x, position y, Textinhalt ,Type, Groesse)
  190. tk.update()
  191. ight=400, bd=0, bg='green')
  192. canvas.pack()pingpong
  193. label = canvas.create_text(5, 5, anchor=NW, text="Punkt: 0")
  194. tk.update() # update date
  195. paddle = Paddle(canvas, 'blue')
  196. ball = Ball(canvas, 'red', 25, paddle)
  197. # Animation Schleife
  198. # hier wird programm durchgeführt
  199. while ball.hit_bottom == False:
  200. ball.draw()
  201. paddle.draw()
  202. canvas.itemconfig(label, text="Punkt: "+str(ball.score))
  203. tk.update_idletasks()
  204. tk.update()
  205. time.sleep(0.01)
  206. # Game Over Wenn das Ball der Paddle nicht trifft wird Spiel beenden.
  207. #ein Text wird gezeigt nach dem Ende des Spiels.Größe und Font der Text sind hier definiert.
  208. go_label = canvas.create_text(250,200,text="GAME OVER",font=("Helvetica",30))
  209. #(Position x, position y, Textinhalt ,Type, Groesse)
  210. tk.update()