Browse Source

Hinzufuegen der Kommentare, letzte Anpassungen

Kristin 7 years ago
parent
commit
5cd0a5c348
1 changed files with 80 additions and 78 deletions
  1. 80 78
      pingpong.py

+ 80 - 78
pingpong.py

@@ -4,8 +4,9 @@
4 4
 # letzte Aenderung: 25.07.2017
5 5
 
6 6
 
7
-#-----------------------------------------------------------------
7
+# -------------------------------------------------------------------------------
8 8
 # Import der einzelnen Module
9
+
9 10
 import random
10 11
 import time
11 12
 from Tkinter import *
@@ -13,7 +14,7 @@ import os
13 14
 import sys
14 15
 
15 16
 
16
-#----------------------------------------------------------------
17
+# -------------------------------------------------------------------------------
17 18
 # Funktion fuer den Neustart des Programms
18 19
 
19 20
 def restart_program():
@@ -21,7 +22,7 @@ def restart_program():
21 22
     os.execl(python, python, * sys.argv)
22 23
 
23 24
 
24
-#----------------------------------------------------------------
25
+# -------------------------------------------------------------------------------
25 26
 # Eigenschaften des Balles definieren
26 27
 
27 28
 class Ball():
@@ -30,12 +31,12 @@ class Ball():
30 31
 
31 32
 	self.canvas = canvas
32 33
 	self.paddle = paddle
33
-	self.id = canvas.create_oval(15, 15, size, size, fill=color)
34
-	self.canvas.move(self.id, 245, 100)
35
-	self.xspeed = random.randrange(-3,3)
36
-	self.yspeed = -1
37
-	self.hit_bottom = False
38
-	self.score = 0
34
+	self.id = canvas.create_oval(15, 15, size, size, fill=color)		# Groesse des Balles und Farbe
35
+	self.canvas.move(self.id, 245, 100)					# Bewegung des Balles im Spielfeld definieren
36
+	self.xspeed = random.randrange(-4,4)					# waagerechte Geschwindigkeit des Balles - links und rechts Wert 3
37
+	self.yspeed = -2							# senkrechte Geschwindigkeit des Balles - Wert 1
38
+	self.hit_bottom = False							# Definition Ball beruehrt nicht den Boden
39
+	self.score = 0 								# Punkte starten bei Null
39 40
 
40 41
     def draw(self):
41 42
 
@@ -43,36 +44,37 @@ class Ball():
43 44
 	pos = self.canvas.coords(self.id)
44 45
 
45 46
         if pos[0] <= 0:
46
-            self.xspeed = 3
47
+            self.xspeed = 4							# Ball beruehrt den linken Rand und hat danach v = 3
47 48
 
48 49
 	if pos[1] <= 0:
49
-	    self.yspeed = 3
50
+	    self.yspeed = 4                                                     # Ball beruehrt den oberen Rand und hat danach v = 3
50 51
 
51 52
 	if pos[2] >= 500:
52
-	    self.xspeed = -3
53
+	    self.xspeed = -4                                                    # Ball beruehrt den rechten Rand und hat danach v = (-)3 (wegen Bewegungsrichtung nach links)
53 54
 
54 55
 	if pos[3] >= 400:
55
-	    self.hit_bottom = True
56
+	    self.hit_bottom = True                                              # Ball beruehrt den unteren - Switch zum definierten Ereignis
57
+
58
+	if self.hit_paddle(pos) == True:					# Ball trifft auf das Paddle
59
+	    self.yspeed = -4							# senkrechte Geschwindigkeit ist (-)3 (wegen Bewegungsrichtung nach oben)
60
+	    self.xspeed = random.randrange(-4,4)                                # waagerechte Geschwindigkeit ist 3 oder -3 (ja nach Bewegungsrichtung)
56 61
 
57
-	if self.hit_paddle(pos) == True:
58
-	    self.yspeed = -3
59
-	    self.xspeed = random.randrange(-3,3)
60
-	    self.score += 1
62
+	    self.score += 1							# Erhoehung des Punktestandes um 1 bei Auftreffen auf das Paddle
61 63
 
62
-    def hit_paddle(self, pos):
64
+    def hit_paddle(self, pos):							# Definition Auftreffen des Balles auf das Paddle
63 65
 
64 66
 	paddle_pos = self.canvas.coords(self.paddle.id)
65 67
 
66
-	if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:
68
+	if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:			# 
67 69
 
68
-	    if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:
70
+	    if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:		#
69 71
 
70
-		return True
72
+		return True							# wenn Ball und Paddle sich Koordinaten teilen (Ball beruehrt nicht den Boden), verfahre nach while-Schleife (ganz unten)
71 73
 
72
-	return False
74
+	return False								# wenn Ball und Paddle sich keine Koordinaten teilen (Ball beruehrt den Boden), verfahre nach while-Schleife (ganz unten)
73 75
 
74 76
 
