Skip to main content

Game of Pong 1

Opdracht 1

Inleiding

In deze module gaan we een oud spel 'Pong' maken. Pong is een oud arcade-spel en je keert een hiermee een paar basis concepten van game development.

turtle

We gaan gebruik maken van de turtle module van Python.

import turtle

De turtle module in Python is een eenvoudige manier om grafische tekeningen te maken door middel van een virtuele "schildpad" die over het scherm beweegt en lijnen tekent.

De turtle-module gebruiken we om grafische objecten te maken en te verplaatsen. Het helpt ons om het speelveld, de paddle, en de bal te tekenen.

Nadat de turtle module is geïmporteerd, maken we een window (venster) voor het spel.

# Venster instellen
wn = turtle.Screen()
wn.title("Pong voor <Jouw Naam>")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)

input("Press any key to continue...") # tijdelijke toevoeging t.b.v. testen

Hier maken we een venster met de titel "Pong voor<Jouw Naam>". Vervang <Jouw Naam> door jouw naam.

De achtergrondkleur is zwart en de afmetingen van het venster zijn 800 bij 600 pixels. Met wn.tracer(0) zorgen we ervoor dat het scherm alleen ververst als wij dat willen, wat handig is voor het maken van animaties.

Opdracht

Test de code.

Leg in je eigen woorden uit waarom regel 8 in de code staat. Wat heeft regel 8 te maken met testen? Wat gebeurt er als deze regel er niet in staat.

Inleveren

Korte uitleg in eigen woorden waarom regel 8 in de code staat.


Opdracht 2

In deze opdracht maken we een paddle voor de speler. De paddle is een rechthoek die de speler kan verplaatsen om de bal terug te kaatsen.

We gaan ook leren wat coördinaten zijn.

De code voor de paddle:

# Paddle
paddle = turtle.Turtle()
paddle.speed(0)
paddle.shape("square")
paddle.color("white")
paddle.shapesize(stretch_wid=6, stretch_len=1)
paddle.penup()
paddle.goto(0, 0)

wn.update()

Uitleg:

  • We maken een turtle-object genaamd paddle.
  • paddle.speed(0) zorgt ervoor dat de paddle direct getekend wordt zonder animatie.
  • paddle.shape("square") geeft de paddle de vorm van een vierkant.
  • paddle.color("white") maakt de paddle wit.
  • paddle.shapesize(stretch_wid=6, stretch_len=1) maakt de paddle rechthoekig door de breedte te stretchen.
  • paddle.penup() zorgt ervoor dat de paddle niet tekent als hij beweegt.
  • paddle.goto(0, 0) plaatst de paddle op het midden van het scherm verschijnt.
  • wn.update() zorgt ervoor dat het scherm wordt geüpdatet.

Coördinaten

Het scherm is verdeeld in coördinaten. Een coördinaat is (0,0) en dat is het midden van het scherm.

Het eerste cijfer wordt de x-waarde genoemd en is de horizontale positie (links-rechts).

Het tweede cijfer wordt de y-waarde genoemd en is de verticale positie (boven-beneden).

Het eerste cijfer in een cooridaat is de x-waarde en de tweede coordiaat is de y-waarde.
De x-waarde geeft de horizontale postie weer en de y-waarde geeft de vertikale positie weer.

Voorbeelden

(10,0) x-waarde is 10 en de y-waarde is 0; 10 punten rechts van het midden.
(0,10)  10 punten boven het midden.
(-10,0) 10 punten links van het midden.
(0,-10) 10 punten onder het midden
(10,-10) 15 punten rechts en dan 10 naar beneden vanuit het midden.

Opdracht

Verander de code zodat de paddle aan de linkerkant van het scherm staat. Hiervoor moet je dus de coördinaten aanpassen.

image-1716544749432.png

Test je programma uit en zorg ervoor dat je een witte paddle ziet aan de linkerkant van het venster.

Inleveren

Screenshot van het scherm waarin je de paddle ziet.


Opdracht 3

We gaan ervoor zorgen dat je de paddle kan bewegen.

De paddle kan twee richtingen op: up (naar boven) en down (naar beneden).

We maken eerst twee functies die de paddel up of down kunnen bewegen.

def paddle_up():
    y = paddle.ycor()
    if y < 250:
        y += 20
    paddle.sety(y)

def paddle_down():
    y = paddle.ycor()
    if y > -240:
        y -= 20
    paddle.sety(y)

Uitleg:

  • paddle_up() verhoogt de y-coördinaat van de paddle met 20 als deze nog niet de bovenkant van het scherm heeft bereikt.
  • paddle_down() verlaagt de y-coördinaat van de paddle met 20 als deze nog niet de onderkant van het scherm heeft bereikt.

Als we deze code plaatsen dan gebeurt er nog niets. Dat komt omdat we de coördinaten wel veranderen, maar we doen geen scherm-update.

Gedurende het spel moeten we telkens een scherm update uitvoeren. Dit doen we in een loop die we voor nu even 'oneindig maken' (stopt niet vanzelf).

while True:
    wn.update()

Deze loop wordt ook wel de game loop genoemd.

De game-loop is het programma-onderdeel dat steeds controleert of er iets gebeurt en tekent telkens een nieuw scherm tekent.

Opdracht

Test je spel uit en als het goed is, kan je de paddel bewegen.

Inleveren

De gehele werkende code (.py) tot nu toe.

 

Opdracht 4

Om te beginnen maken we een bal, op eenzelfde manier als we de paddle hebben gemaakt.

# Bal
ball = turtle.Turtle()
ball.speed(1)
ball.shape("square")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.dx = 0.2
ball.dy = -0.2

In deze opdracht gaan we een bal tekenen en laten bewegen. De bal beweegt continue dus we gaan de code in de game-loop uitbreiden.