Ping Pong

Einstieg in die Programmierung mit PyGame

Ello 👋

ich bin Maylis (sie/ihr)
  • Studentin
  • Nerd
  • Animefan
  • Computer Enthusiastin

Wie heißt und welche Pronomen verwendet ihr?

Wie heißt und welche Pronomen verwendet ihr?

Was macht ihr gerne?

Wie heißt und welche Pronomen verwendet ihr?

Was macht ihr gerne?

Was interessiert euch am Programmieren besonders?

Wie heißt und welche Pronomen verwendet ihr?

Welche Erwartungen habt ihr?

Was macht ihr gerne?

Was interessiert euch am Programmieren besonders?

Bevor wir anfangen

Die PrÀsentation gibt es auf:

https://maytastix.de/pygame

Okay let's go

Entspannt anfangen

Was brauchen wir um ein Fenster darzustellen?

							# pygame in unser Projekt hinzufĂŒgen
							import pygame
						

							# pygame in unser Projekt hinzufĂŒgen
							import pygame

							# pygame setup
							pygame.init()
							screen = pygame.display.set_mode((1280, 720))
							clock = pygame.time.Clock()
							running = True
						

							# pygame in unser Projekt hinzufĂŒgen
							import pygame

							# pygame setup
							pygame.init()
							screen = pygame.display.set_mode((1280, 720))
							clock = pygame.time.Clock()
							running = True

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False

								pygame.display.flip()
							
								clock.tick(60)
							pygame.quit()
						
Klappts?

Super

Sieht langweilig
aus oder?

Wie wÀrs mit Farbe?

Dem Fenster eine Hintergrundfarbe geben



							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False

								pygame.display.flip()
							
								clock.tick(60)
							pygame.quit()
						

Der obere Teil wird einmal ausgefĂŒhrt wĂ€hrend der untere Teil die ganze Zeit ausgefĂŒhrt wird


							# Code der einmal aufgefĂŒhrt wird

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False
								
								# Code der immer lÀuft
								
								pygame.display.flip()
							
								clock.tick(60)
							pygame.quit()
						

screen.fill("red") fÀrbt eine ganze FlÀche mit einer Farbe ein


						# Code der einmal aufgefĂŒhrt wird

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False
										
								# Code der immer lÀuft
								screen.fill("red")

								pygame.display.flip()
							
								clock.tick(60)
							pygame.quit()
						

							# Code der einmal aufgefĂŒhrt wird

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False
								
								# Code der immer lÀuft
								screen.fill("blue")

								pygame.display.flip()
							
								clock.tick(60)
							pygame.quit()
						

Mehr Farben:

https://www.pygame.org/docs/ref/color_list.html?highlight=colors

Habt ihr Spaß?

Bisschen Spaß mit Farben und dann geht es weiter mit Formen.

Bereit fĂŒr Formen?

Erstmal easy Formen, dann wirds bissl cooler đŸ˜±


								# Code der einmal aufgefĂŒhrt wird

								while running:
									for event in pygame.event.get():
										if event.type == pygame.QUIT:
											running = False
									
									# Code der immer lÀuft
									screen.fill("black")
									pygame.draw.rect(screen, "brown" , (100, 250, 75,75))
									pygame.draw.rect(screen, "brown" , (100, 250, 75,75), 4)
									pygame.draw.circle(screen, "red" , (300, 250), 75)    
									pygame.draw.polygon(screen, "green", ((400,325),(500,325), (450 , 100)))
									pygame.draw.ellipse(screen, "violet" , (550, 250, 75,100))

									pygame.display.flip()
								
									clock.tick(60)
								pygame.quit()
							

So siehts dann aus

Wie funktionieren Koordinaten in 2 Dimensionen?

Zeichnen von komplexeren Strukturen


									# Code der einmal aufgefĂŒhrt wird

									while running:
										for event in pygame.event.get():
											if event.type == pygame.QUIT:
												running = False
										
										pygame.display.flip()
									
										clock.tick(60)
									pygame.quit()
								

