Exemplo n.º 1
0
            //for selecting/clicking
            public void ClickOnChessboard(int mouseX, int mouseY, Players player)
            {
                int horizontal, vertical;
                horizontal = mouseX / sizeOfCell;
                vertical = mouseY / sizeOfCell;
                //if cell exists
                if (((horizontal > 0) && (horizontal < 9) && (vertical > 0) && (vertical < 9)) ||
                    //special corners
                    (((horizontal == 9) && (vertical == 8)) ||
                    ((horizontal == 0) && (vertical == 1)) ||
                    ((horizontal == 8) && (vertical == 0)) ||
                    ((horizontal == 1) && (vertical == 9))))
                {
                    bool wasAttack = false;
                    if (GetChessmanOnCoordinates(horizontal, vertical) != null)
                    {

                        if (GetChessmanOnCoordinates(horizontal, vertical) != selectedChessman)
                        {
                            //attack method if enemy
                            if (selectedChessman != null)
                            {
                                selectedChessman.ShowPossibleMovements(true);
                                selectedChessman.ShowPossibleAttacks(true);
                                if (selectedChessman.IsThatPossibleAttack(horizontal, vertical))
                                {
                                    selectedChessman.AttackChessmanOnCoordinates(horizontal, vertical);
                                    selectedChessmanStr = "";
                                    selectedChessman = null;
                                    wasAttack = true;
                                    TurnAnalyse();
                                    //turn happened
                                    game.ToggleTurn();
                                }
                            }
                            //is rightfully select
                            if ((!wasAttack) &&
                                (player == GetChessmanOnCoordinates(horizontal, vertical).GetChessmanOwner()))
                            {
                                //is check and could king move
                                if (game.GetPlayerObject(player).GetCheckState())
                                {
                                    if (!(game.GetPlayerObject(player).CanKingMove()))
                                    {
                                        if (GetChessmanOnCoordinates(horizontal, vertical).GetChessmanName() != ChessmenNames.King)
                                        {
                                            selectedChessman = GetChessmanOnCoordinates(horizontal, vertical);
                                            selectedChessmanStr = selectedChessman.GetNameOfChessmanRussianNominative() + ' ';
                                            selectedChessman.ShowPossibleMovements(false);
                                            selectedChessman.ShowPossibleAttacks(false);
                                        }
                                        else
                                        {
                                            MessageBox.Show("Вам объявлен шах, но король не может двигаться.", "Внимание");
                                        }
                                    }
                                    else
                                    {
                                        if (GetChessmanOnCoordinates(horizontal, vertical).GetChessmanName() != ChessmenNames.King)
                                        {
                                            MessageBox.Show("Вам объявлен шах. Ходить может только король.", "Внимание");
                                        }
                                        else
                                        {
                                            selectedChessman = GetChessmanOnCoordinates(horizontal, vertical);
                                            selectedChessmanStr = selectedChessman.GetNameOfChessmanRussianNominative() + ' ';
                                            selectedChessman.ShowPossibleMovements(false);
                                            selectedChessman.ShowPossibleAttacks(false);
                                        }
                                    }
                                }
                                else
                                {
                                    //if (GetChessmanOnCoordinates(horizontal, vertical).CanMoveOrAttack())
                                    //{
                                        selectedChessman = GetChessmanOnCoordinates(horizontal, vertical);
                                        selectedChessmanStr = selectedChessman.GetNameOfChessmanRussianNominative() + ' ';
                                        selectedChessman.ShowPossibleMovements(false);
                                        selectedChessman.ShowPossibleAttacks(false);
                                    //}
                                }
                            }
                        }
                        else
                        {
                            //if repeat click then deselect chessman
                            selectedChessman.ShowPossibleMovements(true);
                            selectedChessman.ShowPossibleAttacks(true);
                            selectedChessmanStr = "";
                            selectedChessman = null;
                        }
                    }
                    else
                    {
                        //move method if possible move
                        if (selectedChessman != null)
                        {
                            selectedChessmanStr = "";
                            selectedChessman.ShowPossibleMovements(true);
                            selectedChessman.ShowPossibleAttacks(true);
                            if (selectedChessman.IsThatPossibleMove(horizontal, vertical))
                            {
                                selectedChessman.MoveChessman(horizontal, vertical, true);
                                TurnAnalyse();
                                //turn happened
                                game.ToggleTurn();
                            }
                            selectedChessman = null;
                        }
                    }
                    chessboardPicturebox.Refresh();
                }
            }