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.

_images/ship.png

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

_images/bullet.png _images/bullet.png _images/bullet.png _images/bullet.png _images/bullet.png _images/bullet.png _images/bullet.png _images/bullet.png _images/bullet.png _images/bullet.png _images/bullet.png _images/bullet.png
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.