Erstmal eine neue Klasse anlegen


								# Code der einmal aufgefĂŒhrt wird
								class Ball(pygame.sprite.Sprite):
									def __init__(self, x, y, radius) :
										#                            grĂ¶ĂŸe der FlĂ€che      hintergrund
										self.surface = pygame.Surface((radius*2, radius*2), pygame.SRCALPHA)

										#                ZeichenflÀche   Farbe       Position     Radius
										pygame.draw.circle(self.surface, "red", (radius, radius), radius)

										#Rechteck der ZeichenflÀche
										self.rect = self.surface.get_rect()
										self.rect.centerx = x
										self.rect.centery = y

								#Zeichnet das Object
								def draw(self, surface):
									surface.blit(self.surface, self.rect)		

								while running:
									for event in pygame.event.get():
										if event.type == pygame.QUIT:
											running = False
									
									pygame.display.flip()
								
									clock.tick(60)
								pygame.quit()
							

Eine Klasse muss dann angelegt werden


							# Code der einmal aufgefĂŒhrt wird
							class Ball(pygame.sprite.Sprite):
								def __init__(self, x, y, radius) :
									#                            grĂ¶ĂŸe der FlĂ€che      hintergrund
									self.surface = pygame.Surface((radius*2, radius*2), pygame.SRCALPHA)

									#                ZeichenflÀche   Farbe       Position     Radius
									pygame.draw.circle(self.surface, "red", (radius, radius), radius)

									#Rechteck der ZeichenflÀche
									self.rect = self.surface.get_rect()
									self.rect.centerx = x
									self.rect.centery = y

							#Zeichnet das Object
							def draw(self, surface):
								surface.blit(self.surface, self.rect)		

							#Erstellt ein neues Kreisrundes Object in der Mitte vom Bildschirm
							ball = Ball(screen.get_width()/2, screen.get_height()/2, 40)

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False
								
								pygame.display.flip()
							
								clock.tick(60)
							pygame.quit()
						

Dann können wir sie Zeichnen


							# Code der einmal aufgefĂŒhrt wird
							class Ball(pygame.sprite.Sprite):
								def __init__(self, x, y, radius) :
									#                            grĂ¶ĂŸe der FlĂ€che      hintergrund
									self.surface = pygame.Surface((radius*2, radius*2), pygame.SRCALPHA)

									#                ZeichenflÀche   Farbe       Position     Radius
									pygame.draw.circle(self.surface, "red", (radius, radius), radius)

									#Rechteck der ZeichenflÀche
									self.rect = self.surface.get_rect()
									self.rect.centerx = x
									self.rect.centery = y

							#Zeichnet das Object
							def draw(self, surface):
								surface.blit(self.surface, self.rect)		

							#Erstellt ein neues Kreisrundes Object in der Mitte vom Bildschirm
							ball = Ball(screen.get_width()/2, screen.get_height()/2, 40)

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False
								
								#Malt das Kreisrunde Objekt
								ball.draw(screen)

								pygame.display.flip()
							
								clock.tick(60)
							pygame.quit()
						

Frage an euch

Wie verÀndere ich die Position vom Kreis?

Anschließend wie verĂ€ndere ich die Farbe?

Und kann ich die Farbe auch von außen Ă€ndern?

							
						class Ball(pygame.sprite.Sprite):

						def __init__(self, x, y, radius, color) :
							#                            grĂ¶ĂŸe der FlĂ€che      hintergrund
							self.surface = pygame.Surface((radius*2, radius*2), pygame.SRCALPHA)

							#                ZeichenflÀche   Farbe       Position     Radius
							pygame.draw.circle(self.surface, color, (radius, radius), radius)

							#Rechteck der ZeichenflÀche
							self.rect = self.surface.get_rect()
							self.rect.centerx = x
							self.rect.centery = y
							self.color = color

						#Zeichnet das Object
						def draw(self, surface):
							surface.blit(self.surface, self.rect)

						#Erstellt ein neues Kreisrundes Object in der Mitte vom Bildschirm
						ball = Ball(50, 80, 40, "blue")
						

Jetzt habt ihr euch aber eine Pause verdient

Wie ist gerade euer Energielevel? 🔋

Genug Pause?

WĂ€re es eigentlich cool
wenn sich der Kreis bewegt?

Willkommen zu Objekte mit der Tastatur bewegen

Erstmal wie verĂ€ndere ich eine Position von außen?

							
							ball = Ball(50, 80, 40, "blue")

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False

								ball.rect.centerx = 500
								ball.rect.centery = 300
						
								ball.draw(screen)

								pygame.display.flip()

								clock.tick(60)
							pygame.quit()
							

