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.