private JavaList <object> FindAllLegalKingDiagonalAttackMoves(JavaList <object> lastPos, int currentPos, int playerColor, int enemyColor, int incX, int incY) { var x = PosToCol(currentPos); var y = PosToBoardLine(currentPos); var moves = new JavaList <object>(); var startPos = (int)lastPos.peek_head(); var i = x + incX; var j = y + incY; // Find enemy while (i > 0 && i < 7 && j > 0 && j < 7 && (_pieces[ColLineToPos(i, j)] == EmptyPiece || ColLineToPos(i, j) == startPos)) { i += incX; j += incY; } if (i > 0 && i < 7 && j > 0 && j < 7 && (_pieces[ColLineToPos(i, j)] & ~King) == enemyColor && !lastPos.Contains(ColLineToPos(i, j))) { lastPos.push_back(ColLineToPos(i, j)); i += incX; j += incY; var saveI = i; var saveJ = j; JavaList <object> tempMoves; while (i >= 0 && i <= 7 && j >= 0 && j <= 7 && (_pieces[ColLineToPos(i, j)] == EmptyPiece || ColLineToPos(i, j) == startPos)) { int dir; if (incX == 1 && incY == 1) { dir = LastDirectionLeftAbove; } else if (incX == -1 && incY == -1) { dir = LastDirectionRightBelow; } else if (incX == -1 && incY == 1) { dir = LastDirectionRightAbove; } else { dir = LastDirectionLeftBelow; } var tempPos = lastPos.Clone(); tempMoves = FindAllLegalKingAttackMoves(tempPos, ColLineToPos(i, j), dir, playerColor, enemyColor); if (Any(tempMoves)) { moves.AppendToTail(AddNewGameMovement(new PlayerMove(currentPos, ColLineToPos(i, j)), tempMoves)); } i += incX; j += incY; } lastPos.pop_back(); if (moves.IsEmpty()) { i = saveI; j = saveJ; while (i >= 0 && i <= 7 && j >= 0 && j <= 7 && (_pieces[ColLineToPos(i, j)] == EmptyPiece || ColLineToPos(i, j) == startPos)) { tempMoves = new JavaList <object>(); tempMoves.push_back(new PlayerMove(currentPos, ColLineToPos(i, j))); moves.push_back(tempMoves); i += incX; j += incY; } } } return(moves); }