//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(); } }