.. role:: python(code)
:language: python
.. |br| raw:: html
Extra oefening: Balls
========================
Deze opdracht gaat over het reageren op muisklikken.
Sprites
-----------
Download de volgende sprites:
* :download:`ball_blue.png `
* :download:`ball_green.png `
* :download:`ball_orange.png `
Mappenstructuur
----------------
Maak voor deze oefening in je :file:`games` map een nieuwe map met de naam :file:`balls`. Maak in Mu editor een nieuw bestand en sla het op in je :file:`balls` map onder de naam :file:`balls.py`. Plaats de gedownloade sprites in de :file:`images` map in de :file:`balls` map.
.. card::
.. uml::
:align: left
:html_format: svg
@startuml
@startfiles
/games/balls/images/ball_blue.png
/games/balls/images/ball_green.png
/games/balls/images/ball_orange.png
/games/balls/balls.py
@endfiles
@enduml
Starter code
-------------
Begin met de volgende code in :file:`balls.py`:
.. code-block:: python
:linenos:
# Vensterinstellingen
WIDTH = 640
HEIGHT = 480
TITLE = 'Balls'
# Actors
ball_blue = Actor('ball_blue')
ball_green = Actor('ball_green')
ball_orange = Actor('ball_orange')
# Startposities
ball_blue.x = 0.25 * WIDTH
ball_green.x = 0.50 * WIDTH
ball_orange.x = 0.75 * WIDTH
ball_blue.y = HEIGHT / 2
ball_green.y = HEIGHT / 2
ball_orange.y = HEIGHT / 2
# Stapgrootte
step = 20
# Functie draw()
def draw():
screen.fill('gray40')
ball_blue.draw()
ball_green.draw()
ball_orange.draw()
# Functie on_mouse_down()
def on_mouse_down(pos, button):
if ball_blue.collidepoint(pos) and button == mouse.LEFT:
ball_blue.y -= step
Bekijk de code goed. Probeer van elke regel de betekenis te begrijpen.
.. figure:: images/balls.png
Run de code en klik met de linkermuisknop op de blauwe bal. Wat gebeurt er?
Opdracht
---------
Breid de code uit met de volgende functionaliteit:
* Als je met de *rechter*\muisknop op de oranje bal klikt, moet die één stapgrootte omlaag bewegen.
* Als je met een willekeurige muisknop op de groene bal klikt, moet de blauwe bal één stapgrootte omlaag en de oranje bal één stapgrootte omhoog bewegen.
* De ballen mogen niet buiten beeld bewegen. Ze moeten volledig binnen de grenzen van het venster blijven.