예제 #1
0
 void knightMenuEntry_Selected(object sender, PlayerIndexEventArgs e)
 {
     ChessboardLogics.MakeMove(moveToMake + Piece.PiecesTypesLetters[PiecesTypes.Knight]);
     DoMove(sender, e);
 }
예제 #2
0
        public override void HandleInput(InputState input)
        {
            KeyboardState keybState = Keyboard.GetState();

            if ((keybState.IsKeyUp(Keys.T) && (IsTKeyDown)))
            {
                IsTKeyDown = false;
            }
            if (((keybState.IsKeyDown(Keys.T))
                 &&
                 ((keybState.IsKeyDown(Keys.LeftControl)) || (keybState.IsKeyDown(Keys.RightControl))))
                &&
                (!IsTKeyDown))
            {
                IsTKeyDown = true;

                //facciamo in modo che se si tira indietro tutti i giocatori diventino umani
                foreach (Side s in Game.StatusCurrent.Sides)
                {
                    s.PlayerType = PlayerType.Human;
                }

                //ricarichiamo la form in modo che mostri i dati aggiornati
                Game.FormCollection["frmGamePlayScreen"].Show();

                ChessboardLogics.Takeback();
                UpdateSquares();
            }

            if (!ChessboardLogics.IsComputerThinking() && (Mouse.GetState().LeftButton == ButtonState.Pressed))
            {
                PositionableModel closestClickedModel = GetClosestClickedModel();

                if (closestClickedModel != null)
                {
                    if (closestClickedModel.GetType() == typeof(Square)) //it is a selected square for sure
                    {
                        Square sq   = closestClickedModel as Square;
                        string move = SelectedPiece.OccupiedSquare.ToString() +
                                      sq.ToString();

                        if (ChessboardLogics.IsPromo(move))
                        {
                            screenManager.AddScreen(
                                new PromotionSelectionMenuScreen(move, SelectedPiece.OccupiedSquare, sq),
                                this.controllingPlayer
                                );
                        }
                        else
                        {
                            ChessboardLogics.MakeMove(move);
                            Game.StatusCurrent.Result = (PossibleResult)ChessboardLogics.GetResult();
                            //move the piece
                            SelectedPiece.OccupiedSquare.OccupyingPiece = null;
                            sq.OccupyingPiece = SelectedPiece;
                            Game.FormCollection["frmGamePlayScreen"]["lblTurn"].Text = "It's " + Game.StatusCurrent.SideToMove + " turn";

                            //UpdateSquares();
                            //if (Game.StatusCurrent.SideToMove == SideType.White)
                            //    Game.StatusCurrent.SideToMove = SideType.Black;
                            //else
                            //    Game.StatusCurrent.SideToMove = SideType.White;
                        }
                        SelectedPiece.IsSelected = false;
                        SelectedPiece            = null;
                        foreach (Square sqr in squares)
                        {
                            sqr.IsSelected = false;
                        }
                    }
                    else //else it's a piece
                    {
                        Piece clickedPiede = closestClickedModel as Piece;
                        if (clickedPiede.Side == Game.StatusCurrent.SideToMove)
                        {
                            if (SelectedPiece != null)
                            {
                                SelectedPiece.IsSelected = false;
                            }
                            //select all moveable squares
                            SelectedPiece            = closestClickedModel as Piece;
                            SelectedPiece.IsSelected = true;
                            string from = SelectedPiece.OccupiedSquare.ToString();

                            foreach (Square sq in squares)
                            {
                                string to = sq.ToString();
                                if (ChessboardLogics.CanMove(from + to) != 0)
                                {
                                    sq.IsSelected = true;
                                }
                                else
                                {
                                    sq.IsSelected = false;
                                }
                            }
                        }
                    }
                }
            }

            base.HandleInput(input);
        }