Wie frage ich eine Taste ab?

							
							ball = Ball(50, 80, 40, "blue")

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False

								keys = pygame.key.get_pressed()
								if keys[pygame.K_UP]:
									ball.rect.centerx = 500
									ball.rect.centery = 300
							
								ball.draw(screen)

								pygame.display.flip()

								clock.tick(60)
							pygame.quit()
							

Wenn ich jetzt drĂŒcke
bewegt sich mein Kreis aufeinmal woanders hin.

Aber wie kann ich den Kreis
von seiner aktuellen Position aus bewegen?

Indem ich auf entweder das x oder das y eine Zahl addiere oder subtrahiere

							
							ball = Ball(50, 80, 40, "blue")

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False

								keys = pygame.key.get_pressed()
								if keys[pygame.K_UP]:
									ball.rect.centery -= 1
							
								ball.draw(screen)

								pygame.display.flip()

								clock.tick(60)
							pygame.quit()
						

Um weitere Tasten abzufragen fĂŒge ich ein weiteres if ein

							
							ball = Ball(50, 80, 40, "blue")

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False

								keys = pygame.key.get_pressed()
								if keys[pygame.K_UP]:
									ball.rect.centery += 1
								if keys[pygame.K_DOWN]:
									ball.rect.centery -= 1
							
								ball.draw(screen)

								pygame.display.flip()

								clock.tick(60)
							pygame.quit()
						

Warum wird das so komisch gezeichnet?

Weil wir den alten Kreis nicht ĂŒberzeichnen

							
							ball = Ball(50, 80, 40, "blue")

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False
								
								screen.fill("black")

								keys = pygame.key.get_pressed()
								if keys[pygame.K_UP]:
									ball.rect.centery -= 1
								if keys[pygame.K_DOWN]:
									ball.rect.centery += 1
							
								ball.draw(screen)

								pygame.display.flip()

								clock.tick(60)
							pygame.quit()
						

Eure nÀchste Aufgabe:

FĂŒge Abfragen fĂŒr die Bewegung nach rechts und links hinzu

Lösung

							
							ball = Ball(50, 80, 40, "blue")

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False
								
								screen.fill("black")

								keys = pygame.key.get_pressed()
								if keys[pygame.K_UP]:
									ball.rect.centery -= 1
								if keys[pygame.K_DOWN]:
									ball.rect.centery += 1
								if keys[pygame.K_RIGHT]:
									ball.rect.centerx += 1
								if keys[pygame.K_LEFT]:
									ball.rect.centerx -= 1
								ball.draw(screen)

								pygame.display.flip()

								clock.tick(60)
							pygame.quit()
						
So sieht das dann richtig aus

FĂ€llt euch was auf? đŸ˜±

Wie könnte man das lösen? đŸ€”

Horizontale Kollision abfragen

							
							ball = Ball(50, 80, 40, "blue")

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False
								
								screen.fill("black")

								keys = pygame.key.get_pressed()
								if keys[pygame.K_UP]:
									ball.rect.centery -= 1
								if keys[pygame.K_DOWN]:
									ball.rect.centery += 1
							
								if ball.rect.left < 0:
									ball.rect.left = 0
								if ball.rect.right > screen.get_width():
									ball.rect.right = screen.get_width()
								
								ball.draw(screen)

								pygame.display.flip()

								clock.tick(60)
							pygame.quit()
						

Vertikale Kollision abfragen

							
							ball = Ball(50, 80, 40, "blue")

							while running:
								for event in pygame.event.get():
									if event.type == pygame.QUIT:
										running = False
								
								screen.fill("black")

								keys = pygame.key.get_pressed()
								if keys[pygame.K_UP]:
									ball.rect.centery -= 1
								if keys[pygame.K_DOWN]:
									ball.rect.centery += 1
							
								if ball.rect.left < 0:
									ball.rect.left = 0
								if ball.rect.right > screen.get_width():
									ball.rect.right = screen.get_width()
								if ball.rect.top < 0:
									ball.rect.top = 0
								if ball.rect.bottom > screen.get_height():
									ball.rect.bottom = screen.get_height()

								ball.draw(screen)

								pygame.display.flip()

								clock.tick(60)
							pygame.quit()
						
