From 4313c497298c3d6477c3507486cb1a2b8522d51e Mon Sep 17 00:00:00 2001 From: Conrado Mateu Gisbert Date: Sat, 6 May 2017 21:12:45 +0200 Subject: [PATCH 1/2] Added Mediator Pattern --- src/main/kotlin/oop/Mediator/GameMediator.kt | 42 +++++++++++++ src/main/kotlin/oop/Mediator/Mediator.kt | 10 ++++ src/main/kotlin/oop/Mediator/Player.kt | 12 ++++ .../Decorator/base/IngredientDecoratorTest.kt | 1 + .../kotlin/oop/Mediator/GameMediatorTest.kt | 59 +++++++++++++++++++ 5 files changed, 124 insertions(+) create mode 100644 src/main/kotlin/oop/Mediator/GameMediator.kt create mode 100644 src/main/kotlin/oop/Mediator/Mediator.kt create mode 100644 src/main/kotlin/oop/Mediator/Player.kt create mode 100644 src/test/kotlin/oop/Mediator/GameMediatorTest.kt diff --git a/src/main/kotlin/oop/Mediator/GameMediator.kt b/src/main/kotlin/oop/Mediator/GameMediator.kt new file mode 100644 index 0000000..c8333da --- /dev/null +++ b/src/main/kotlin/oop/Mediator/GameMediator.kt @@ -0,0 +1,42 @@ +package oop.Mediator + +class GameMediator : Mediator { + override var recipients = mutableListOf() + + var lastPlayed: Int = 0 + + override fun add(recipient: Player) { + recipients.add(recipient) + } + + fun setNextTurn(index: Int) { + var nextToPlay = recipients.get(index) + nextToPlay.isMyTurn = true + recipients.set(index, nextToPlay) + } + + fun `set player turn to false at`(index: Int) { + lastPlayed = index + val res = recipients.get(index) + res.isMyTurn = false + recipients.set(index, res) + } + + override fun performPlay(sender: Player) { + recipients.forEachIndexed { index, player -> + if (sender.equals(player)) { + `set player turn to false at`(index) + player.recieve("Wait, waiting for player ${index + 1}") + + } else { + if (lastPlayed + 1 == index) { + setNextTurn(index) + player.recieve("Is your turn") + } else { + player.recieve("Wait, waiting for player ${lastPlayed+1}") + } + } + } + } + +} diff --git a/src/main/kotlin/oop/Mediator/Mediator.kt b/src/main/kotlin/oop/Mediator/Mediator.kt new file mode 100644 index 0000000..274510e --- /dev/null +++ b/src/main/kotlin/oop/Mediator/Mediator.kt @@ -0,0 +1,10 @@ +package oop.Mediator + +/** + * Created by ConradoMateu on 03/05/17. + */ +interface Mediator { + var recipients: MutableList + fun add(recipient: T) + fun performPlay(sender: T) +} diff --git a/src/main/kotlin/oop/Mediator/Player.kt b/src/main/kotlin/oop/Mediator/Player.kt new file mode 100644 index 0000000..6065bab --- /dev/null +++ b/src/main/kotlin/oop/Mediator/Player.kt @@ -0,0 +1,12 @@ +package oop.Mediator + +class Player(val name: String, var isMyTurn: Boolean = false) { + fun recieve(message: String) { + println("$name recieved: $message") + + } + + fun play(mediator: Mediator) { + mediator.performPlay(this) + } +} diff --git a/src/test/kotlin/oop/Decorator/base/IngredientDecoratorTest.kt b/src/test/kotlin/oop/Decorator/base/IngredientDecoratorTest.kt index e2bb94d..9a0e80d 100644 --- a/src/test/kotlin/oop/Decorator/base/IngredientDecoratorTest.kt +++ b/src/test/kotlin/oop/Decorator/base/IngredientDecoratorTest.kt @@ -20,6 +20,7 @@ class IngredientDecoratorTest { fun `Ingredient Decorator should return ingredient cost plus base noodle cost`() = assertThat(Pork(UdonNoodles()).calculateCost(), `is`(8.00)) + @Test fun `check decorated Noodles is of type IngredientDecorator`() = assertTrue(Tuna(UdonNoodles()) is IngredientDecorator) diff --git a/src/test/kotlin/oop/Mediator/GameMediatorTest.kt b/src/test/kotlin/oop/Mediator/GameMediatorTest.kt new file mode 100644 index 0000000..01e38de --- /dev/null +++ b/src/test/kotlin/oop/Mediator/GameMediatorTest.kt @@ -0,0 +1,59 @@ +package oop.Mediator + +import junit.framework.Assert.assertFalse +import junit.framework.Assert.assertTrue +import oop.Iterator.BackwardsIterator +import oop.Iterator.Iterator +import org.hamcrest.CoreMatchers +import org.hamcrest.MatcherAssert +import org.junit.Before +import org.junit.Test + +/** + * Created by ConradoMateu on 04/05/17. + */ +class GameMediatorTest { + private val mediator: Mediator = GameMediator() + + var players = playerGenerator(4) + + + @Before + fun init() { + players.forEach { mediator.add(it) } + } + + fun playerGenerator(index: Int): MutableList { + var recipients = mutableListOf() + var player: Player? + for (i in 1..index) { + if (i == 1) player = Player("Player $i", true) else player = Player("Player $i", false) + recipients.add(player) + } + return recipients + } + + + @Test + fun `Return last item of collection when call`() { + + } + + @Test + fun `when a player has played should't be his turn`() { + val firtPlayer = players.first() + firtPlayer.play(mediator) + assertFalse(firtPlayer.isMyTurn) + } + + @Test + fun `if player has played should give turn to next player`() { + val firtPlayer = players.first() + val secondPlayer = players[1] + firtPlayer.play(mediator) + assertFalse(firtPlayer.isMyTurn) + assertTrue(secondPlayer.isMyTurn) + } + + +} From cdbfa04271bb9ffbe4c48a29294a9e6c53bdf2ec Mon Sep 17 00:00:00 2001 From: Cotel Date: Sat, 6 May 2017 22:28:27 +0200 Subject: [PATCH 2/2] Some changes to be more Kotlin like --- src/main/kotlin/oop/Mediator/GameMediator.kt | 34 +++++-------------- src/main/kotlin/oop/Mediator/Mediator.kt | 5 +-- src/main/kotlin/oop/Mediator/Player.kt | 6 ++-- .../kotlin/oop/Mediator/GameMediatorTest.kt | 33 ++++++------------ 4 files changed, 24 insertions(+), 54 deletions(-) diff --git a/src/main/kotlin/oop/Mediator/GameMediator.kt b/src/main/kotlin/oop/Mediator/GameMediator.kt index c8333da..e22b19a 100644 --- a/src/main/kotlin/oop/Mediator/GameMediator.kt +++ b/src/main/kotlin/oop/Mediator/GameMediator.kt @@ -1,40 +1,24 @@ package oop.Mediator class GameMediator : Mediator { - override var recipients = mutableListOf() + override val recipients = mutableListOf() - var lastPlayed: Int = 0 + var lastTurn = 0 override fun add(recipient: Player) { recipients.add(recipient) } - fun setNextTurn(index: Int) { - var nextToPlay = recipients.get(index) - nextToPlay.isMyTurn = true - recipients.set(index, nextToPlay) - } - - fun `set player turn to false at`(index: Int) { - lastPlayed = index - val res = recipients.get(index) - res.isMyTurn = false - recipients.set(index, res) - } - override fun performPlay(sender: Player) { recipients.forEachIndexed { index, player -> - if (sender.equals(player)) { - `set player turn to false at`(index) - player.recieve("Wait, waiting for player ${index + 1}") - + if (sender == player) { + player.isMyTurn = false + lastTurn = index + } + if (recipients[lastTurn+1] == player) { + player.apply { isMyTurn = true; receive("Is your turn") } } else { - if (lastPlayed + 1 == index) { - setNextTurn(index) - player.recieve("Is your turn") - } else { - player.recieve("Wait, waiting for player ${lastPlayed+1}") - } + player.receive("Waiting for player ${lastTurn+1}") } } } diff --git a/src/main/kotlin/oop/Mediator/Mediator.kt b/src/main/kotlin/oop/Mediator/Mediator.kt index 274510e..5b65fc1 100644 --- a/src/main/kotlin/oop/Mediator/Mediator.kt +++ b/src/main/kotlin/oop/Mediator/Mediator.kt @@ -1,10 +1,7 @@ package oop.Mediator -/** - * Created by ConradoMateu on 03/05/17. - */ interface Mediator { - var recipients: MutableList + val recipients: MutableList fun add(recipient: T) fun performPlay(sender: T) } diff --git a/src/main/kotlin/oop/Mediator/Player.kt b/src/main/kotlin/oop/Mediator/Player.kt index 6065bab..43ca5ff 100644 --- a/src/main/kotlin/oop/Mediator/Player.kt +++ b/src/main/kotlin/oop/Mediator/Player.kt @@ -1,9 +1,9 @@ package oop.Mediator -class Player(val name: String, var isMyTurn: Boolean = false) { - fun recieve(message: String) { +data class Player(val name: String, + var isMyTurn: Boolean = false) { + fun receive(message: String) { println("$name recieved: $message") - } fun play(mediator: Mediator) { diff --git a/src/test/kotlin/oop/Mediator/GameMediatorTest.kt b/src/test/kotlin/oop/Mediator/GameMediatorTest.kt index 01e38de..7bc5b79 100644 --- a/src/test/kotlin/oop/Mediator/GameMediatorTest.kt +++ b/src/test/kotlin/oop/Mediator/GameMediatorTest.kt @@ -2,20 +2,13 @@ package oop.Mediator import junit.framework.Assert.assertFalse import junit.framework.Assert.assertTrue -import oop.Iterator.BackwardsIterator -import oop.Iterator.Iterator -import org.hamcrest.CoreMatchers -import org.hamcrest.MatcherAssert import org.junit.Before import org.junit.Test -/** - * Created by ConradoMateu on 04/05/17. - */ class GameMediatorTest { private val mediator: Mediator = GameMediator() - var players = playerGenerator(4) + val players = generatePlayers(4) @Before @@ -23,14 +16,10 @@ class GameMediatorTest { players.forEach { mediator.add(it) } } - fun playerGenerator(index: Int): MutableList { - var recipients = mutableListOf() - var player: Player? - for (i in 1..index) { - if (i == 1) player = Player("Player $i", true) else player = Player("Player $i", false) - recipients.add(player) - } - return recipients + fun generatePlayers(number: Int): MutableList { + val players = mutableListOf() + (1..number).forEach { players.add(if (it == 1) Player("Player $it", true) else Player("Player $it")) } + return players } @@ -41,17 +30,17 @@ class GameMediatorTest { @Test fun `when a player has played should't be his turn`() { - val firtPlayer = players.first() - firtPlayer.play(mediator) - assertFalse(firtPlayer.isMyTurn) + val firstPlayer = players.first() + firstPlayer.play(mediator) + assertFalse(firstPlayer.isMyTurn) } @Test fun `if player has played should give turn to next player`() { - val firtPlayer = players.first() + val firstPlayer = players.first() val secondPlayer = players[1] - firtPlayer.play(mediator) - assertFalse(firtPlayer.isMyTurn) + firstPlayer.play(mediator) + assertFalse(firstPlayer.isMyTurn) assertTrue(secondPlayer.isMyTurn) }