Skip to content

Commit c75eea8

Browse files
chore: codestyle Variant.piecesAfterAction
use match case when working with Option: not using get anymore, when possible
1 parent e5f54a4 commit c75eea8

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

src/main/scala/abalone/format/Forsyth.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ object Forsyth {
8888
empty = 0
8989
for (x <- File.all) {
9090
board(x, y) match {
91-
case None => if(Pos.fromKey(s"${x.toString}${y.toString}").isDefined) empty = empty + 1
91+
case None => if(Pos(x, y).isDefined) empty = empty + 1
9292
case Some(piece) =>
9393
if (empty > 0) {
9494
fen.append(empty)

src/main/scala/abalone/variant/Variant.scala

+17-15
Original file line numberDiff line numberDiff line change
@@ -223,36 +223,38 @@ abstract class Variant private[variant] (
223223
- 2nd direction : we know what direction we want to apply to all these 2 or 3 marbles
224224
*/
225225
private def piecesAfterAction(pieces: PieceMap, orig: Pos, dest: Pos, directions: Directions): (PieceMap) = {
226-
val lineDir: Option[Direction] = directions.headOption
227-
val sideDir: Option[Direction] = directions.reverse.headOption
228-
val origLineMove: Option[Pos] = lineDir.map((direction) => direction(orig).get)
229-
val origSideMove: Option[Pos] = sideDir.map((direction) => direction(orig).get)
230-
val diagonalMove: Option[Pos] = (lineDir, origSideMove) match {
226+
val lineDir: Option[Direction] = directions.headOption
227+
val sideDir: Option[Direction] = directions.reverse.headOption
228+
val origLineMove: Option[Pos] = lineDir.flatMap(direction => direction(orig))
229+
val origSideMove: Option[Pos] = sideDir.flatMap(direction => direction(orig))
230+
val destLineMove: Option[Pos] = lineDir.flatMap(direction => direction(dest))
231+
val destLineOneMove: Option[Pos] = lineDir.flatMap(direction => if (destLineMove.isDefined) direction(destLineMove.get) else None)
232+
val destLineTwoMove: Option[Pos] = lineDir.flatMap(direction => if (destLineOneMove.isDefined) direction(destLineOneMove.get) else None)
233+
val origDiagonalMove: Option[Pos] = (lineDir, origSideMove) match {
231234
case ( Some(lineDir), Some(sideMove) ) => lineDir.apply(sideMove)
232235
case _ => None
233236
}
234237

235238
if (directions.size == 0) // line move
236239
pieces + (dest -> pieces(orig)) - (orig)
237240
else if (directions.size == 1) // push
238-
if(directions(0)(dest) == None) // __(_)o\
239-
pieces + (dest -> pieces(orig)) - orig
240-
else if (!pieces.contains(directions(0)(dest).get)) // __(_)o.
241-
pieces + (directions(0)(dest).get -> pieces(dest)) + (dest -> pieces(orig)) - orig
242-
else if (directions(0)((directions(0)(dest)).get) == None) // ___oo\
243-
pieces + ((directions(0)(dest)).get -> pieces(dest)) + (dest -> pieces(orig)) - orig
244-
else // ___oo.
245-
pieces + (directions(0)((directions(0)(dest)).get).get -> pieces(dest)) + (dest -> pieces(orig)) - orig
241+
( destLineMove, destLineOneMove, destLineTwoMove ) match {
242+
case ( (None, _, _) ) => pieces + (dest -> pieces(orig)) - orig // __(_)o\
243+
case ( (Some(destLinePos), _, _) ) if (!pieces.contains(destLinePos)) => pieces + (destLinePos -> pieces(dest)) + (dest -> pieces(orig)) - orig // __(_)o.
244+
case ( (Some(destLinePos), None, _) ) => pieces + (destLinePos -> pieces(dest)) + (dest -> pieces(orig)) - orig // ___oo\
245+
case ( (_, _, Some(desLineTwoPos)) ) => pieces + (desLineTwoPos -> pieces(dest)) + (dest -> pieces(orig)) - orig // ___oo.
246+
case ( _ ) => pieces
247+
}
246248
else // side move
247-
(origLineMove, origSideMove, diagonalMove) match {
249+
(origLineMove, origSideMove, origDiagonalMove) match {
248250
case ( Some(lineMovePos), Some(sideMovePos), Some(diagonalPos) ) =>
249251
if (diagonalPos.index == dest.index) // oo
250252
pieces + (sideMovePos -> pieces(orig)) - orig +
251253
(diagonalPos -> pieces(lineMovePos)) - lineMovePos
252254
else // ooo
253255
pieces + (sideMovePos -> pieces(orig)) - orig +
254256
(diagonalPos -> pieces(lineMovePos)) - lineMovePos +
255-
(directions(1)(lineMovePos).get -> pieces(lineMovePos)) - diagonalPos
257+
(diagonalPos -> pieces(lineMovePos)) - diagonalPos
256258
case _ => pieces
257259
}
258260
}

0 commit comments

Comments
 (0)