diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..917de8a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 74dd639..b2c751a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab03/Functions.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab03/Functions.kt new file mode 100644 index 0000000..1973d7f --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab03/Functions.kt @@ -0,0 +1,41 @@ +package ca.bcit.comp3717.lab03 + +fun printByKey(k: Int, m: Map) { + println(m[k]); +} + +val printByValue = fun(v: String?) +{ + println(v); +}; + +val getValue = { m: Map, k: Int -> m[k]; }; + +fun getAndPrint(g: (m: Map, k: Int) -> String?, m: Map, k: Int) +{ + println(g(m, k)); +} + +fun consumeValue(action: (String) -> Unit, v: String) +{ + action(v); +} + +fun main() +{ + val facts: Map = mapOf(1492 to "Christopher Columbus discovers America", + 1601 to "William Shakespear writes Hamlet", + 1632 to "Galileo discovered the acceleration of gravity on Earth to be 9.8m/s", + 1838 to "Rouphly 9.46 trillion km, the light-year is first used as a measurement in astronomy", + 2020 to "Covid 19 Pandemic"); + + facts.forEach(::println); + + println() + + printByKey(1492, facts); + printByValue(facts[1601]); + println(getValue(facts, 1632)) + getAndPrint(getValue, facts, 1838); + consumeValue(::println, getValue(facts, 2020).toString()); +} diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/Dwarf.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Dwarf.kt new file mode 100644 index 0000000..c5e1595 --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Dwarf.kt @@ -0,0 +1,10 @@ +package ca.bcit.comp3717.lab04 + +class Dwarf : Minion() +{ + override val race: String = "Dwarf"; + override val baseHealth: Int = 8; + override val baseSpeed: Int = 2; + override val backpackSize: Int = 8; + override val catchphrase: String = "Wheres' me trusty ol hammer?"; +} diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/Elf.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Elf.kt new file mode 100644 index 0000000..7cbd868 --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Elf.kt @@ -0,0 +1,10 @@ +package ca.bcit.comp3717.lab04 + +class Elf : Minion() +{ + override val race: String = "Elf"; + override val baseHealth: Int = 2; + override val baseSpeed: Int = 8; + override val backpackSize: Int = 3; + override val catchphrase: String = "My arrows never miss!"; +} diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/Gather.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Gather.kt new file mode 100644 index 0000000..dff880c --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Gather.kt @@ -0,0 +1,28 @@ +package ca.bcit.comp3717.lab04 + +class Gather(minion: Minion): Mission(minion), Repeatable +{ + override fun determineMissionTime(): Int + { + return (minion.backpackSize + minion.baseSpeed) * (1..4).random(); + } + + override fun reward(time: Int): String + { + return when (time) + { + in 10..21 -> "bronze" + in 22..33 -> "silver" + in 34..50 -> "gold" + else -> "nothing" + }; + } + + override fun repeat(times: Int, listener: MissionListener): Unit + { + for (i in 1..times) + { + start(listener); + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/Hunt.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Hunt.kt new file mode 100644 index 0000000..35eca66 --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Hunt.kt @@ -0,0 +1,20 @@ +package ca.bcit.comp3717.lab04 + +class Hunt(minion: Minion): Mission(minion) +{ + override fun determineMissionTime(): Int + { + return (minion.baseHealth + minion.baseSpeed) * (0..4).random(); + } + + override fun reward(time: Int): String + { + return when (time) + { + in 11..20 -> "mouse" + in 21..30 -> "fox" + in 31..50 -> "buffalo" + else -> "nothing" + }; + } +} diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/Main.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Main.kt new file mode 100644 index 0000000..12b2191 --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Main.kt @@ -0,0 +1,45 @@ +package ca.bcit.comp3717.lab04 + +fun main() +{ + val thing1 = Dwarf(); + val thing2 = Elf() + val manager = MissionManager(); + + val mission1 = Gather(thing1); + val mission2 = Hunt(thing2); + + manager.selectRepeatable(mission1, 1, object: MissionListener { + override fun missionStart(minion: Minion): Unit + { + println("A ${minion.race} was sent to gather resources"); + } + + override fun missionProgress(): Unit + { + println("..."); + } + + override fun missionComplete(minion: Minion, reward: String): Unit + { + println("A ${minion.race} has returned from a gather and found ${reward}!\n"); + } + }); + + manager.select(mission2, object: MissionListener { + override fun missionStart(minion: Minion): Unit + { + println("A ${minion.race} started a hunt!"); + } + + override fun missionProgress(): Unit + { + println("..."); + } + + override fun missionComplete(minion: Minion, reward: String): Unit + { + println("An ${minion.race} has returned from a hunt, and found ${reward}!\n"); + } + }); +} diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/Minion.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Minion.kt new file mode 100644 index 0000000..bdaa3c2 --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Minion.kt @@ -0,0 +1,10 @@ +package ca.bcit.comp3717.lab04 + +abstract class Minion +{ + abstract val race: String; + abstract val baseHealth: Int; + abstract val baseSpeed: Int; + abstract val backpackSize: Int; + abstract val catchphrase: String; +} diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/Mission.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Mission.kt new file mode 100644 index 0000000..12717a4 --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Mission.kt @@ -0,0 +1,26 @@ +package ca.bcit.comp3717.lab04 + +abstract class Mission(protected val minion: Minion) +{ + init + { + println(minion.catchphrase); + } + + fun start(listener: MissionListener): Unit + { + val time = determineMissionTime(); + val reward = reward(time); + + listener.missionStart(minion) + for (i in 0..2) + { + listener.missionProgress(); + Thread.sleep(1000); + } + + listener.missionComplete(minion, reward); + } + protected abstract fun determineMissionTime(): Int + protected abstract fun reward(time: Int): String +} diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/MissionListener.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/MissionListener.kt new file mode 100644 index 0000000..8da5205 --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/MissionListener.kt @@ -0,0 +1,8 @@ +package ca.bcit.comp3717.lab04 + +interface MissionListener +{ + fun missionStart(minion: Minion): Unit + fun missionProgress(): Unit + fun missionComplete(minion: Minion, message: String): Unit +} diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/MissionManager.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/MissionManager.kt new file mode 100644 index 0000000..1e9a379 --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/MissionManager.kt @@ -0,0 +1,14 @@ +package ca.bcit.comp3717.lab04 + +class MissionManager +{ + fun select(mission: Mission, listener: MissionListener): Unit + { + mission.start(listener); + } + + fun selectRepeatable(mission: Repeatable, i: Int, listener: MissionListener): Unit + { + mission.repeat(i, listener); + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/ca/bcit/comp3717/lab04/Repeatable.kt b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Repeatable.kt new file mode 100644 index 0000000..16bb5b7 --- /dev/null +++ b/app/src/main/kotlin/ca/bcit/comp3717/lab04/Repeatable.kt @@ -0,0 +1,6 @@ +package ca.bcit.comp3717.lab04 + +interface Repeatable +{ + fun repeat(times: Int, listener: MissionListener) +} \ No newline at end of file