0145 space invaders
Nu ska du göra en något förenklad kopia av det klassiska spelet Space Invaders.
Först följer en förklaring av spelet i korthet. Därefter följer mer detaljerade instruktioner.
Nyckelpigorna rör sig i formation i sidled fram och tillbaka över skärmen. I vänster vändläge rör de sig nedåt.
Bäbisen styrs i sidled av spelaren. Bäbisen och nyckelpigorna kan skjuta vertikalt.
Husen tar skada då de träffas av skott. Vid stor skada försvinner husen helt.
Då nyckelpigorna når fram till husen tas alla hus bort på en gång.
Vid vissa tidpunkter rör sig ödlor från vänster till höger längs upp.
Poäng fås då nyckelpigor och ödlor träffas.
Bilderna behöver beskäras så att de inte innehåller så mycket transparenta pixlar runt om. Beskurna bilder finns på itslearning.
Placera objekt
Skriv while-slingor för att placera ut nyckelpigor och hus.
Nyckelpigornas position: (120, 100) +60 i x-led
Husens position: (100, 280) +200 i x-led
Bäbisens position: (300, 360)
Klassen Bullet
Objektvariabler
Objektvariablen speed
kan innehålla heltal.
Konstruktor
Konstruktorn tar en parameter som heter theSpeed
. Objektvariabeln speed
får sedan detta värde.
Metoden act
flytta speed pixlar nedåt
om vid kanten
ta bort mig (skottet)
annars om vidrör spelare
Game over visa i mitten
stanna spelet
annars om vidrör nyckelpiga
ta bort nyckelpiga
ta bort mig
Klassen Player
Objektvariabler
Lägg till två objektvariabler speed
och reloadTime
. Ge dem värdet 5 och 0 från start.
metoden act
minska reloadTime med 1
anropa metoden checkKeyboard
metoden checkKeyboard
om vänster pil
flytta (speed pixlar) åt vänster
om höger pil
flytta (speed pixlar) åt höger
om space
anropa metoden tryFireGun
metoden tryFireGun
om reloadTime är mindre eller lika med noll
ny bullet med farten 20 uppåt
lägg till den i världen på (min x, min y - 40)
sätt reloadTime till 50
Klassen LadyBug
konstruktor
vrid 90 grader, så att den pekar nedåt
Metoden act
om vidrör hus
ta bort ALLA hus
tips: metoden removeObjects()
i World
metoden fireGun
ny kula som rör sig nedåt med farten 10
lägg till kulan i världen på koordinaten (min x, min y + 50)
Klassen Shelter
Objektvariabel
Objektvariabeln damage
är 0 från start.
Metoden act
Rita svarta cirklar på bilden då huset träffas. Pseudokod följer.
lokal variabel bullet = getOneIntersectingObject(...
om buller ej är null
öka damage med 1
x = bullet x - min x + halv husbredd - halv bulletbredd
y = -2
ta bort bullet
min bild: sätt färg svart
min bild: fyll oval med övre vänsterhörn vid x och y,
och med storleken 10 * damage
om damage är större än 7
ta bort mig
Klassen Lizard
Metoden act
flytta 2 åt höger
om vid höger kant
ta bort mig
Klassen MyWorld
Objektvariabler
Objektvariabeln isMovingRight
har startvärdet true
. Den är sann då nyckelpigorna flyttar åt höger.
Objektvariabeln moveCounter
har startvärdet 100. Den håller reda på hur många steg nyckelpigorna har flyttat i sidled.
Objektvariabeln time
är 200 från start. Den bestämmer när nya ödlor ska läggas till i spelet.
konstruktor
image är en ny GreenfootImage med storleken 1 x 1 pixlar
sätt penseln till svart på image (metoden setColor)
fyll image med denna färg (metoden fill)
sätt bakgrundsbild på världen till image
anropa kod som lägger till spelare, nyckelpigor och hus
Metoden act
anropa moveLadyBugs
anropa fireLadyBugGun
anropa addLizard
Metoden moveLadyBugs
om isMovingRight
för varje nyckelpiga
flytta nyckelpigan en pixel åt höger
om moveCounter är större än 200
sätt moveCounter till 0
isMovingRight blir false
annars
för varje nyckelpiga
flytta nyckelpigan en pixel åt vänster
om moveCounter är större än 200
sätt moveCounter till 0
sätt isMovingRight till true
för varje nyckelpiga
flytta nyckelpigan 20 pixlar nedåt
öka moveCounter med 1
Metoden fireLadyBugGun
Sex procents chans att en slumpmässigt vald nyckelpiga skjuter.
6% chans
ladyBugs är en lista för LadyBug
lägg alla nyckelpigor i ladyBugs
lokal variabel numberOfBugs
numberOfBugs = ladyBugs.size()
lokal variabel bugIndex
bugIndex får slumpvärde mindre än numberOfBugs
Lokal variabel bug
bug = ladyBugs.get(indexBug)
anropa fireGun på bug
Metoden addLizard
om time är större än 400
lägg till en ny ödla på (0, 50)
sätt time till 0
Extra
Animerad explosion då ett skott träffar.
Ljud
Poäng
Nyckelpiga 10
Ödla 50
Liv
Tre liv. Ikoner i nedre vänster hörn visar hur många liv som återstår.
Gun ready
Symbol som visar att spelaren kan skjuta
Flera rader med nyckelpigor
Fler rader med nyckelpigor eller andra insekter. Bara insekter som är längst fram skjuter.
Kan genomföras på följande vis. Varje nyckelpiga har en objektvariabel som är satt till nyckelpigan som är framför. Om det inte finns någon framför är värdet null. Innan en nyckelpiga skjuter kollar den om det finns en framför. Om det finns så ber den den att skjuta istället för att skjuta själv.
Klassen Gun
Flytta koden för att skjuta till en klass Gun.
Gun är en Actor.
Använd Gun i Player och LadyBug.