This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
package de.knockoutwhist.player
|
||||
|
||||
class Director {
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
package de.knockoutwhist.player
|
||||
package de.knockoutwhist.player.builder
|
||||
|
||||
import de.knockoutwhist.player.{AbstractPlayer, HumanPlayer}
|
||||
|
||||
import scala.compiletime.uninitialized
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
package de.knockoutwhist.player
|
||||
package de.knockoutwhist.player.builder
|
||||
|
||||
import de.knockoutwhist.player.AbstractPlayer
|
||||
|
||||
trait PlayerBuilder {
|
||||
def reset(): PlayerBuilder
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user