Pygame 2¶
Opgave 12¶
Onderstaand voorbeeld lijkt op opgave 11, maar de speler verplaatst zich nu onderaan het scherm.
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
player = pygame.image.load("ship.png")
x = 0
y = 480
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x = x - 5
if event.key == pygame.K_RIGHT:
x = x + 5
screen.fill("white")
screen.blit(player, (x, y))
pygame.display.flip()
Link naar opgave12.py
Pas de code aan zodat zowel voor de breedte als de hoogte variabelen gebruikt worden. Pas de initiele positie van het ruimteschip aan zodat het horizontaal gecentreerd staat onderaan het scherm, gebruik makend van de variabelen voorzien voor hoogte en breedte.
Opgave 13¶
Kopieer onderstaande code, en voer het uit. Wat gebeurt er?
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
player = pygame.image.load("ship.png")
x = 0
y = 0
xchange = 0.01
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
x = x + xchange
screen.fill("white")
screen.blit(player, (x, y))
pygame.display.flip()
Link naar opgave13.py
Pas de bovenstaande code aan, zodat de variabelen uit opgave 12 opnieuw gebruikt worden. Pas de code verder aan zodat het ruimteschip zich dubbel zo snel verplaatst.
Opgave 14¶
In opgave 12 moest je voordurend op de pijltjestoetsen hameren om je ruimteschip te doen bewegen. In onderstaande code wordt dit probleem opgelost door bij het indrukken van de pijltjestoetsen, de variabele xchange een waarde te geven. Deze waarde wordt dan voortdurend bij de X-positie van het ruimteschip opgeteld zodat het ruimteschip blijft bewegen. Pas als de toets losgelaten wordt, zetten we de waarde van variabele xchange terug op 0, waardoor het ruimteschip stopt met bewegen.
import pygame
WIDTH = 800
HEIGHT = 600
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
player = pygame.image.load("ship.png")
x = WIDTH / 2
xchange = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
xchange = -0.1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
xchange = 0
x = x + xchange
screen.fill("white")
screen.blit(player, (x, HEIGHT - 110))
pygame.display.flip()
Link naar opgave14.py
In het voorbeeld kan het ruimteschip enkel naar links bewogen worden. Pas de code aan zodat het ruimteschip ook naar rechts bewogen kan worden.
Opgave 15¶
De onderstaande code werd aangepast zodat het ruimteschip ook vertikaal kan bewegen. Helaas werd enkel het naar boven bewegen geimplementeerd. Pas de code aan zodat het ruimteschip ook naar beneden kan bewegen.
import pygame
WIDTH = 800
HEIGHT = 600
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
player = pygame.image.load("ship.png")
x = WIDTH / 2
y = HEIGHT - 110
xchange = 0
ychange = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
xchange = -0.1
elif event.key == pygame.K_UP:
ychange = -0.1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
xchange = 0
if event.key == pygame.K_UP:
ychange = 0
x += xchange
y += ychange
screen.fill("white")
screen.blit(player, (x, y))
pygame.display.flip()
Link naar opgave15.py
Opgave 16¶
Tot nu toe bleef ons spel volkomen stil. In onderstaand voorbeeld wordt getoond hoe je ervoor kan zorgen dat geluid afgespeeld wordt uit een bestand met naam bow.wav.
import pygame
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((320, 240))
sound = pygame.mixer.Sound("bow.wav")
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
sound.play()
screen.fill("white")
pygame.display.flip()
Link naar opgave16.py
Op Smartschool onder PROG2, Documenten, Geluid vinden jullie het bow.wav bestand alsook een bestand met naam explosion.wav. Plaatst beide bestanden in de map met je code, en voer het programma uit om te controleren dat het geluid afgespeeld wordt. Pas de code nu aan zodat het explosion.wav bestand afgespeeld wordt bij het indrukken van een van de pijltjestoetsen.
Opgave 17¶
In onderstaande code kan ons ruimteschip schieten. Om dit mogelijk te maken dienen we:
een sprite (afbeelding) van een kogel in te laden
de positie van de kogel bij te houden
de verplaatsing van de kogel bij te houden
de positie van de kogel gelijk te stellen met de speler als deze schiet
de snelheid van de kogel in te stellen zodra deze afgeschoten wordt
net zoals bij het ruimteschip: de nieuwe positie berekenen en het ruimteschip blitten
import pygame
WIDTH = 800
HEIGHT = 600
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
player = pygame.image.load("ship.png")
bullet = pygame.image.load("bullet.png")
# Positie van de speler, en verplaatsing van de speler
x = WIDTH / 2
y = HEIGHT - 110
xchange = 0
ychange = 0
# Positie van de kogel, en verplaatsing van de kogel
bullet_x = 0
bullet_y = 0
bullet_x_change = 0
bullet_y_change = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
# Zet positie van kogel op plaats van speler
bullet_x = x
bullet_y = y
bullet_x_change = -0.5
elif event.key == pygame.K_LEFT:
xchange = -0.1
elif event.key == pygame.K_RIGHT:
xchange = 0.1
elif event.key == pygame.K_UP:
ychange = -0.1
elif event.key == pygame.K_DOWN:
ychange = 0.1
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
xchange = 0
elif event.key == pygame.K_RIGHT:
xchange = 0
if event.key == pygame.K_UP:
ychange = 0
elif event.key == pygame.K_DOWN:
ychange = 0
x += xchange
y += ychange
bullet_x += bullet_x_change
screen.fill("white")
screen.blit(player, (x, y))
screen.blit(bullet, (bullet_x, bullet_y))
pygame.display.flip()
Link naar opgave17.py
Op Smartschool onder PROG2, Documenten, Geluid vinden jullie het bestand bullet.png. Plaatst dit bestand bij je code en voer de code uit.
Je zal merken dat de kogel de verkeerde richting uit gaat. Pas de code aan zodat de kogel wel in de juiste richting vliegt.
Opgave 18¶
Pas de code aan zodat er een geluid afgespeeld wordt zodra er geschoten wordt.