Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package snake
- class Snake (
- val initPos: Pos,
- val initDir: Dir,
- val headColor: java.awt.Color,
- val tailColor: java.awt.Color,
- val game: SnakeGame
- ) extends CanMove {
- var dir: Dir = initDir
- val initBody: List[Pos] = List(initPos + initDir, initPos)
- val body: scala.collection.mutable.Buffer[Pos] = initBody.toBuffer
- val initTailSize: Int = 10 // välj själv vad som är lagom svårt
- var nbrOfStepsSinceReset = 0
- val growEvery = 12
- val startGrowingAfter = 400
- var nbrOfApples = 0
- def reset(): Unit = {
- body.remove(0, body.length)
- initBody.indices.foreach(i => body.append(initBody(i)))
- }
- // återställ starttillstånd, ge rätt svanslängd
- def grow(): Unit = { //koden är skriven som så att huvudet ligger vid index (0)!
- val nextPos = body.head + dir
- body.prepend(nextPos)
- } // väx i rätt riktning med extra svansposition
- def shrink(): Unit = {
- if (body.length > 2) body.drop(1).last
- } // krymp svansen om kroppslängden är större än 2
- def isOccupyingBlockAt(p: Pos): Boolean = {
- body.contains(p)
- } // kolla om p finns i kroppen
- def isHeadCollision(other: Snake): Boolean = {
- body.head == other.body.head
- } // kolla om huvudena krockar
- def isTailCollision(other: Snake): Boolean = {
- if (other.body.tail.contains(body.head)) true
- else false
- } // mitt huvud i annans svans
- def move(): Unit = {
- val nextPos = body.head + dir
- val growagain = nbrOfStepsSinceReset%growEvery
- // if (ÄPPLEPOSITION.isOccupyingBlockAt(nextPos)) grow()
- if (growagain == 0 && nbrOfStepsSinceReset > startGrowingAfter) grow()
- shrink()
- grow()
- nbrOfStepsSinceReset += 1
- } // väx och krymp enl. regler; action om äter frukt
- def draw(): Unit = {
- game.drawBlock(body.head.x, body.head.y, headColor)
- body.tail.foreach(pos => game.drawBlock(pos.x, pos.y, tailColor))
- }
- def erase(): Unit = {
- body.foreach(pos => game.drawBlock(pos.x, pos.y, game.background))
- }
- override def toString = // bra vid println-debugging
- body.map(p => (p.x, p.y)).mkString(">:)", "~", s" going $dir")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement