Builder Pattern finished
Some checks failed
Build and Test (KnockOutWhist) TeamCity build failed

This commit is contained in:
2024-11-29 11:55:09 +01:00
parent 82d7ab94b4
commit ca3ffa4ba7
8 changed files with 57 additions and 13 deletions

View File

@@ -1,5 +0,0 @@
package de.knockoutwhist.player
class Director {
}

View File

@@ -1,6 +1,7 @@
package de.knockoutwhist.player
import de.knockoutwhist.player.Playertype.{AI, HUMAN}
import de.knockoutwhist.player.builder.{AIPlayerBuilder, Director, HumanoidBuilder, PlayerBuilder}
enum Playertype:
case HUMAN
@@ -8,9 +9,20 @@ enum Playertype:
end Playertype
object PlayerFactory {
def createPlayer(name: String, playertype: Playertype): AbstractPlayer = {
playertype match
case HUMAN => HumanPlayer(name)
case AI => AIPlayer(s"$name - AI")
def createPlayer(name: String = null, playertype: Playertype): AbstractPlayer = {
val buildType: PlayerBuilder = playertype match {
case HUMAN => {
new HumanoidBuilder()
}
case AI => {
new AIPlayerBuilder()
}
}
if (name == null) {
Director.constructWithRandomNames(buildType)
} else {
Director.constructWithName(buildType, name)
}
}
}

View File

@@ -1,4 +1,6 @@
package de.knockoutwhist.player
package de.knockoutwhist.player.builder
import de.knockoutwhist.player.{AIPlayer, AbstractPlayer}
class AIPlayerBuilder extends PlayerBuilder {
private var unfinished: Option[AIPlayer] = None

View File

@@ -0,0 +1,23 @@
package de.knockoutwhist.player.builder
import de.knockoutwhist.player.AbstractPlayer
import scala.util.Random
object Director {
private val playernames = List("Alice", "Bob", "Charlie", "David", "Eve", "Frank", "Grace", "Heidi", "Ivan", "Judy", "Mallory", "Oscar", "Peggy", "Trent", "Walter")
def constructWithRandomNames(playerBuilder: PlayerBuilder): AbstractPlayer = {
playerBuilder.reset()
playerBuilder.setName(playernames(Random.nextInt(playernames.length)))
playerBuilder.build()
}
def constructWithName(playerBuilder: PlayerBuilder, name: String): AbstractPlayer = {
playerBuilder.reset()
playerBuilder.setName(name)
playerBuilder.build()
}
}

View File

@@ -1,4 +1,6 @@
package de.knockoutwhist.player
package de.knockoutwhist.player.builder
import de.knockoutwhist.player.{AbstractPlayer, HumanPlayer}
import scala.compiletime.uninitialized

View File

@@ -1,4 +1,6 @@
package de.knockoutwhist.player
package de.knockoutwhist.player.builder
import de.knockoutwhist.player.AbstractPlayer
trait PlayerBuilder {
def reset(): PlayerBuilder

View File

@@ -84,7 +84,7 @@ class AITests extends AnyWordSpec with Matchers {
}
"calculate which card to use in case of a used trump (can't overrule, discard trump)" in {
val ai1 = PlayerFactory.createPlayer("Robot1", AI)
val ai2 = PlayerFactory.createPlayer("Robot2", AI)
val ai2 = PlayerFactory.createPlayer(playertype = AI)
val playerList = List(ai1, ai2)
val round = new Round(Hearts, Match(playerList), playerList, firstRound = false)
round.remainingTricks = 5

View File

@@ -0,0 +1,8 @@
package de.knockoutwhist.player.builder
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
class BuilderTests extends AnyWordSpec with Matchers {
}