75
-#---------------------------------------------------------------------------
77
+# -------------------------------------------------------------------------------
76 78
 # Eigenschaften des Paddles definieren
77 79
 
78 80
 class Paddle:
@@ -80,11 +82,11 @@ class Paddle:
80 82
     def __init__(self, canvas, color):
81 83
 
82 84
 	self.canvas = canvas
83
-	self.id = canvas.create_rectangle(0, 0, 100, 10, fill=color)
84
-	self.canvas.move(self.id, 200, 300)
85
-	self.xspeed = 0
86
-	self.canvas.bind_all('<KeyPress-Left>', self.move_left)
87
-        self.canvas.bind_all('<KeyPress-Right>', self.move_right)
85
+	self.id = canvas.create_rectangle(0, 0, 100, 10, fill=color)		# Groesse und Farbe des Paddles
86
+	self.canvas.move(self.id, 200, 300)					# Startposition des Paddles
87
+	self.xspeed = 0								# Startgeschwindigkeit ist Null
88
+	self.canvas.bind_all('<KeyPress-Left>', self.move_left)			# linke Pfeiltaste - Bewegung nach links
89
+        self.canvas.bind_all('<KeyPress-Right>', self.move_right)		# rechte Pfeiltaste - Bewegung nach rechts
88 90
 
89 91
 
90 92
     def draw(self):
@@ -93,112 +95,112 @@ class Paddle:
93 95
 	pos = self.canvas.coords(self.id)
94 96
 
95 97
 	if pos[0] <= 0:
96
-	    self.xspeed = 0
98
+	    self.xspeed = 0                                                     # Paddle beruehrt linken Rand - v = 0
99
+
97 100
 
98 101
 	if pos[2] >= 500:
99
-	    self.xspeed = 0
102
+	    self.xspeed = 0                                                     # Paddle beruehrt rechten Rand - v = 0
100 103
 
101 104
 
102 105
     def move_left(self, evt):
103
-	self.xspeed = -5
106
+	self.xspeed = -7							# Paddle bewegt sich nach links mit v = 5
104 107
 
105 108
     def move_right(self, evt):
106
-	self.xspeed = 5
109
+	self.xspeed = 7 							# Paddle bewegt sich nach rechts mit v = 5
107 110
 
108 111
 
109
-#----------------------------------------------------------------------------
112
+# -------------------------------------------------------------------------------
110 113
 # Spieloberflaeche
111 114
 
112
-
113 115
 tk = Tk()
114
-tk.title("Superfantastisches Ping-Pong-Spiel")
115
-canvas = Canvas(tk, width=500, height=400, bd=3, bg='pink')
116
+tk.title("Superfantastisches Pink-Pong-Spiel")					# Titel des Spiels
117
+canvas = Canvas(tk, width=500, height=400, bd=3, bg='pink')			# Erstellen der Spieloberflaeche - Masse, Rand und Farbe
116 118
 canvas.pack()
117
-label = canvas.create_text(10, 10, anchor=NW, text="Punktestand: 0")
118
-tk.update()
119
-paddle = Paddle(canvas, 'black')
120
-ball = Ball(canvas, 'white', 25, paddle)
119
+label = canvas.create_text(10, 10, anchor=NW, text="Punktestand: 0")		# Label Punktestand oben links einfuegen
120
+tk.update()									# Punktestand wird aktualisiert
121
+paddle = Paddle(canvas, 'black')						# Paddle-Farbe
122
+ball = Ball(canvas, 'white', 25, paddle)					# Groesse und Farbe des Balles
121 123
 
122 124
 
123
-neustart_button = Button(tk, text="Neues Spiel", command=restart_program)
125
+neustart_button = Button(tk, text="Neues Spiel", command=restart_program)	# Button Neues Spiel erstellen
124 126
 neustart_button.pack()
125
-start_button = Button(tk, text="Spiel starten", command=tk.quit)
127
+
128
+start_button = Button(tk, text="Spiel starten", command=tk.quit)		# Button Spiel starten erstellen
126 129
 start_button.pack()
127
-#   Button(master, text='Liste', command=oeffnen).grid(row=3, column=3, sticky=W, pady=4)
128 130
 
129
-exit_button = Button(tk, text='Spiel beenden', command=tk.destroy)
131
+exit_button = Button(tk, text='Spiel beenden', command=tk.destroy)		# Button Spiel beenden erstellen
130 132
 exit_button.pack()
131 133
 
132 134
 
133 135
 tk.mainloop()
134 136
 
137
+
138
+# -------------------------------------------------------------------------------
139
+
135 140
 def button_action():
136 141
     anweisungs_label.config()
137 142
 
138 143
 
139
-#-------------------------------------------------------------------------
144
+# -------------------------------------------------------------------------------
140 145
 # Namenseingabe
141 146
 
142
-
143 147
 def anzeige():
144 148
 
145 149
    def show_entry_fields():
146 150
 
