From 8d8ad90c857e6db91c49b7e464f64382a55e9e4d Mon Sep 17 00:00:00 2001 From: Robby Zambito Date: Tue, 26 Nov 2019 22:47:11 -0500 Subject: Made sure to remove duplicate taken positions. Broke move score into its own implicit method. --- .idea/sbt.xml | 1 + .idea/scala_compiler.xml | 4 +--- build.sbt | 7 +++++++ project/build.properties | 4 +++- src/main/scala/me/robbyzambito/othello/game/AIPlayer.scala | 9 ++++++--- src/main/scala/me/robbyzambito/othello/game/Player.scala | 12 +++++++++++- 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/.idea/sbt.xml b/.idea/sbt.xml index 1bf561c..5903c57 100644 --- a/.idea/sbt.xml +++ b/.idea/sbt.xml @@ -12,6 +12,7 @@ + diff --git a/.idea/scala_compiler.xml b/.idea/scala_compiler.xml index 8fdaf03..a26a233 100644 --- a/.idea/scala_compiler.xml +++ b/.idea/scala_compiler.xml @@ -1,8 +1,6 @@ - - + \ No newline at end of file diff --git a/build.sbt b/build.sbt index 733f818..2d4bb60 100644 --- a/build.sbt +++ b/build.sbt @@ -3,3 +3,10 @@ name := "OthelloAI" version := "0.1" scalaVersion := "2.13.1" + +mappings in (Compile, packageSrc) ++= { + import Path.{flat, relativeTo} + val base = (sourceManaged in Compile).value + val srcs = (managedSources in Compile).value + srcs pair (relativeTo(base) | flat) +} diff --git a/project/build.properties b/project/build.properties index 010613d..7ebd936 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1,3 @@ -sbt.version = 1.3.3 \ No newline at end of file +sbt.version = 1.3.3 + +addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10") \ No newline at end of file diff --git a/src/main/scala/me/robbyzambito/othello/game/AIPlayer.scala b/src/main/scala/me/robbyzambito/othello/game/AIPlayer.scala index c09d172..4fbb2d9 100644 --- a/src/main/scala/me/robbyzambito/othello/game/AIPlayer.scala +++ b/src/main/scala/me/robbyzambito/othello/game/AIPlayer.scala @@ -11,13 +11,16 @@ package me.robbyzambito.othello.game */ case class AIPlayer(override val color: Position) extends Player(color) { + implicit class MoveScore(m: Move) { + def score: Int = m.takenPositions.length + } + override def nextMove(board: Board): Move = { - implicit val moveOrdering: Ordering[Move] = - (x, y) => x.takenPositions.length.compareTo(y.takenPositions.length) + implicit val moveOrdering: Ordering[Move] = (x, y) => x.score.compareTo(y.score) println(s"$this moving...") - Thread.sleep(500L) + Thread.sleep(1000L) println() possibleMoves(board).max diff --git a/src/main/scala/me/robbyzambito/othello/game/Player.scala b/src/main/scala/me/robbyzambito/othello/game/Player.scala index 925f7d2..c55f6db 100644 --- a/src/main/scala/me/robbyzambito/othello/game/Player.scala +++ b/src/main/scala/me/robbyzambito/othello/game/Player.scala @@ -13,6 +13,15 @@ import scala.util.Try * @param color The color of the player. */ abstract class Player(val color: Position) { + + /** + * The players decision on where to move based on + * the current board. It is assumed that there is + * at least one valid move. + * + * @param board + * @return + */ def nextMove(board: Board): Move def canMove(board: Board): Boolean = @@ -85,7 +94,8 @@ abstract class Player(val color: Position) { Some( Move(rowCount, colCount, - acc.map(_.takenPositions).getOrElse(List.empty) ::: vert.map(_.takenPositions).getOrElse(List.empty)) + (acc.map(_.takenPositions).getOrElse(List.empty) ::: + vert.map(_.takenPositions).getOrElse(List.empty)).distinct) ) else None }).flatten -- cgit v1.2.3