public CheckerElementViewModel(CheckerModel checkerModel, List <CheckerElementViewModel> emptyCheckerElementViewModels)
        {
            _checkerModel = checkerModel;
            _checkerModel.PositionChangedAction += PositionChangedAction;

            Side = checkerModel.Side;
            Type = checkerModel.Type;
            _pos = new PointViewModel(_checkerModel.Row, _checkerModel.Column);
            PossibleMovementElements = emptyCheckerElementViewModels.Where(x => _checkerModel.PossibleMovementElements.Any(y => x.Column == y.Column && x.Row == y.Row)).ToList();
        }
示例#2
0
        public ViewInfrastructure Create()
        {
            CheckCommand     checkCommand = new CheckCommand();
            CheckerModel     model        = new CheckerModel();
            CheckerViewModel viewModel    = new CheckerViewModel(model, checkCommand);
            CheckerView      view         = new CheckerView();

            checkCommand.CheckerViewModel = viewModel;

            return(new ViewInfrastructure(view, viewModel, model));
        }
        private IEnumerable <HistoryMove> GetHistoryActionsWithTaking(CheckerModel firstQueen, CheckerModel secondQueen)
        {
            var actionsHistory = new List <HistoryMove>();

            for (int i = 0; i < 8; i++)
            {
                actionsHistory.Add(new HistoryMove(false)
                {
                    MovedFromTo = new KeyValuePair <CheckerModel, CheckerModel>(firstQueen, new CheckerModel(1, 1, PieceType.Checker, Side.Empty)), DeletedList = { new KeyValuePair <CheckerModel, CheckerModel>(new CheckerModel(2, 2, PieceType.Checker, Side.Black), new CheckerModel(2, 2, PieceType.Checker, Side.Black)) }
                });
                actionsHistory.Add(new HistoryMove(false)
                {
                    MovedFromTo = new KeyValuePair <CheckerModel, CheckerModel>(secondQueen, new CheckerModel(2, 6, PieceType.Checker, Side.Empty)), DeletedList = { new KeyValuePair <CheckerModel, CheckerModel>(new CheckerModel(2, 2, PieceType.Checker, Side.White), new CheckerModel(2, 2, PieceType.Checker, Side.White)) }
                });
            }
            return(actionsHistory);
        }
示例#4
0
        private int CalculatePieceStrength(CheckerModel piece, bool isMainPlayer)
        {
            int strength = 1;

            if (piece.Type == PieceType.Checker)
            {
                if (piece.IsAtInitialPosition && (piece.Row == 7 || piece.Row == 0))
                {
                    strength += 2;
                }

                if (piece.Neighbors.Any(x => x.Side == piece.Side))
                {
                    strength += 1;
                }
                // Central positions are good
                if (piece.PossibleMovementElements.Any(x => x.Column == 2 && x.Row == 4 ||
                                                       x.Column == 3 && x.Row == 3 ||
                                                       x.Column == 4 && x.Row == 4 ||
                                                       x.Column == 5 && x.Row == 3))
                {
                    strength += 3;
                }


                // It's good to become a queen
                if (piece.PossibleMovementElements.Any(x => (isMainPlayer && x.Row == 7) || (!isMainPlayer && x.Row == 0)))
                {
                    strength += 15;
                }
            }
            else
            {
                //  Stronger if queen is on board
                strength += 19;
            }

            bool isGoldCheckerForMainPlayer   = isMainPlayer && piece.IsAtInitialPosition && piece.Column == 4 && piece.Row == 0;
            bool isGoldCheckerForSecondPlayer = !isMainPlayer && piece.IsAtInitialPosition && piece.Column == 3 && piece.Row == 7;

            if (isGoldCheckerForMainPlayer || isGoldCheckerForSecondPlayer)
            {
                strength += 5;
            }
            return(strength);
        }
        public void GetAllElementsInDiagonalFromCurrent_LeftDownInCorner_Returns_0()
        {
            //  Arrange
            var checker          = new CheckerModel(0, 0, PieceType.Checker, Side.White);
            var mainPlayCheckers = new List <CheckerModel>()
            {
                checker
            };
            var secondPlayerCheckers = new List <CheckerModel>()
            {
            };
            var dataProvider = new DataProvider(mainPlayCheckers, secondPlayerCheckers);
            var playerOne    = new MainPlayer(dataProvider, Side.White);

            //  Act
            var pathCalculator          = new PathCalculator(dataProvider, playerOne.PlayerPositions, true);
            var queueOfDiagonalElements = pathCalculator.GetAllElementsInDiagonalFromCurrent(checker, Diagonal.LeftDown);

            //  Assert
            Assert.AreEqual(0, queueOfDiagonalElements.Count);
        }
示例#6
0
        public void CalculateNeighbors_ForQueen_ShouldHaveBlackNeighbor()
        {
            //  Arrange
            var mainPlayCheckers = new List <CheckerModel> {
                new CheckerModel(4, 6, PieceType.Queen, Side.White)
            };
            var secondPlayerCheckers = new List <CheckerModel>()
            {
                new CheckerModel(1, 3, PieceType.Checker, Side.Black)
            };
            var playerOne = new MainPlayer(new DataProvider(mainPlayCheckers, secondPlayerCheckers), Side.White);

            //  Act
            playerOne.CalculateNeighbors();

            //  Assert
            List <CheckerModel> whiteCheckerNeighbors = playerOne.PlayerPositions.Single().Neighbors;
            CheckerModel        blackChecker          = secondPlayerCheckers.Single();

            Assert.IsTrue(whiteCheckerNeighbors.Contains(blackChecker));
        }
 public ViewInfrastructure(CheckerView view, CheckerViewModel viewModel, CheckerModel model)
 {
     this.CheckerView      = view;
     this.CheckerViewModel = viewModel;
     this.CheckerModel     = model;
 }
示例#8
0
 public CheckerViewModel(CheckerModel model, ICommand checkCommand)
 {
     this.model        = model;
     this.CheckCommand = checkCommand;
 }