Advertisement
Guest User

Snake.scala

a guest
Nov 15th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.16 KB | None | 0 0
  1. package snake
  2.  
  3. class Snake (
  4.   val initPos: Pos,
  5.   val initDir: Dir,
  6.   val headColor: java.awt.Color,
  7.   val tailColor: java.awt.Color,
  8.   val game: SnakeGame
  9. ) extends CanMove {
  10.   var dir: Dir = initDir
  11.  
  12.   val initBody: List[Pos] = List(initPos + initDir, initPos)
  13.  
  14.   val body: scala.collection.mutable.Buffer[Pos] = initBody.toBuffer
  15.  
  16.   val initTailSize: Int = 10 // välj själv vad som är lagom svårt
  17.  
  18.    var nbrOfStepsSinceReset = 0
  19.    val growEvery = 12
  20.    val startGrowingAfter = 400
  21.    var nbrOfApples = 0
  22.  
  23.   def reset(): Unit = {
  24.     body.remove(0, body.length)
  25.     initBody.indices.foreach(i => body.append(initBody(i)))
  26.   }
  27.        // återställ starttillstånd, ge rätt svanslängd
  28.  
  29.   def grow(): Unit = {    //koden är skriven som så att huvudet ligger vid index (0)!
  30.     val nextPos = body.head + dir
  31.     body.prepend(nextPos)
  32.  
  33.   }    // väx i rätt riktning med extra svansposition
  34.  
  35.   def shrink(): Unit = {
  36.     if (body.length > 2) body.drop(1).last
  37.   } // krymp svansen om kroppslängden är större än 2
  38.  
  39.   def isOccupyingBlockAt(p: Pos): Boolean = {
  40.      body.contains(p)
  41.   }    // kolla om p finns i kroppen
  42.  
  43.   def isHeadCollision(other: Snake): Boolean = {
  44.     body.head == other.body.head
  45.   } // kolla om huvudena krockar
  46.  
  47.   def isTailCollision(other: Snake): Boolean = {
  48.     if (other.body.tail.contains(body.head)) true
  49.     else false
  50.   } // mitt huvud i annans svans
  51.  
  52.   def move(): Unit = {
  53.     val nextPos = body.head + dir
  54.     val growagain = nbrOfStepsSinceReset%growEvery
  55.  
  56.     // if (ÄPPLEPOSITION.isOccupyingBlockAt(nextPos)) grow()
  57.     if (growagain == 0 && nbrOfStepsSinceReset > startGrowingAfter) grow()
  58.     shrink()
  59.     grow()
  60.     nbrOfStepsSinceReset += 1
  61.  
  62.   } // väx och krymp enl. regler; action om äter frukt
  63.  
  64.   def draw(): Unit = {
  65.     game.drawBlock(body.head.x, body.head.y, headColor)
  66.     body.tail.foreach(pos => game.drawBlock(pos.x, pos.y, tailColor))
  67.   }
  68.  
  69.   def erase(): Unit = {
  70.     body.foreach(pos => game.drawBlock(pos.x, pos.y, game.background))
  71.   }
  72.  
  73.   override def toString =  // bra vid println-debugging
  74.     body.map(p => (p.x, p.y)).mkString(">:)", "~", s" going $dir")
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement