Beispiel #1
0
        public void Move(Board board, string position)
        {
            var move = new ChessDotNet.Move(board.SelectedCell.Position, position, board.Side, 'Q');

            foreach (var item in board.Cells)
            {
                item.ValidCell = "Hidden";
            }

            if (board.ChessLogic.IsValidMove(move))
            {
                var moveType = board.ChessLogic.MakeMove(move, true);
                board.UpdateSourceIfPromotion(moveType, position, board.Side);
                board.SelectedCell.Source = null;
                board.State = new PieceDroped();
                board.UpdateSourceIfEnPassant(moveType, position, board.Side);
                board.UpdateSourceIfCastling(moveType, position);

                TcpChessClient.getInstance().Move(move.OriginalPosition.ToString(), move.NewPosition.ToString());
            }
            else
            {
                board.State = new PieceDroped();
                board.State.Move(board, position);
            }
        }
Beispiel #2
0
        private void Disconnect()
        {
            bool isWhitePlayer = WhitePlayerName == TcpChessClient.getInstance().Username ? true : false;

            if (State == "Playing")
            {
                if (isWhitePlayer)
                {
                    TcpChessClient.getInstance().Rating = TcpChessClient.getInstance().Rating + WhitePlayerRatingForLose.Value;
                }
                else
                {
                    TcpChessClient.getInstance().Rating = TcpChessClient.getInstance().Rating + BlackPlayerRatingForLose.Value;
                }
            }
            else
            {
                if (isWhitePlayer)
                {
                    TcpChessClient.getInstance().Rating = WhitePlayerRating.Value;
                }
                else
                {
                    TcpChessClient.getInstance().Rating = BlackPlayerRating.Value;
                }
            }
            TcpChessClient.getInstance().DisconnectFromTheGame();
            _manager.RequestNavigate("MainRegion", "FindGame");
        }
Beispiel #3
0
        public MenuViewModel(IRegionManager manager)
        {
            _manager = manager;

            GoToFindGameCommand = new DelegateCommand(() =>
            {
                TcpChessClient.getInstance().GetGames();
                _manager.RequestNavigate("MainRegion", "FindGame");
            });

            GoToProfileCommand = new DelegateCommand(() =>
            {
                var parameters = new NavigationParameters();
                parameters.Add("Rating", TcpChessClient.getInstance().Rating);
                _manager.RequestNavigate("LeftRegion", "Profile", parameters);
            });

            GoToSignupCommand = new DelegateCommand(() => _manager.RequestNavigate("LeftRegion", "Signup"));

            GoToLoginCommand = new DelegateCommand(() => _manager.RequestNavigate("LeftRegion", "Login"));

            ExitCommand = new DelegateCommand(SetNotAuthentificatedState);

            TcpChessClient.getInstance().Authentificated += () =>
            {
                SetAuthentificatedState();
                _manager.RequestNavigate("LeftRegion", "Menu");
            };

            SetNotAuthentificatedState();
        }
 private void CreateNewGame()
 {
     TcpChessClient.getInstance().CreateNewGame(
         GameName = string.IsNullOrWhiteSpace(GameName) ? "Unnamed" : GameName,
         WhiteSide == true ? ChessDotNet.Player.White : ChessDotNet.Player.Black,
         Password);
     ClearFields();
 }
Beispiel #5
0
 private void SendMessage()
 {
     if (!string.IsNullOrWhiteSpace(Message))
     {
         TcpChessClient.getInstance().SendMessage(Message);
         string newMessage = "Вы : " + Message + "\n";
         Messages += newMessage;
         Message   = null;
     }
 }
        public ChessBoardViewModel(IEventAggregator ea)
        {
            _ea = ea;

            _ea.GetEvent <GameDescriptionSentEvent>().Subscribe(InitializeBoard);

            TcpChessClient.getInstance().PlayerMoved += (origPos, newPos) =>
            {
                Board.EnemyMoved(origPos, newPos);
            };

            TcpChessClient.getInstance().GameStateChanged += (gameDesc) => { _state = gameDesc.StateDerscription; };
        }
Beispiel #7
0
        public DescriptionViewModel(IEventAggregator ea, IRegionManager manager)
        {
            _manager = manager;
            _ea      = ea;

            DisconnectCommand = new DelegateCommand(Disconnect);

            _ea.GetEvent <GameDescriptionSentEvent>().Subscribe(InitializeGameDescription);

            TcpChessClient.getInstance().GameStateChanged += (gameDesc) =>
            {
                InitializeGameDescription(new GameDesc(gameDesc));
            };
        }
Beispiel #8
0
        public ChatViewModel(IEventAggregator ea)
        {
            _ea = ea;

            SendMessageCommand = new DelegateCommand(SendMessage);

            _ea.GetEvent <GameDescriptionSentEvent>().Subscribe((desc) => { Message = null; Messages = null; });

            TcpChessClient.getInstance().MessageRecieved += (username, message) =>
            {
                string newMessage = username + " : " + message + "\n";
                Messages += newMessage;
            };
        }
