Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package snake
- import introprog.BlockGame
- abstract class SnakeGame(title: String) extends BlockGame(
- title, dim = (50, 30), blockSize = 15, background = Colors.Background,
- framesPerSecond = 50, messageAreaHeight = 3
- ) {
- var entities: Vector[Entity] = Vector.empty
- var players: Vector[Player] = Vector.empty
- sealed trait State
- case object Starting extends State
- case object Playing extends State
- case object GameOver extends State
- case object Quitting extends State
- var state: State = Starting
- def enterStartingState(): Unit = {
- pixelWindow.clear()
- drawTextInMessageArea("Tryck space för start", 0, 0)
- state = Starting
- } // rensa, meddela "tryck space för start"
- def enterPlayingState(): Unit = {
- pixelWindow.clear()
- entities.foreach(e => e.draw())
- state = Playing
- } // rensa, rita alla entiteter
- def enterGameOverState(): Unit = {
- drawCenteredText("Game Over!")
- state = GameOver
- } // meddela "game over"
- def enterQuittingState(): Unit = {
- println("Goodbye!")
- pixelWindow.hide()
- state = Quitting
- }
- def randomFreePos(): Pos = {
- var occupied = true
- var randomPos: Pos = null
- while (occupied) {
- randomPos = Pos.random(dim.asInstanceOf[Dim])
- entities.foreach(e => if (!e.isOccupyingBlockAt(randomPos)) occupied = false )
- }
- randomPos
- } // dra slump-pos tills ledig plats, används av frukt
- override def onKeyDown(key: String): Unit = {
- println(s"""key "$key" pressed""")
- state match {
- case Starting => if (key == " ") enterPlayingState()
- case Playing => players.foreach(_.handleKey(key))
- case GameOver =>
- if (key == " ") enterPlayingState()
- else if(key == "Escape") enterQuittingState()
- case _ =>
- }
- }
- override def onClose(): Unit = enterQuittingState()
- def isGameOver(): Boolean // abstrakt metod, implementeras i subklass
- override def gameLoopAction(): Unit = {
- entities.foreach(e => {
- e.erase()
- e.update()
- e.draw()
- })
- players.foreach(p => {
- p.snake.move()
- p.snake.draw()
- })
- // Vad jag tror gameLoopAction gör xD
- }
- def startGameLoop(): Unit = {
- pixelWindow.show() // möjliggör omstart även om fönstret stängts...
- enterStartingState()
- gameLoop(stopWhen = state == Quitting)
- }
- def play(playerNames: String*): Unit // abstrakt, implementeras i subklass
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement