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 kan twee dingen goed doen: een nieuw object maken en teruggeven, en een grens bewaken. Je gebruikt beide voor je speler: shoot() geeft een kogel terug en move() houdt de speler binnen het scherm.
Een methode kan een nieuw object maken en teruggeven met return.
Elke aanroep levert een vers object op, los van alle andere.
class Label:
def __init__(self, text):
self.text = text
class Printer:
def __init__(self):
self.count = 0
def make_label(self, text):
self.count += 1
return Label(text) # een NIEUW Label, elke keer
printer = Printer()
a = printer.make_label("hi")
b = printer.make_label("hi")
print(a is b) # False: twee verschillende objecten
print(printer.count) # 2
Maak objecten en laat een waarde tegen een grens aanlopen.
printer = Printer()a = printer.make_label("hi") โ de methode geeft een Label terug.b = printer.make_label("hi") โ nog een.a.text โ wat staat erin?a is b โ zijn het dezelfde objecten?printer.count โ hoeveel labels zijn er gemaakt?slider = Slider()slider.move(70)slider.move(70) โ nog eens. Wat verwacht je?slider.value โ waar blijft hij staan?Je speler krijgt twee nieuwe vaardigheden. Hij maakt zelf een kogel en hij blijft binnen het scherm. Je hebt twee classes nodig. Zet elke class in een eigen bestand, zoals je in sprint 6 zag. Je testscript komt in main.py.
bullet.py een class Bullet met __init__(self, x, y) en de attributen self.x, self.y, self.width = 6, self.height = 12 en self.color = (255, 220, 0).player.py een class Player met __init__(self, x, y) en de attributen x, y, width = 40, height = 20 en speed = 5.shoot(self). De methode maakt een nieuwe Bullet en geeft die terug. De kogel staat midden boven de speler: het midden van de speler min de halve breedte van de kogel, en self.y min de hoogte van de kogel.move(self, direction, width). De speler verschuift met direction maal self.speed en blijft tussen 0 en width - self.width.main.py: een speler op x = 0 die naar links gaat, een speler op x = 450 die naar rechts gaat (schermbreedte 480), en twee keer shoot().Acceptatiecriteria
Player(220, 580).shoot() geeft een Bullet met x == 237 en y == 568.shoot() geven twee verschillende objecten (a is not b).Player(0, 580).move(-1, 480) laat x == 0.Player(450, 580).move(1, 480) geeft x == 440 (480 - 40).width, niet als vast getal in de methode.Bullet en Player staan in eigen bestanden; player.py en main.py importeren wat ze nodig hebben.