public GameInfo MakeAMove(CheckerBoardArray currentCheckerBoard, int callingPlayer) { Random random = new Random(); List <GameInfo> possibleNextMoves = new List <GameInfo>(); GameInfo currentGame = new GameInfo(); currentGame = currentGame.Serialization(currentCheckerBoard); var SameBoardState = (from GI in db.gameInfo where GI.square1 == currentGame.square1 && GI.square3 == currentGame.square3 && GI.square5 == currentGame.square5 && GI.square7 == currentGame.square7 && GI.square10 == currentGame.square10 && GI.square12 == currentGame.square1 && GI.square14 == currentGame.square14 && GI.square16 == currentGame.square16 && GI.square17 == currentGame.square17 && GI.square19 == currentGame.square19 && GI.square21 == currentGame.square21 && GI.square23 == currentGame.square23 && GI.square26 == currentGame.square26 && GI.square28 == currentGame.square28 && GI.square30 == currentGame.square30 && GI.square32 == currentGame.square32 && GI.square33 == currentGame.square33 && GI.square35 == currentGame.square35 && GI.square37 == currentGame.square37 && GI.square39 == currentGame.square39 && GI.square42 == currentGame.square42 && GI.square44 == currentGame.square44 && GI.square46 == currentGame.square46 && GI.square48 == currentGame.square49 && GI.square51 == currentGame.square51 && GI.square53 == currentGame.square53 && GI.square55 == currentGame.square55 && GI.square58 == currentGame.square58 && GI.square60 == currentGame.square60 && GI.square62 == currentGame.square62 && GI.square64 == currentGame.square64 select GI).ToList(); if (SameBoardState != null) { List <CheckerBoardArray> possibleBoardStates = new List <CheckerBoardArray>(); foreach (var item in SameBoardState) { int nextTurn = item.turn + 1; possibleNextMoves = (from PNM in db.gameInfo where PNM.gameNumber == item.gameNumber && PNM.turn == nextTurn && PNM.winner == callingPlayer select PNM).ToList(); foreach (var item2 in possibleNextMoves) { possibleBoardStates.Add(currentCheckerBoard.serialization(item2)); } } } if (random.Next(0, 5) > 1) { switch (possibleNextMoves.Count) { case 0: break; case 1: currentGame = possibleNextMoves[0]; break; default: MinMaxEvaluation(possibleNextMoves); break; } } else { } return(currentGame); }
public CheckerBoardArray ShallowCopy() { CheckerBoardArray copy = new CheckerBoardArray(); copy.gameID = this.gameID; copy.turn = this.turn; for (int i = 0; i < 8; i++) { for (int ii = 0; ii < 8; ii++) { copy.SelectedStatus[i][ii] = this.SelectedStatus[i][ii]; copy.CheckerBoard[i][ii] = this.CheckerBoard[i][ii]; } } return(copy); }
//public virtual List<GameInfo> gameInfo { get; set; } public GameInfo Serialization(CheckerBoardArray checkerBoard) { this.turn = checkerBoard.turn; this.gameNumber = checkerBoard.gameID; this.square1 = checkerBoard.CheckerBoard[0][0]; this.square3 = checkerBoard.CheckerBoard[0][2]; this.square5 = checkerBoard.CheckerBoard[0][4]; this.square7 = checkerBoard.CheckerBoard[0][6]; this.square10 = checkerBoard.CheckerBoard[1][1]; this.square12 = checkerBoard.CheckerBoard[1][3]; this.square14 = checkerBoard.CheckerBoard[1][5]; this.square16 = checkerBoard.CheckerBoard[1][7]; this.square17 = checkerBoard.CheckerBoard[2][0]; this.square19 = checkerBoard.CheckerBoard[2][2]; this.square21 = checkerBoard.CheckerBoard[2][4]; this.square23 = checkerBoard.CheckerBoard[2][6]; this.square26 = checkerBoard.CheckerBoard[3][1]; this.square28 = checkerBoard.CheckerBoard[3][3]; this.square30 = checkerBoard.CheckerBoard[3][5]; this.square32 = checkerBoard.CheckerBoard[3][7]; this.square33 = checkerBoard.CheckerBoard[4][0]; this.square35 = checkerBoard.CheckerBoard[4][2]; this.square37 = checkerBoard.CheckerBoard[4][4]; this.square39 = checkerBoard.CheckerBoard[4][6]; this.square42 = checkerBoard.CheckerBoard[5][1]; this.square44 = checkerBoard.CheckerBoard[5][3]; this.square46 = checkerBoard.CheckerBoard[5][5]; this.square48 = checkerBoard.CheckerBoard[5][7]; this.square49 = checkerBoard.CheckerBoard[6][0]; this.square51 = checkerBoard.CheckerBoard[6][2]; this.square53 = checkerBoard.CheckerBoard[6][4]; this.square55 = checkerBoard.CheckerBoard[6][6]; this.square58 = checkerBoard.CheckerBoard[7][1]; this.square60 = checkerBoard.CheckerBoard[7][3]; this.square62 = checkerBoard.CheckerBoard[7][5]; this.square64 = checkerBoard.CheckerBoard[7][7]; return(this); }
public void StoreAMove(CheckerBoardArray CheckerBoard) { }
public List <CheckerBoardArray> GetPossibleMoves(CheckerBoardArray CurrentGame, int CallingPlayer) { List <CheckerBoardArray> PossibleMoves = new List <CheckerBoardArray>(); switch (CallingPlayer) { case 1: for (int i = 0; i < 8; i++) { for (int ii = 0; ii < 8; ii++) { if (CurrentGame.CheckerBoard[i][ii] > 0) { //diagonal right unpromoted or king if (i <= 6 && ii <= 6 && CurrentGame.CheckerBoard[i + 1][ii + 1] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal left Unpromoted or promoted if (i <= 6 && ii >= 1 && CurrentGame.CheckerBoard[i + 1][ii - 1] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal right back king if (i >= 1 && ii <= 6 && CurrentGame.CheckerBoard[i - 1][ii + 1] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii + 1] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal left back king if (i >= 1 && ii >= 1 && CurrentGame.CheckerBoard[i - 1][ii - 1] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii - 1] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal Jump right Unpromoted or promoted if (i <= 5 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = 0; PossibleMove.CheckerBoard[i + 2][ii + 2] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal jump left Unpromoted or promoted if (i <= 5 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = 0; PossibleMove.CheckerBoard[i + 2][ii - 2] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal Jump right king back if (i >= 2 && ii <= 5 && CurrentGame.CheckerBoard[i - 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii + 1] = 0; PossibleMove.CheckerBoard[i - 2][ii + 2] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal jump left king back if (i >= 2 && ii >= 2 && CurrentGame.CheckerBoard[i - 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii - 1] = 0; PossibleMove.CheckerBoard[i - 2][ii - 2] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right Unpromoted or promoted if (i <= 3 && ii <= 3 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 3] < 0 && CurrentGame.CheckerBoard[i + 4][ii + 4] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = 0; PossibleMove.CheckerBoard[i + 2][ii + 2] = 0; PossibleMove.CheckerBoard[i + 3][ii + 3] = 0; PossibleMove.CheckerBoard[i + 4][ii + 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left Unpromoted or promoted if (i <= 3 && ii >= 4 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 3] < 0 && CurrentGame.CheckerBoard[i + 4][ii - 4] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = 0; PossibleMove.CheckerBoard[i + 2][ii - 2] = 0; PossibleMove.CheckerBoard[i + 3][ii - 3] = 0; PossibleMove.CheckerBoard[i + 4][ii - 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right then middle Unpromoted or promoted if (i <= 3 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = 0; PossibleMove.CheckerBoard[i + 2][ii + 2] = 0; PossibleMove.CheckerBoard[i + 3][ii + 1] = 0; PossibleMove.CheckerBoard[i + 4][ii] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left then middle Unpromoted or promoted if (i <= 3 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = 0; PossibleMove.CheckerBoard[i + 2][ii - 2] = 0; PossibleMove.CheckerBoard[i + 3][ii - 1] = 0; PossibleMove.CheckerBoard[i + 4][ii] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right back king if (i >= 4 && ii <= 3 && CurrentGame.CheckerBoard[i - 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii + 3] < 0 && CurrentGame.CheckerBoard[i - 4][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii + 1] = 0; PossibleMove.CheckerBoard[i - 2][ii + 2] = 0; PossibleMove.CheckerBoard[i - 3][ii + 3] = 0; PossibleMove.CheckerBoard[i - 4][ii + 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left back king if (i >= 4 && ii >= 4 && CurrentGame.CheckerBoard[i - 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii - 3] < 0 && CurrentGame.CheckerBoard[i - 4][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii - 1] = 0; PossibleMove.CheckerBoard[i - 2][ii - 2] = 0; PossibleMove.CheckerBoard[i - 1][ii - 3] = 0; PossibleMove.CheckerBoard[i - 1][ii - 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right then middle back king if (i <= 3 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = 0; PossibleMove.CheckerBoard[i + 2][ii + 2] = 0; PossibleMove.CheckerBoard[i + 3][ii + 1] = 0; PossibleMove.CheckerBoard[i + 4][ii] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left then middle back king if (i <= 3 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = 0; PossibleMove.CheckerBoard[i + 2][ii - 2] = 0; PossibleMove.CheckerBoard[i + 3][ii - 1] = 0; PossibleMove.CheckerBoard[i + 4][ii] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right front sideways King if (i <= 5 && ii <= 3 && CurrentGame.CheckerBoard[i + 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 1][ii + 3] < 0 && CurrentGame.CheckerBoard[i][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = 0; PossibleMove.CheckerBoard[i + 2][ii + 2] = 0; PossibleMove.CheckerBoard[i + 1][ii + 3] = 0; PossibleMove.CheckerBoard[i][ii + 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left right sideways king if (i <= 3 && ii >= 4 && CurrentGame.CheckerBoard[i + 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 1][ii - 3] < 0 && CurrentGame.CheckerBoard[i][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = 0; PossibleMove.CheckerBoard[i + 2][ii - 2] = 0; PossibleMove.CheckerBoard[i + 1][ii - 3] = 0; PossibleMove.CheckerBoard[i][ii - 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right back sideways King if (i >= 2 && ii <= 3 && CurrentGame.CheckerBoard[i - 1][ii + 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 1][ii + 3] < 0 && CurrentGame.CheckerBoard[i][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii + 1] = 0; PossibleMove.CheckerBoard[i - 2][ii + 2] = 0; PossibleMove.CheckerBoard[i - 1][ii + 3] = 0; PossibleMove.CheckerBoard[i][ii + 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left back sideways king if (i >= 2 && ii >= 4 && CurrentGame.CheckerBoard[i - 1][ii - 1] < 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 1][ii - 3] < 0 && CurrentGame.CheckerBoard[i][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == 2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii - 1] = 0; PossibleMove.CheckerBoard[i - 2][ii - 2] = 0; PossibleMove.CheckerBoard[i - 1][ii - 3] = 0; PossibleMove.CheckerBoard[i][ii - 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } } } } break; case -1: for (int i = 0; i < 8; i++) { for (int ii = 0; ii < 8; ii++) { if (CurrentGame.CheckerBoard[i][ii] < 0) { //diagonal blue right unpromoted or king if (i >= 1 && ii <= 6 && CurrentGame.CheckerBoard[i - 1][ii + 1] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii + 1] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal blue left Unpromoted or promoted if (i >= 1 && ii >= 1 && CurrentGame.CheckerBoard[i - 1][ii - 1] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii - 1] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal blue right back king if (i <= 6 && ii <= 6 && CurrentGame.CheckerBoard[i + 1][ii + 1] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal blue left back king if (i <= 6 && ii >= 1 && CurrentGame.CheckerBoard[i + 1][ii - 1] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal blue Jump right Unpromoted or promoted if (i >= 2 && ii <= 5 && CurrentGame.CheckerBoard[i - 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii + 1] = 0; PossibleMove.CheckerBoard[i - 2][ii + 2] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal jump left Unpromoted or promoted if (i >= 2 && ii >= 2 && CurrentGame.CheckerBoard[i - 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii - 1] = 0; PossibleMove.CheckerBoard[i - 2][ii - 2] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal Jump right king back if (i <= 5 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = 0; PossibleMove.CheckerBoard[i + 2][ii + 2] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal jump left king back if (i <= 5 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = 0; PossibleMove.CheckerBoard[i + 2][ii - 2] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right Unpromoted or promoted if (i >= 4 && ii <= 3 && CurrentGame.CheckerBoard[i - 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii + 3] > 0 && CurrentGame.CheckerBoard[i - 4][ii + 4] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii + 1] = 0; PossibleMove.CheckerBoard[i - 2][ii + 2] = 0; PossibleMove.CheckerBoard[i - 3][ii + 3] = 0; PossibleMove.CheckerBoard[i - 4][ii + 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left Unpromoted or promoted if (i >= 4 && ii >= 4 && CurrentGame.CheckerBoard[i - 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii - 3] > 0 && CurrentGame.CheckerBoard[i - 4][ii - 4] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii - 1] = 0; PossibleMove.CheckerBoard[i - 2][ii - 2] = 0; PossibleMove.CheckerBoard[i - 3][ii - 3] = 0; PossibleMove.CheckerBoard[i - 4][ii - 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right then middle Unpromoted or promoted if (i >= 4 && ii <= 5 && CurrentGame.CheckerBoard[i - 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 4][ii] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii + 1] = 0; PossibleMove.CheckerBoard[i - 2][ii + 2] = 0; PossibleMove.CheckerBoard[i - 3][ii + 1] = 0; PossibleMove.CheckerBoard[i - 4][ii] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left then middle Unpromoted or promoted if (i >= 4 && ii >= 2 && CurrentGame.CheckerBoard[i - 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 3][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 4][ii] == 0) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii - 1] = 0; PossibleMove.CheckerBoard[i - 2][ii - 2] = 0; PossibleMove.CheckerBoard[i - 3][ii - 1] = 0; PossibleMove.CheckerBoard[i - 4][ii] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right back king if (i <= 3 && ii <= 3 && CurrentGame.CheckerBoard[i + 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 3] > 0 && CurrentGame.CheckerBoard[i + 4][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = 0; PossibleMove.CheckerBoard[i + 2][ii + 2] = 0; PossibleMove.CheckerBoard[i + 3][ii + 3] = 0; PossibleMove.CheckerBoard[i + 4][ii + 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left back king if (i <= 3 && ii >= 4 && CurrentGame.CheckerBoard[i + 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 3] > 0 && CurrentGame.CheckerBoard[i + 4][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = 0; PossibleMove.CheckerBoard[i + 2][ii - 2] = 0; PossibleMove.CheckerBoard[i + 1][ii - 3] = 0; PossibleMove.CheckerBoard[i + 1][ii - 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right then middle back king if (i <= 3 && ii <= 5 && CurrentGame.CheckerBoard[i + 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = 0; PossibleMove.CheckerBoard[i + 2][ii + 2] = 0; PossibleMove.CheckerBoard[i + 3][ii + 1] = 0; PossibleMove.CheckerBoard[i + 4][ii] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left then middle back king if (i <= 3 && ii >= 2 && CurrentGame.CheckerBoard[i + 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 3][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 4][ii] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = 0; PossibleMove.CheckerBoard[i + 2][ii - 2] = 0; PossibleMove.CheckerBoard[i + 3][ii - 1] = 0; PossibleMove.CheckerBoard[i + 4][ii] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right front sideways King if (i <= 5 && ii <= 3 && CurrentGame.CheckerBoard[i + 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i + 1][ii + 3] > 0 && CurrentGame.CheckerBoard[i][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii + 1] = 0; PossibleMove.CheckerBoard[i + 2][ii + 2] = 0; PossibleMove.CheckerBoard[i + 1][ii + 3] = 0; PossibleMove.CheckerBoard[i][ii + 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left right sideways king if (i <= 3 && ii >= 4 && CurrentGame.CheckerBoard[i + 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i + 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i + 1][ii - 3] > 0 && CurrentGame.CheckerBoard[i][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i + 1][ii - 1] = 0; PossibleMove.CheckerBoard[i + 2][ii - 2] = 0; PossibleMove.CheckerBoard[i + 1][ii - 3] = 0; PossibleMove.CheckerBoard[i][ii - 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump right back sideways King if (i >= 2 && ii <= 3 && CurrentGame.CheckerBoard[i - 1][ii + 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii + 2] == 0 && CurrentGame.CheckerBoard[i - 1][ii + 3] > 0 && CurrentGame.CheckerBoard[i][ii + 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii + 1] = 0; PossibleMove.CheckerBoard[i - 2][ii + 2] = 0; PossibleMove.CheckerBoard[i - 1][ii + 3] = 0; PossibleMove.CheckerBoard[i][ii + 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } //diagonal double Jump left back sideways king if (i >= 2 && ii >= 4 && CurrentGame.CheckerBoard[i - 1][ii - 1] > 0 && CurrentGame.CheckerBoard[i - 2][ii - 2] == 0 && CurrentGame.CheckerBoard[i - 1][ii - 3] > 0 && CurrentGame.CheckerBoard[i][ii - 4] == 0 && CurrentGame.CheckerBoard[i][ii] == -2) { CheckerBoardArray PossibleMove = CurrentGame.ShallowCopy(); PossibleMove.turn = CurrentGame.turn + 1; PossibleMove.gameID = CurrentGame.gameID; PossibleMove.CheckerBoard[i - 1][ii - 1] = 0; PossibleMove.CheckerBoard[i - 2][ii - 2] = 0; PossibleMove.CheckerBoard[i - 1][ii - 3] = 0; PossibleMove.CheckerBoard[i][ii - 4] = PossibleMove.CheckerBoard[i][ii]; PossibleMove.CheckerBoard[i][ii] = 0; PossibleMoves.Add(PossibleMove); } } } } break; default: break; } PossibleMoves = FindKings(PossibleMoves); if (PossibleMoves.Count == 0) { } return(PossibleMoves); }