From 2fd4f39be095a4116fde7dc383db0eba90b3b6c6 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 30 May 2011 16:28:05 +0400 Subject: [PATCH] colossal cave WIP --- examples/src/collections/ColossalCave.jetl | 120 ++++++++++++++++----- 1 file changed, 91 insertions(+), 29 deletions(-) diff --git a/examples/src/collections/ColossalCave.jetl b/examples/src/collections/ColossalCave.jetl index 6be87bbc1b8..7cfacffcda7 100644 --- a/examples/src/collections/ColossalCave.jetl +++ b/examples/src/collections/ColossalCave.jetl @@ -1,29 +1,91 @@ -namespace ColossalCave; - -class World() { - class Room { - abstract val name: String - } - - val atEndOfRoad: Room - - class AtEndOfRoad(): Room { - val name: String = "At End of Road" - } - - { - atEndOfRoad = new AtEndOfRoad() - } - - fun startRoom() = atEndOfRoad -} - -class Player(var room: World.Room) { - -} - -fun main(args: Array) { - val w = new World() - val p = new Player(w.startRoom()) - System.out?.println(p.room.name) -} +namespace ColossalCave; + +import java.io.* + +class World() { + class Room { + public abstract val name: String + public val west: Room? get() = null + public val east: Room? get() = null + } + + public val atEndOfRoad: Room + public val atHillInRoad: Room + + class AtEndOfRoad(): Room { + public val name: String = "At End of Road" + public val west: Room? get() = atHillInRoad + } + + class AtHillInRoad(): Room { + public val name: String = "At Hill in Road" + public val east: Room? get() = atEndOfRoad + } + + { + atEndOfRoad = new AtEndOfRoad() + atHillInRoad = new AtHillInRoad() + } + + fun startRoom() = atEndOfRoad +} + +class Player(var room: World.Room) { + +} + +class Command { + abstract fun execute(p: Player): Unit +} + +class QuitCommand() : Command { + fun execute(p: Player): Unit { + System.exit(0) + } +} + +class MoveCommand: Command { + fun moveTo(p: Player, room: World.Room?) { + if (room === null) { + System.out?.println("You can't go that way") + return + } + p.room = room as World.Room + System.out?.println(p.room.name) + } +} + +class WestCommand(): MoveCommand { + fun execute(p: Player): Unit { + moveTo(p, p.room.west) + } +} + +class EastCommand(): MoveCommand { + fun execute(p: Player): Unit { + moveTo(p, p.room.east) + } +} + +fun parse(cmd: String): Command? { + if (cmd == "quit") return new QuitCommand() + if (cmd == "west") return new WestCommand() + if (cmd == "east") return new EastCommand() + return null +} + +fun main(args: Array) { + val w = new World() + val p = new Player(w.startRoom()) + System.out?.println(p.room.name) + val reader = new BufferedReader(new InputStreamReader(System.`in`)) + while(true) { + System.out?.print("> ") + val cmd = reader.readLine() as String + val command = parse(cmd) + if (command === null) + System.out?.println("Unrecognized command"); + else + command?.execute(p) + } +}