예제 #1
0
        /*
         * Return true if move is end
         */
        public bool execPlayerMove(Board board, Position movePos)
        {
            if (currMoveScenarios == null)
            {
                allMoveScenarios  = moveFinder.getMoveScenarios(board, movePos);
                currMoveScenarios = allMoveScenarios;
                currMoveIndex     = 0;
            }
            else
            {
                currMoveScenarios = currMoveScenarios.getMatchScenarios(movePos, currMoveIndex);
                currMoveIndex++;

                if (currMoveScenarios.Count() == 1 && currMoveScenarios.getScenario(0).Count == currMoveIndex)
                {
                    execScenario(board, currMoveScenarios, 0);

                    currMoveScenarios = null;

                    return(true);
                }
            }

            return(false);
        }
예제 #2
0
        public void deletePlayerMove(Position toMovePos)
        {
            if (currMoveScenarios == null)
            {
                return;
            }

            if (toMovePos.Equals(currMoveScenarios.getFromPosition()))
            {
                currMoveScenarios = null;
                currMoveIndex     = 0;
            }
            else
            {
                int i = 0;

                foreach (Position p in currMoveScenarios.getScenario(0))
                {
                    if (!p.Equals(toMovePos))
                    {
                        break;
                    }

                    i++;
                }

                currMoveIndex = currMoveIndex - i - 1;

                if (currMoveIndex == -1)
                {
                    currMoveScenarios = allMoveScenarios;
                    currMoveIndex     = 0;
                }
                else
                {
                    Position currPos = currMoveScenarios.getScenario(0)[currMoveIndex];
                    currMoveScenarios = allMoveScenarios.getMatchScenarios(currPos, currMoveIndex);
                }
            }
        }
예제 #3
0
        public static void execScenario(Board board, MoveScenarios scenarios, int scenarioIndex)
        {
            List <Position> moves = new List <Position>();

            moves.Add(scenarios.getFromPosition());
            moves.AddRange(scenarios.getScenario(scenarioIndex));

            Position lastPosition = moves[moves.Count - 1];

            board.move(scenarios.getFromPosition(), lastPosition);

            if (board.isTurnToDame(lastPosition))
            {
                board.turnToDame(lastPosition);
            }

            Direction direction;
            Position  currPos;

            for (int i = 0; i < moves.Count - 1; i++)
            {
                direction = Direction.getDirection(moves[i], moves[i + 1]);
                currPos   = new Position(moves[i]);

                currPos.move(direction);

                while (!currPos.Equals(moves[i + 1]))
                {
                    if (!Board.isEmpty(board.getPiece(currPos)))
                    {
                        board.removePiece(currPos);
                    }

                    currPos.move(direction);
                }
            }

            board.switchCurrentColor();
        }