0150 snake
Spelet i korta drag följer. En orm växer om den äter döda kroppsdelar. Om en orm kör in i en annan orms kropp så dör den. Ormar dör i kanten av världen.
Klassen SnakeHead - version 1
Bild: symbols/smiley2.png
Delmålet är ett huvud som kan styras.
Konstruktor
scale image 25 x 25
rotate image -90
Metoden act
anropa metoden stear - se nedan
anropa metoden move - se nedan
Metoden stear
om vänster pil
turn left 14
annars om höger pil
turn right 14
Metoden move
move 6
Testa
Testa att huvudet flyttar i munnens riktning och kan styras.
Klassen BodyPart
Bild: symbols/button-blue.png (eller green, purple, red, yellow)
Objektvariabeln snakeHead
Objektvariabeln snakeHead
innehåller en referens till ormens huvud. Referensen sätts i konstruktorn.
Konstruktor
Ormens huvud bifogas som en parameter till konstruktorn. Objektvariabeln snakeHead
får detta värde.
image scale to 25 x 25
Metoden getSnakeHead
returnerar snakeHead
Metoden kill
snakeHead får värdet null
Metoden isDead
returnerar true om snakeHead är null
och annars false
Klassen SnakeHead - version 2
Nu är delmålet att huvudet ska få en kropp. Ormen består först av bara huvudet och för varje gång den flyttar sig så läggs en extra del till tills den är 20 lång.
Objektvariabler
//föregående kroppsdels x
previousX
//föregående kroppsdels y
previousY
//föregående kroppsdels rotation
previousRotation
//ormens kroppsdelar
ArrayList<BodyPart> bodyParts
//antal kroppsdelar som ska läggas till ormen
noBodyPartsToAdd = 20
Metoden act
previousX får x-värdet
previousY får y-värdet
previousRotation får rotationsvärdet
anropa stear
anropa move
Metoden move
move 6
för varje kroppsdel
(flytta till framförvarande dels föregående position)
lokal variable x = kroppsdelens x
lokal variable y = kroppsdelens y
kroppsdelens x och y sätts till previousX och Y
previousX blir lokalt x
previousY blir lokalt y
om noBodyPartsToAdd är störren än 0
(lägg till en kroppsdel på slutet av ormen)
lokal variabel bodyPart
lägg nytt objekt av BodyPart i bodyPart
bodyParts.add(bodyPart); //java-kod
lägg till bodyPart i koordinaten previousX och Y
minska noBodyPartsToAdd med ett
Testa
Klassen SnakeHead - version 3
Nu är målet att lägga till datorstyrning av orm samt att göra så att olika ormar kan styras med olika tangenter. Det senare ordnar vi först.
Ändra konstruktorn
Låt konstruktorn ta två parametrar så att man kan ange vilka tangenter som styr vänster- respektive högersväng. Lägg till objektvariabler som kan hålla reda på dessa värden.
Ändra metoden stear
Ändra i metoden ´stear´ så att den tar hänsyn till vilka tangenter som ormen ska styras med.
Testa
Testa att du kan välja vilka tangenter som ormen ska styras med utan att behöva kompilera om koden.
Lägg till objektvariabeln isComputer
Låt objektvariablen isComputer
få värdet false
som default.
Lägg till en konstruktor
Lägg till en konstruktor som inte tar någon parameter. Gör samma initieringar som i den andra konstruktorn förutom tangenterna som man styr med.
isComputer sätt till true
Ändra metoden stear
om isComputer
om närmare kanten än 100 pixlar
sväng 12 åt höger
annars
25% chans sväng 14 åt höger
25% chans sväng 14 åt vänster
annars
KOD SOM REDAN FINNS
Testa
Testa att du kan göra ormar som styrs av datorn.
Klassen SnakeHead - version 4
Nu är målet att att om huvudet kolliderar med en annan orms kropp (ej huvud) så ska den dö. Då en orm dör förlorar den sitt huvud och kan ätas av andra ormar. Dessa blir då längre.
Tillägg i metoden act
lägg till sist
anropa checkCollision
Metoden checkCollision
anropa getIntersectingObjects(BodyParts.class)
spara resultatet i en lista
för varje kroppsdel k i listan
om kroppsdelen tillhör en annan orm
(tips: getSnakeHead())
om den andra ormen är död ät
om noBodyPartsToAdd är mindre än 0
noBodyPartsToAdd är 1
annars
noBodyPartsToAdd ökas med ett
annars
(har kört in i en levande orm)
(döda denna orm, se nedan)
för varje kroppsdel
döda kroppsdel (metoden kill)
ta bort detta objekt från världen
return; //java-kod
Extra
Klassen Leaf
Bild: nature/leaf.png
Lägg till ett objekt 200 pixlar in från varje hörn.
En ny orm dyker upp vid ett slumpvis valt löv då en orm dör.
Ormar dör vid kanten
Ormar som kör in i kanten på världen dör.
Menyer
Klassen StartMenu
Klassen ärver från World
.
Visa texten och lägg till fyra objekt av klassen NoPlayersButton
.
Klassen NoPlayersButton
No är i det här fallet en förkortning för number of.
Cirklarna med nummer i bilden ovan.
Objektvariabeln numberOfPlayers
numberOfPlayers
Konstruktor
Konstruktorn tar en parameter som anger hur många spelare det är.
numberOfPlayers får parameterns värde
skriv på bilden (1, 2, 3, eller 4)
Metoden act
om musen klickats på detta objekt
sätt värld till ny MyWorld - numberOfPlayers som parameter
(ändra på MyWorld så att detta fungerar)
tips
mouseClicked i klassen Greenfoot
setWorld i klassen Greenfoot
Klassen PlayerInfoMenu
Kräver en hel del kod.
Arv
Med hjälp av arv kan koden göras lite tjusigare. Lämplig övning för programmering 2.