Mega Applaus, dass ihr bis hier gekommen seid 👏 đŸ„ł
Wie fĂŒhlt ihr euch? 🔋
Wie fĂŒhlt ihr euch? 🔋
Habt ihr was noch nicht so verstanden? 😕
Wie fĂŒhlt ihr euch? 🔋
Habt ihr was noch nicht so verstanden? 😕
GefĂ€llt euch etwas nicht so gut? 👎
Wie fĂŒhlt ihr euch? 🔋
Habt ihr was noch nicht so verstanden? 😕
Gibt es etwas was euch besonders gut gefĂ€llt? 👍
GefĂ€llt euch etwas nicht so gut? 👎
Das war aber nur der Anfang đŸ˜”â€đŸ’«
Jetzt geht es richtig los 😅

Jetzt coden wir richtiges Ping Pong!

Bienvenu Ă  Ping Pong
Ping Pong Hilfsmittel kopieren und importieren Download (mĂŒssen im gleichen Ordner sein)
							
							# pygame in unser Projekt hinzufĂŒgen
							import pygame
							from pingpong.PingPong import Ball, Paddle, Counter
						
GrundlĂ€gende Anweisungen fĂŒr PyGame
							
							# pygame in unser Projekt hinzufĂŒgen
							import pygame
							from pingpong.PingPong import Ball, Paddle, Counter

							# pygame setup
							pygame.init()
							screen = pygame.display.set_mode((1280, 720))
							clock = pygame.time.Clock()
							running = True
						
Den "Game Loop" vorbereiten
							
							# pygame in unser Projekt hinzufĂŒgen
						import pygame
						from pingpong.PingPong import Ball, Paddle, Counter

						# pygame setup
						pygame.init()
						screen = pygame.display.set_mode((1280, 720))
						clock = pygame.time.Clock()
						running = True

						while running:
							for event in pygame.event.get():
								if event.type == pygame.QUIT:
									running = False


							pygame.display.flip()

							clock.tick(60)
						pygame.quit()
						
BÀlle, SchlÀger und den Spielestand erstellen
							
							# pygame in unser Projekt hinzufĂŒgen
						import pygame
						from pingpong.PingPong import Ball, Paddle, Counter

						# pygame setup
						pygame.init()
						screen = pygame.display.set_mode((1280, 720))
						clock = pygame.time.Clock()
						running = True
						
						ball = Ball(screen.get_width()/2,screen.get_height()/2,40,"red")
						ball.x_velocity = 1
						ball.y_velocity = 1

						schlÀger = Paddle(40, 60, 10, 100, "violet")
						schlÀger2 = Paddle(screen.get_width()-50, 60, 10, 100, "yellow")

						spielestand = Counter(20,20, "freesansbold.ttf")
						spielestand2 = Counter(screen.get_width()-20,20, "freesansbold.ttf")

						while running:
							for event in pygame.event.get():
								if event.type == pygame.QUIT:
									running = False


							pygame.display.flip()

							clock.tick(60)
						pygame.quit()
						
BÀlle, SchlÀger und den Spielestand zeichnen
							
							# pygame in unser Projekt hinzufĂŒgen
						import pygame
						from pingpong.PingPong import Ball, Paddle, Counter

						# pygame setup
						pygame.init()
						screen = pygame.display.set_mode((1280, 720))
						clock = pygame.time.Clock()
						running = True
						
						ball = Ball(screen.get_width()/2,screen.get_height()/2,40,"red")
						ball.x_velocity = 1
						ball.y_velocity = 1

						schlÀger = Paddle(40, 60, 10, 100, "violet")
						schlÀger2 = Paddle(screen.get_width()-50, 60, 10, 100, "yellow")

						spielestand = Counter(20,20, "freesansbold.ttf")
						spielestand2 = Counter(screen.get_width()-20,20, "freesansbold.ttf")

						while running:
							for event in pygame.event.get():
								if event.type == pygame.QUIT:
									running = False
					
							ball.update()
							ball.draw(screen)
							schlÀger.draw(screen)
							schlÀger2.draw(screen)
							spielestand.draw(screen)
							spielestand2.draw(screen)

							pygame.display.flip()

							clock.tick(60)
						pygame.quit()
						