147
-      a = e1.get()     
148
-      print("Name: ", a)
151
+      a = e1.get()     								# Neudefinition der Variable - einfacher
152
+      print("Name: ", a)							# Anzeigen des Namens in Python
149 153
 
150
-      tupel = [a, str(ball.score)]
151
-      tupel = str(tupel)
152
-      hsin = open("highscore.txt", "a")
153
-      hsout = hsin.write(tupel + "\n")
154
-      hsin.close
154
+      tupel = [a, str(ball.score)]						# Tupel mit Name und Punktzahl erstellen
155
+      tupel = str(tupel)							# Tupel in String umwandeln
156
+      hsin = open("highscore.txt", "a")						# Textdatei oeffnen
157
+      hsout = hsin.write(tupel + "\n")						# Tupel zeilenweise in Textdatei schreiben
158
+      hsin.close								# Textdatei schliessen
155 159
 
156 160
    def highscore():
157 161
 
158 162
       master = Tk()
159
-      master.title("Highscore-Liste")
160
-      canvas = Canvas(master, width=200, height=400, bd=2, bg='white')
163
+      master.title("Highscore-Liste")						# Titel des Highscore-Fensters
164
+      canvas = Canvas(master, width=200, height=400, bd=2, bg='white')		# Groesse und Farbe des Fensters
161 165
       canvas.pack()
162 166
 
163
-      blub = "Name                    Punkte" 
164
-      lese = open("highscore.txt", "r")                       #textdatei oeffnen
165
-      ausgeben = lese.read()                                  #textdatei lesen
166
-      lese.close()
167
+      zeige = "Name        Punkte" 						# Definition des Inhalts eines Labels
168
+      lese = open("highscore.txt", "r")                      			# Textdatei oeffnen
169
+      ausgeben = lese.read()                                 			# Textdatei lesen
170
+      lese.close()								# Textdatei schliessen
167 171
 
168
-      label = canvas.create_text(5, 5, anchor=NW, text=blub)
172
+      label = canvas.create_text(5, 5, anchor=NW, text=zeige)			# Label einfuegen
169 173
       tk.update()
170
-      label = canvas.create_text(5, 5, anchor=NW, text=ausgeben)
171
-
172
-
173
-#      mainloop()
174
+      label = canvas.create_text(5, 5, anchor=NW, text=ausgeben)		# Label mit Inhalt der Textdatei einfuegen
174 175
 
175 176
 
176 177
    master = Tk()
177
-   master.title("Namen eingeben")
178
-   e1 = Entry(master)
179
-   e1.grid(row=0, column=1)
180
-   Button(master, text='Ok', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)
181
-   Button(master, text='Zurueck', command=master.destroy).grid(row=3, column=3, sticky=W, pady=4)
182
-   Button(master, text='Highscore', command=highscore).grid(row=3, column=2, sticky=W, pady=4)
178
+   master.title("Namen eingeben")						# Fenster zur Namenseingabe
179
+   e1 = Entry(master)								# Feld, um Namen einzutippen
180
+   e1.grid(row=0, column=1)							# Formation des Feldes
181
+
182
+   Button(master, text='Ok', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)			# Button Ok definieren, der den Namen unter dem angezeigten Punktestand in Python anzeigt
183
+   Button(master, text='Zurueck', command=master.destroy).grid(row=3, column=3, sticky=W, pady=4)		# Button Zurueck definieren, der das Namenseingabe-Fenster schliesst
184
+   Button(master, text='Highscore', command=highscore).grid(row=3, column=2, sticky=W, pady=4)			# Button Highscore definieren, wo die Highscore-Liste angezeigt wird
183 185
 
184 186
    mainloop()
185 187
 
186 188
 
187
-#--------------------------------------------------------------------------
189
+# -------------------------------------------------------------------------------
188 190
 # Schleife fuer das fortlaufende Bewegen des Balles
189 191
 
190
-while ball.hit_bottom == False:
192
+while ball.hit_bottom == False:							# Schleife: solange der Ball nicht den Boden beruehrt
191 193
 
192
-    ball.draw()
193
-    paddle.draw()
194
-    canvas.itemconfig(label, text="Punktestand: "+str(ball.score))
194
+    ball.draw()									# Zugriff auf obige Definition
195
+    paddle.draw()								# Zugriff auf obige Definition
196
+    canvas.itemconfig(label, text="Punktestand: "+str(ball.score))		# Label mit Punktestand einfuegen, dahinter aktualisierter Punktestand
195 197
     tk.update_idletasks()
196 198
     tk.update()
197
-    time.sleep(0.01)
199
+    time.sleep(0.01)								# Verzoegerung des Balles
198 200
 
199
-print "Punktestand: ", ball.score
201
+print "Punktestand: ", ball.score						# Punktestand in Python printen
200 202
 
201 203
 if ball.hit_bottom == True:
202 204
 
203
-    anzeige()
205
+    anzeige()									# wenn der Ball den Boden beruehrt, Inhalt der Definition Anzeige ausfuehren
204 206