Als gamedeveloper, wil ik dat mijn speler, kogels en vijanden zichzelf besturen via methodes met parameters en returnwaarden, zodat de engine alleen nog de methodes hoeft aan te roepen.
Een methode zonder parameter doet altijd hetzelfde. Met een parameter laat je de aanroeper kiezen. Je leert een methode schrijven die een waarde krijgt en daarmee iets doet met zijn eigen object.
Tot nu toe had een methode alleen self. Dan kan hij maar รฉรฉn ding doen.
Wil je een ander getal optellen? Dan schrijf je een nieuwe methode:
class Counter:
def __init__(self):
self.total = 0
def add_one(self):
self.total += 1
def add_two(self):
self.total += 2
def add_five(self):
self.total += 5
Dat wordt snel een lange rij bijna-gelijke methodes. Er is een betere manier: je geeft de methode een parameter. De aanroeper bepaalt dan zelf hoeveel er bij komt.
class Counter:
def __init__(self):
self.total = 0
def add(self, amount): # amount is de parameter
self.total += amount
counter = Counter()
counter.add(5) # amount is nu 5
counter.add(2) # amount is nu 2
print(counter.total) # 7
self vult Python zelf in. Alle andere
parameters geef jij mee tussen de haakjes, na self.
Druk op Volgende stap. Let op: amount bestaat alleen tijdens de aanroep.
Probeer zelf hoe een parameter werkt.
counter = Counter()counter.add(5) โ tel 5 op.counter.total โ wat is de waarde?counter.add() โ zonder waarde. Wat gebeurt er?counter.total โ en nu?counter.add(amount=10) โ met de naam erbij.counter.total โ klopt je som?Je geeft je speler รฉรฉn methode om te bewegen. Een parameter bepaalt de richting.
Player met in __init__ de attributen self.x = 240, self.y = 580 en self.speed = 5.move(self, direction). De waarde direction is -1 (links), 0 (stil) of 1 (rechts). De methode verandert self.x met direction maal self.speed.player = Player(). Roep player.move(1) drie keer aan en print player.x.player.move(-1) twee keer aan en player.move(0) รฉรฉn keer. Print player.x opnieuw.move_left(), move_right() en stay()?Acceptatiecriteria
move is een methode van Player met de parameter direction.move(1) is player.x == 255.move(-1) en รฉรฉn keer move(0) is player.x == 245.self.speed; er staat geen vast getal 5 in move.