Die SchlÀger sollen sich auch bewegen
							
							# pygame in unser Projekt hinzufĂŒgen
						import pygame
						from pingpong.PingPong import Ball, Paddle, Counter

						# pygame setup
						pygame.init()
						screen = pygame.display.set_mode((1280, 720))
						clock = pygame.time.Clock()
						running = True
						
						ball = Ball(screen.get_width()/2,screen.get_height()/2,40,"red")
						ball.x_velocity = 1
						ball.y_velocity = 1

						schlÀger = Paddle(40, 60, 10, 100, "violet")
						schlÀger2 = Paddle(screen.get_width()-50, 60, 10, 100, "yellow")

						spielestand = Counter(20,20, "freesansbold.ttf")
						spielestand2 = Counter(screen.get_width()-20,20, "freesansbold.ttf")

						while running:
							for event in pygame.event.get():
								if event.type == pygame.QUIT:
									running = False
					
							ball.update()
							ball.draw(screen)
							schlÀger.draw(screen)
							schlÀger2.draw(screen)
							spielestand.draw(screen)
							spielestand2.draw(screen)

							keys = pygame.key.get_pressed()
							if keys[pygame.K_w]:
								if schlÀger.rect.top > 0:
									schlÀger.rect.centery -= 5
							if keys[pygame.K_s]:
								if schlÀger.rect.bottom < screen.get_height():
									schlÀger.rect.centery += 5
							if keys[pygame.K_UP]:
								if schlÀger2.rect.top > 0:
									schlÀger2.rect.centery -= 5
							if keys[pygame.K_DOWN]:
								if schlÀger2.rect.bottom < screen.get_height():
									schlÀger2.rect.centery += 5

							pygame.display.flip()

							clock.tick(60)
						pygame.quit()
						
Irgendwie entwischt uns der Ball đŸ„Č
Kollisionen đŸ˜±
							
							# pygame in unser Projekt hinzufĂŒgen
						import pygame
						from pingpong.PingPong import Ball, Paddle, Counter

						# pygame setup
						pygame.init()
						screen = pygame.display.set_mode((1280, 720))
						clock = pygame.time.Clock()
						running = True
						
						ball = Ball(screen.get_width()/2,screen.get_height()/2,40,"red")
						ball.x_velocity = 1
						ball.y_velocity = 1

						schlÀger = Paddle(40, 60, 10, 100, "violet")
						schlÀger2 = Paddle(screen.get_width()-50, 60, 10, 100, "yellow")

						spielestand = Counter(20,20, "freesansbold.ttf")
						spielestand2 = Counter(screen.get_width()-20,20, "freesansbold.ttf")

						while running:
							for event in pygame.event.get():
								if event.type == pygame.QUIT:
									running = False
					
							ball.update()
							ball.draw(screen)
							schlÀger.draw(screen)
							schlÀger2.draw(screen)
							spielestand.draw(screen)
							spielestand2.draw(screen)

							keys = pygame.key.get_pressed()
							if keys[pygame.K_w]:
								if schlÀger.rect.top > 0:
									schlÀger.rect.centery -= 5
							if keys[pygame.K_s]:
								if schlÀger.rect.bottom < screen.get_height():
									schlÀger.rect.centery += 5
							if keys[pygame.K_UP]:
								if schlÀger2.rect.top > 0:
									schlÀger2.rect.centery -= 5
							if keys[pygame.K_DOWN]:
								if schlÀger2.rect.bottom < screen.get_height():
									schlÀger2.rect.centery += 5

							if ball.rect.bottom > screen.get_height() or ball.rect.top < 0:
							ball.y_velocity *= -1
							
							if ball.rect.colliderect(schlÀger.rect) or ball.rect.colliderect(schlÀger2.rect):
								ball.x_velocity *= -1
							
							if ball.rect.left > screen.get_width() - 40 :
								spielestand.increase()
								ball.reset_position()
							
							if ball.rect.right < 0:
								spielestand2.increase()
								ball.reset_position()

							pygame.display.flip()

							clock.tick(60)
						pygame.quit()
						

C'est la rĂšsultat

Vielen Dank fĂŒr's mitmachen

Habt ihr noch fragen?

Was fandet ihr gut?

Was lief nicht so gut?

Quellen zum weitercoden

Free Code Camp

https://www.youtube.com/@freecodecamp

The Coding Train

https://www.youtube.com/@TheCodingTrain

Code Combat

https://codecombat.com/

Jugendhackt

https://jugendhackt.org/