diff options
-rw-r--r-- | src/scalevalapokalypsi/Model/Adventure.scala | 20 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Server/Server.scala | 22 | ||||
-rw-r--r-- | src/scalevalapokalypsi/walkthrough.txt | 32 |
3 files changed, 74 insertions, 0 deletions
diff --git a/src/scalevalapokalypsi/Model/Adventure.scala b/src/scalevalapokalypsi/Model/Adventure.scala index 9f538c5..d493276 100644 --- a/src/scalevalapokalypsi/Model/Adventure.scala +++ b/src/scalevalapokalypsi/Model/Adventure.scala @@ -24,6 +24,10 @@ import scala.math.min */ class Adventure(val playerNames: Vector[String]): + private var gameIsWon = false + def winGame() = this.gameIsWon = true + def isWon = this.gameIsWon + // Structure: // * Area definitions // * Area neighbor definitions @@ -171,6 +175,22 @@ class Adventure(val playerNames: Vector[String]): // Item definitions private val oluttuoppi = Item("oluttuoppi", "Tuopillinen kylmää ja kuohuvaa juomaa. Se tuoksuu aika tujulta.", 1) + + object Key extends Item( + "avain", + "avain, jolla voi avata ovia", + 1 + ): + + override def use(user: Entity): Option[Event] = + if user.location == bossDoor then + bossDoor.setNeighbor("sisään", bossFightRoom) + Some(Event(immutable.Map.empty, "Ovi aukeaa")) + else None + end use + end Key + + storageRoom.addItem(Key) object SeparatorScroll extends Item( "separoitumisen laulukäärö", diff --git a/src/scalevalapokalypsi/Server/Server.scala b/src/scalevalapokalypsi/Server/Server.scala index d0bb402..6877876 100644 --- a/src/scalevalapokalypsi/Server/Server.scala +++ b/src/scalevalapokalypsi/Server/Server.scala @@ -55,6 +55,8 @@ class Server( this.writeClientDataToClients() this.writeObservations() this.endGameForDeadClients() + if adventure.exists(_.isWon) then + this.winGame() if this.canExecuteTurns then this.clients.foreach(_.giveTurn()) this.adventure.foreach(_.takeNpcTurns()) @@ -189,6 +191,26 @@ class Server( ) ) + private def winGame(): Unit = + this.clients.foreach(c => + val winEvent = c.player.map(p => Event( + Map.empty, + s"Onneksi olkoon, voititte pelin!" + )) + winEvent.foreach(ev => this.clients.foreach(cl => + if cl != c then + cl.player.foreach(_.observe(ev)) + )) + ) + sleep(1000) + this.clients.foreach(c => + c.player.foreach((p: Player) => + this.writeToClient(s"$GAME_END_INDICATOR\r\n", c) + false + ) + ) + + private def writeToClient(message: String, client: Client): Unit = try { diff --git a/src/scalevalapokalypsi/walkthrough.txt b/src/scalevalapokalypsi/walkthrough.txt new file mode 100644 index 0000000..e52e99c --- /dev/null +++ b/src/scalevalapokalypsi/walkthrough.txt @@ -0,0 +1,32 @@ +mene pohjoiseen +mene pohjoiseen +mene itään +mene itään +[laula zombeja suohon] +mene etelään +puhu uoleville +mene länteen +mene länteen +mene etelään +mene metsikköön +mene mökkiin +puhu erakkotietäjälle +puhu erakkotietäjälle +poimi separoitumisen laulukäärö +mene ulos +mene pois metsiköstä +mene itään +mene itään +mene etelään +käytä separoitumisen laulukäärö +mene kallion sisään +[laula suohon vähän kultisteja] +mene syvemmälle +[tästä eteenpäin testaamatonta ajan puutteen vuoksi] +mene syvemmälle +mene länteen +ota avain +mene ulos +käytä avain +mene sisään +[laula ensin Miikkulainen suohon, sitten vasta lentävä otus, lonkerot ovat toissijaisia] |