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.