0127 walls

I den här utmaningen ska vi se hur man kan göra väggar som man inte kan gå in i. Därtill är det en övning i att skriva while-slingor.

Gör ett nytt scenario. Lägg till alla klasser förutom Bullet. Välj bilder enligt följande:

  • World: backgrounds/cell.png
  • Turtle: animals/turtle2.png
  • Fly: animals/fly.png
  • Wall: backgrounds/Wall.jpg
  • Strawberry: food/strawberry.png

Klassen World

Ändra storlek på världen.

Ändra koden högst upp i konstruktorns kropp till:

  super(660, 660, 1)

Lägg till jordgubbar

Använd while-slingor för att placera ut jordgubbarna. Koden skrivs i klassen MyWorld. Behöver du hjälp så lägg till två jordgubbar i världen och högerklicka i världen och välj save the world. Titta sedan i klassen MyWorld i metoden prepare.

metoden addStrawberries()

Skriv ett metodhuvud för metoden addStrawberries(). Flytta while-slingorna till metodkroppen. Kom ihåg att anropa metoden i konstruktorn.

Nedanstående metoder görs på liknande vis.

metoden addWalls()

Använd while-slingor för att lägga till väggar.

metoden addFlies()

Använd while-slingor för att lägga till flugor.

metoden addTurtle()

Lägg till sköldpaddan.

När du är klar ska världen se ut som bilden ovan.

Extra

Testa att anropa metoderna i annan ordning i konstruktorn. Kan du få flugorna att hamna under väggarna?

Metoden setPaintOrder i klassen World

Metoden setPaintOrder i klassen World kan användas för att bestämma vilket objekt som ska ritas över eller under ett annat.

Klassen Turtle

metoden act()

Anropa några av nedanstående metoder.

metoden checkMove()

Följande metoder är användbara: setRotation(), setLocation(), getX(), getY(), isKeyDown().

Nedanstående gör att sköldpaddan kan flytta, men den kan fortfarande gå igenom väggar.

  om vänsterpil är intryckt
      sätt rotationen till 180 grader
      flytta 30 pixlar åt vänster

  annars om högerpil är intryckt
      sätt rotationen till 0
      flytta 30 pixlar åt höger
  annars om up 
      sätt rotationen till 270
      flytta 30 upp
  ner på liknande vis

metoden isColliding()

Metoden isTouching() är användbar.

Metoden returnerar true om sköldpaddan är i kontakt med ett väggobjekt, annars returnerar den false.

Testa metoden.

metoden checkMove() igen

Nu är det dags att lägga till kod så att sköldpaddan inte kan gå in i väggar. Metoden isCollidning() ska användas.

  om vänsterpil är intryckt
      sätt rotationen till 180
      flytta 30 pixlar åt vänster
      om kolliderar med vägg
          flytta tillbaka 30 pixlar

  annars om högerpil är intryckt
      ungefär som ovan ...
  up och ner på liknande vis

metoden checkEat()

  om vidrör jordgubbe
      ta bort jordgubbe

metoden checkEaten()

Flugorna är av en giftig sort som har död på sköldpaddor.

  om vidrör fluga
      visa texten game over mitt på spelplanen
      stanna spelet
      ta bort sköldpaddan

Klassen Fly

metoden act()

  Flugan flyttar 10 steg framåt.

  Om den är vid kanten 
      svänger den ett halvt varv.

  Annars så är det 25% chans att 
      den svänger -90, 0, eller 90 grader.

Extra Bullet

Det är för svårt just nu. Men för den som ligger långt före ...

Sköldpaddan skjuter iväg en kula. När den har ätit en fluga kan den skjuta en kula. Den kan som mest ha en kula på lager. Kulan rör sig 60 pixlar per bildruta. Träffade flugor tas bort. Skott kan ej gå igenom väggar.