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.