diff --git a/CheckersClient/core/src/com/mygdx/game/model/GameMode.kt b/CheckersClient/core/src/com/mygdx/game/model/GameMode.kt index 113b5a8583387d0f3718eadb02d229336ab0e3ca..8269e292554b21a45c6fdd1e8601e330a69bb018 100644 --- a/CheckersClient/core/src/com/mygdx/game/model/GameMode.kt +++ b/CheckersClient/core/src/com/mygdx/game/model/GameMode.kt @@ -1,6 +1,9 @@ package com.mygdx.game.model import com.badlogic.gdx.math.Vector3 +import com.sun.org.apache.xpath.internal.operations.Bool +import java.lang.Exception +import java.lang.NullPointerException //Holds a ruleset and a board @@ -30,18 +33,42 @@ class GameMode(rules:AbstractRules? = null, board:AbstractBoard? = null) { return this.rules } - fun possibleMoves(position: Vector3): ArrayList<Vector3> { + fun getPossibleMoves(position: Vector3): ArrayList<Vector3> { - var frontier: ArrayList<Vector3> = arrayListOf() + fun isInBoard(pos: Vector3): Boolean { + var inBoard: Boolean + try { + inBoard = this.board!!.fieldExists(pos) + } catch (e: NullPointerException) { + inBoard = false + } + return inBoard + } + + fun hasPiece(pos: Vector3): Boolean { + return (this.board?.fields?.get(pos)?.hasPiece()) ?: false + } - if (this.board?.fields?.get(position)?.hasPiece() == true) { + fun algorithm(pos: Vector3, frontier: ArrayList<Vector3>, iterationNumber: Int = 0) { - // algoritme + val iterationCount: Int = 1 - return frontier + for (dir:Vector3 in directionalUnitVectors) { + + var newPos:Vector3 = pos.add(dir) + + if (isInBoard(newPos) && hasPiece(newPos) && iterationNumber < iterationCount) { + algorithm(newPos,frontier, iterationNumber+1) + } else if (isInBoard(newPos) && !hasPiece(newPos)) { + frontier.add(newPos) + } + } } - return frontier + var possibleMoves: ArrayList<Vector3> = arrayListOf() + algorithm(position, possibleMoves) + return possibleMoves + } }