private void InitCommand() { CellSelectedCommand = new RelayCommand <Cell>(async(cell) => { if (From) { if ((cell.ChipColor == 1 && Priority == 1) || (cell.ChipColor == 2 && Priority == 2)) { Start = Array.IndexOf(MyBoard.MyCells, cell); From = false; RaisePropertyChanged(() => Start); } else { await _messageService.Show("You cant check foreign cell"); } } else { RaisePropertyChanged(() => End); if ((cell.ChipColor == 1 && Priority == 1) || (cell.ChipColor == 2 && Priority == 2) || (cell.ChipColor == 0)) { End = Array.IndexOf(MyBoard.MyCells, cell); if (End > Start && Priority == 1) { int moveLength = End - Start; if (MyBoard.Moves.Any(m => m == moveLength)) { MyBoard.Moves.Remove(moveLength); MyBoard.MyCells[Start].NumOfChip -= 1; if (MyBoard.MyCells[Start].NumOfChip == 0) { MyBoard.MyCells[Start].ChipColor = 0; } MyBoard.MyCells[End].NumOfChip += 1; if (MyBoard.MyCells[End].ChipColor == 0) { MyBoard.MyCells[End].ChipColor = 1; } await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { PlayGround = new ObservableCollection <Cell>(MyBoard.MyCells); DispatcherHelper.CheckBeginInvokeOnUI(() => { RaisePropertyChanged(() => PlayGround); }); }); if (MyBoard.Moves.Count == 0) { MyBoard.Dice1.Active = false; MyBoard.Dice2.Active = false; Start = 0; End = 0; DispatcherHelper.CheckBeginInvokeOnUI(() => { RaisePropertyChanged(() => Start); RaisePropertyChanged(() => End); }); await _messageService.ShowContent($"Wating for opponent move..."); await _hubService.Move(MyBoard.MyCells, MyBoard.User2); } From = true; } else { await _messageService.Show("You cant do such move"); } } else if (End < Start && Priority == 2) { int moveLength = Start - End; if (MyBoard.Moves.Any(m => m == moveLength)) { MyBoard.Moves.Remove(moveLength); MyBoard.MyCells[Start].NumOfChip -= 1; if (MyBoard.MyCells[Start].NumOfChip == 0) { MyBoard.MyCells[Start].ChipColor = 0; } MyBoard.MyCells[End].NumOfChip += 1; if (MyBoard.MyCells[End].ChipColor == 0) { MyBoard.MyCells[End].ChipColor = 2; } await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { PlayGround = new ObservableCollection <Cell>(MyBoard.MyCells); DispatcherHelper.CheckBeginInvokeOnUI(() => { RaisePropertyChanged(() => PlayGround); }); }); if (MyBoard.Moves.Count == 0) { MyBoard.Dice1.Active = false; MyBoard.Dice2.Active = false; Start = 0; End = 0; DispatcherHelper.CheckBeginInvokeOnUI(() => { RaisePropertyChanged(() => Start); RaisePropertyChanged(() => End); }); await _messageService.ShowContent($"Wating for opponent move..."); await _hubService.Move(MyBoard.MyCells, MyBoard.User2); } From = true; } else { await _messageService.Show("You cant do such move"); } } } else { await _messageService.Show("You cant check foreign cell"); } } }); ThrowDicesCommand = new RelayCommand(async() => { _gameService.ThrowDice(MyBoard.Dice1); _gameService.ThrowDice(MyBoard.Dice2); await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { RaisePropertyChanged(() => MyBoard.Dice1); RaisePropertyChanged(() => MyBoard.Dice2); }); if (FirstThrow) { await _hubService.FirstThrow(MyBoard.Dice1.Number + MyBoard.Dice2.Number, MyBoard.User2); FirstThrow = false; MyBoard.Dice1.Active = false; MyBoard.Dice2.Active = false; await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { RaisePropertyChanged(() => MyBoard.Dice1); RaisePropertyChanged(() => MyBoard.Dice2); }); MyBoard.Dice1.Active = false; RaisePropertyChanged(() => MyBoard.Dice1); } else { MyBoard.Moves.Add(MyBoard.Dice1.Number); MyBoard.Moves.Add(MyBoard.Dice2.Number); } From = true; }); BackCommand = new RelayCommand(async() => { _navigationService.NavigateTo("HomePage"); }); }