diff options
author | Aleksi Heikkila <aleksi.e.heikkila@aalto.fi> | 2024-11-27 17:19:50 +0200 |
---|---|---|
committer | Aleksi Heikkila <aleksi.e.heikkila@aalto.fi> | 2024-11-27 17:19:50 +0200 |
commit | 34dc64a1387f2904b4c23ac3fcfea35c9670088e (patch) | |
tree | 2429a3743093dafd17378f4466e0c471afede373 | |
parent | 98407b35ff477f372baa92bf582b90a961d4ad16 (diff) | |
download | scalevalapokalypsi-34dc64a1387f2904b4c23ac3fcfea35c9670088e.tar.gz scalevalapokalypsi-34dc64a1387f2904b4c23ac3fcfea35c9670088e.zip |
[help-komento]
-rw-r--r-- | src/scalevalapokalypsi/Model/Action.scala | 41 | ||||
-rw-r--r-- | src/scalevalapokalypsi/Model/Entities/Player.scala | 4 |
2 files changed, 43 insertions, 2 deletions
diff --git a/src/scalevalapokalypsi/Model/Action.scala b/src/scalevalapokalypsi/Model/Action.scala index 75ce68c..94d13a5 100644 --- a/src/scalevalapokalypsi/Model/Action.scala +++ b/src/scalevalapokalypsi/Model/Action.scala @@ -3,6 +3,8 @@ package scalevalapokalypsi.Model import scalevalapokalypsi.Model.Entities.* import scalevalapokalypsi.Model.Entities.NPCs.* +import scala.collection.immutable + /** The class `Action` represents actions that a player may take in a text * adventure game. `Action` objects are constructed on the basis of textual * commands and are, in effect, parsers for such commands. An action object is @@ -25,6 +27,44 @@ class Action(input: String): * @return Boolean indicating whether the action possibly taken takes a * turn or not. */ + def help(actor: Entity): Event = + Event( + immutable.Map.from(Vector((actor, "Tässä ovat komennot," + + " joita voit" + + " käyttää pelin aikana:\n\napua/?/help:" + + " Näyttää pelaajalle saatavilla olevat" + + " komennot ja" + + " kertoo mitä ne tekevät.\n\nkäytä [esine]:" + + " Käyttää kyseisen esineen." + + " Vaikutus vaihtelee esineiden välillä." + + "\n\nlaula [olento] suohon: Laulaa toisen" + + " olennon suohon.\n\nlepää:" + + " Pelaaja levähtää, ei mitään sen" + + " erikoisempaa vaikutusta." + + "\n\nmene [suunta]: Vaihtaa pelaajan" + + " paikkaa/sijaintia pelissä," + + " jos se on mahdollista. Komennon perään laitetaan" + + " ilmansuunta," + + " joka kertoo, mihin suuntaan pelaaja liikkuu." + + "\n\npoimi/ota [esine]:" + + " Lisää kyseisen esineen pelaajan tavaraluetteloon," + + " jos se on saatavilla" + + " kyseisessä sijainnissa. Komennon perään kirjoitetaan" + + " esineen nimi, mikä halutaan ottaa. \n\npuhu [pelaaja]:" + + " Välittää viestin olennolle, joka ei ole pelaaja." + + "\n\nsano [olento]: Välittää viestin toiselle" + + " pelaajalle.\n\ntavaraluettelo:" + + " Näyttää, mitä esineitä pelaajalla on" + + " tavaraluettelossaan. Näyttää lisäksi esineiden määrän." + + " Jos pelaajalla ei ole esineitä tavaraluettelossaan" + + ", niin komento kertoo tavaraluettelon olevan tyhjä." + + "\n\ntiputa/pudota [esine]:" + + " Pudottaa kyseisen esineen pelaajan tavaraluettelosta," + + " jolloin se myös vähennetään pelaajan tavaraluettelosta." + + " \n\nxyzzy: Nam nam "))), + s"" + ) + def execute(actor: Player): Boolean = val oldLocation = actor.location val resOption: Option[(Boolean, Event)] = this.verb match @@ -35,6 +75,7 @@ class Action(input: String): oldLocation.observeEvent(r) ) result.map((true, _)) + case "help" | "?" | "apua" => Some((false, this.help(actor))) case "lepää" => Some((true, actor.rest())) case "poimi" | "ota" => Some((false, actor.pickUp(this.modifiers))) case "tavaraluettelo" => Some((false, actor.inventory)) diff --git a/src/scalevalapokalypsi/Model/Entities/Player.scala b/src/scalevalapokalypsi/Model/Entities/Player.scala index 62d4180..4fedbec 100644 --- a/src/scalevalapokalypsi/Model/Entities/Player.scala +++ b/src/scalevalapokalypsi/Model/Entities/Player.scala @@ -41,7 +41,7 @@ class Player( val res = (res1 ++ res2).toVector observations.clear() observedEvents.clear() - res.filter(s => !(s.isEmpty)) + res.filter(s => s.nonEmpty) /** Returns whether this player has a pending sing effect. */ def isSinging: Boolean = this.pendingSingEffect.isDefined @@ -82,7 +82,7 @@ class Player( this.location.observeEvent(event) this.pendingSingEffect .map(ef => ef(singQuality)) - .map(this.location.observeEvent(_)) + .foreach(this.location.observeEvent(_)) this.pendingSingEffect = None end Player |