Koekjesmonster

Niveau:level1
Bron:coderdojo-gent-pygame van Yannick Clybouw

Doel

Koekjesmonster

Programmeer het koekjesmonster zó dat ze haar weg vindt naar de koekje(s) en deze kan opeten!

Wat heb je nodig?

  • Een werkende Python-installatie (inclusief pygame) (zie Installatie)
  • De Python code voor deze oefening: download deze bestanden en plaats deze op je computer in dezelfde map waar je ook je oplossing zal aanmaken en bewaren

Oefening 1A

Er verschijnt een monster en één koekje. Vul de programmalus in zó dat het monster op weg gaat naar het koekje om het op te eten.

from oefening_01 import OpdrachtA

opdracht = OpdrachtA(500, 500)
monster = opdracht.monster
koekje = opdracht.koekje

def programmalus():
    """Beweeg het monster naar het koekje."""
    # ---------------------------------------------- #
    #                                                #
    #   Vul hier je programmalus in!                 #
    #                                                #
    # -----------------------------------------------#

opdracht.start(programmalus)

De positie op het scherm van het koekje is:

(koekje.x, koekje.y)

De positie op het scherm van het monster is:

(monster.x, monster.y)

Hierbij komt (0, 0) overeen met links-boven op het scherm.

Je kan het monster bewegen met de volgende acties:

  • ga één stap naar links: monster.stap_links()
  • ga één stap naar rechts: monster.stap_rechts()
  • ga één stap naar omhoog: monster.stap_omhoog()
  • ga één stap naar omlaag: monster.stap_omlaag()

Scratch vs. Python

Scratch Python
als … dan if … :
anders else:
anders, als … dan if … : elif …: else …:

Oefening 1B

Er verschijnt een monster en een koekje. Elke keer als je het spelletje start, zal het koekje op een willekeurige plaats verschijnen.

Vul de programmalus in zó dat het monster op weg gaat naar het koekje om het op te eten.

from oefening_01 import OpdrachtA

opdracht = OpdrachtB(500, 500)
monster = opdracht.monster
koekje = opdracht.koekje

def programmalus():
    """Beweeg het monster naar het koekje."""
    # ---------------------------------------------- #
    #                                                #
    #   Vul hier je programmalus in!                 #
    #                                                #
    # -----------------------------------------------#

opdracht.start(programmalus)

Oefening 1C

Er verschijnt een monster, samen met verschillende koekjes op willekeurige plaatsen.

Vul de programmalus in zó dat het monster één voor één op weg gaat naar de koekjes om ze op te eten.

from oefening_01 import OpdrachtC

opdracht = OpdrachtC(500, 500)
monster = opdracht.monster
koekjesgroep = opdracht.koekjesgroep
# De koekjesgroep heeft verschillende sprites.
# Telkens je een koekje opeet, verdwijnt die uit de groep.

def programmalus():
    """Beweeg het monster naar de koekjes, één voor één."""
    # ---------------------------------------------- #
    #                                                #
    #   Vul hier je programmalus in!                 #
    #                                                #
    # -----------------------------------------------#
    yield


opdracht.start(programmalus)

Alle koekjes zitten in koekjesgroep. Je kan alle koekjes overlopen met een lus.

Telkens het monster een koekje opeet, verdwijnt het koekje uit de groep. Je kan testen of een koekje nog in de groep zit met:

koekje in koekjesgroep

Merk op: je dient yield te gebruiken binnen in je lus.

Scratch vs. Python

Scratch Python
herhaal (voor elke X uit de GROEP) for X in GROEP
omgekeerde van “herhaal tot” while VOORWAARDE

Lussen in Python

break = verlaat de lus
continue = sla alles over tot de volgende herhaling van de lus

Oefening 1C extra

Als oefening 1C gelukt is, kun je als extra uitdaging ervoor zorgen dat het monster telkens het dichtste koekje opeet voordat ze naar het volgende koekje gaat.

De afstand tussen het monster en een koekje kan je berekenen met het volgende stukje code:

import math

def afstand(monster, koekje):
    return math.sqrt((monster.x - koekje.x) ** 2 +
                     (monster.y - koekje.y) ** 2)

Oefening:

import math

from oefening_01 import OpdrachtC

opdracht = OpdrachtC(500, 500)
monster = opdracht.monster
koekjesgroep = opdracht.koekjesgroep

def afstand(monster, koekje):
    return math.sqrt((monster.x - koekje.x) ** 2 +
                     (monster.y - koekje.y) ** 2)

def programmalus():
    """Beweeg het monster naar de koekjes,
    te beginnen met het dichtsbijzijnde koekje."""
    # ---------------------------------------------- #
    #                                                #
    #   Vul hier je programmalus in!                 #
    #                                                #
    # -----------------------------------------------#
    yield


opdracht.start(programmalus)