Beispiel #9
0
        public ProfileViewModel(IRegionManager manager)
        {
            _manager = manager;
            Username = TcpChessClient.getInstance().Username;

            TcpChessClient.getInstance().UsernameChanged += () => Username = TcpChessClient.getInstance().Username;

            BackToMenuCommand = new DelegateCommand(() =>
            {
                ClearFields();
                _manager.RequestNavigate("LeftRegion", "Menu");
            });

            ChangeUsernameCommand = new DelegateCommand(ChangeUsername);
        }
        private void InitializeBoard(GameDesc desc)
        {
            _state = desc.State;
            ChessDotNet.Player side =
                TcpChessClient.getInstance().Username == desc.WhiteUsername ?
                ChessDotNet.Player.White : ChessDotNet.Player.Black;
            Board             = new Board(side);
            Cells             = Board.Cells;
            HorizontalIndexes = Board.HorizontalIndexes;
            VerticalIndexes   = Board.VerticalIndexes;

            MoveCommand = new DelegateCommand <string>((move) => { if (_state == "Playing")
                                                                   {
                                                                       Board.MakeMove(move);
                                                                   }
                                                       });
        }
Beispiel #11
0
 private void ChangeUsername()
 {
     if (!string.IsNullOrWhiteSpace(NewUsername) && !string.IsNullOrWhiteSpace(Password))
     {
         string usernamePattern = "^([А-ЯЁа-яё0-9a-zA-Z_]{4,23})$";
         string passwordPattern = "^([А-ЯЁа-яё0-9a-zA-Z_!*#&?%^]{4,23})$";
         if (Regex.IsMatch(NewUsername, usernamePattern) && Regex.IsMatch(Password, passwordPattern))
         {
             TcpChessClient.getInstance().ChangeUsername(NewUsername, Password);
             ClearFields();
         }
         else
         {
             string message = "Данные должны содержать от 4 до 23 символов, не содержать пробелов и запрещенных символов";
             TcpChessClient.getInstance().ShowInfo(message);
         }
     }
 }
Beispiel #12
0
        public FindGameViewModel(IRegionManager manager, IEventAggregator ea)
        {
            _ea           = ea;
            _manager      = manager;
            FilteredGames = new BindingList <GameDesc>();
            _games        = new List <GameDesc>();

            _ea.GetEvent <PasswordSentEvent>().Subscribe((password) =>
            {
                ConnectToTheGame(IdLockedGame, password);
            });

            BackToMainMenuCommand = new DelegateCommand(() =>
            {
                SearchField = "";
                _manager.RequestNavigate("MainRegion", "MainMenu");
            });

            GoToCreateGameCommand = new DelegateCommand(() =>
            {
                SearchField = "";
                _manager.RequestNavigate("MainRegion", "CreateGame");
            });

            UpdateCommand = new DelegateCommand(() =>
            {
                SearchField = "";
                TcpChessClient.getInstance().GetGames();
            });

            ConnectCommand = new DelegateCommand(Connect);

            TcpChessClient.getInstance().GamesRecieved += (games) =>
            {
                var newGames = new List <GameDesc>();
                foreach (var game in games)
                {
                    newGames.Add(new GameDesc(game));
                }
                _games        = new List <GameDesc>(newGames);
                FilteredGames = new BindingList <GameDesc>(_games);
            };
        }
        public CreateGameViewModel(IRegionManager manager)
        {
            _manager = manager;

            BackToFindGameCommand = new DelegateCommand(() =>
            {
                ClearFields();
                _manager.RequestNavigate("MainRegion", "FindGame");
            });

            CreateNewGameCommand = new DelegateCommand(CreateNewGame);

            TcpChessClient.getInstance().ConnectedToTheGame += (gameDescription) =>
            {
                var parameters = new NavigationParameters();
                parameters.Add("CurrentGame", new GameDesc(gameDescription));
                _manager.RequestNavigate("MainRegion", "Game", parameters);
            };
        }
Beispiel #14
0
        public MainWindowViewModel(IEventAggregator ea)
        {
            _ea = ea;
            PasswordPopupVisibility = "Hidden";
            CallbackPopupVisibility = "Hidden";
            LoadingPopupVisibility  = "Hidden";

            ClosePopupCommand = new DelegateCommand(() =>
            {
                CallbackPopupVisibility = "Hidden";
                PasswordPopupVisibility = "Hidden";
            });

            SendPasswordCommand = new DelegateCommand(() =>
            {
                if (!string.IsNullOrWhiteSpace(Password))
                {
                    PasswordPopupVisibility = "Hidden";
                    _ea.GetEvent <PasswordSentEvent>().Publish(Password);
                }
            });

            _ea.GetEvent <GameLockedEvent>().Subscribe(() =>
            {
                Password = "";
                PasswordPopupVisibility = "Visible";
            });

            TcpChessClient.getInstance().CallbackInfoRecieved += (result) =>
            {
                CallbackPopupMessage    = result.Message;
                CallbackPopupVisibility = "Visible";
            };

            TcpChessClient.getInstance().CommandExecutionStarted += () => LoadingPopupVisibility = "Visible";

            TcpChessClient.getInstance().CommandExecutionStoped += () => LoadingPopupVisibility = "Hidden";
        }
Beispiel #15
0
 private void ConnectToTheGame(int gameId, string gamePassword)
 {
     SearchField = "";
     TcpChessClient.getInstance().ConnectToTheGame(gameId, gamePassword);
 }