Пример #1
0
    public void TryMove(int x1, int y1, int x2, int y2)
    {
        var startDrag = new Vector2(x1, y1);
        var endDrag   = new Vector2(x2, y2);
        var p         = _checkers.GetPiece(x1, y1);

        // Out of bounds
        if (x2 < 0 || x2 >= 8 || y2 < 0 || y2 >= 8)
        {
            //Если мы нажали вне границы то переносим шашку на стартувую позицию
            if (p != null)
            {
                MovePiece(pieces[p], x1, y1);
            }

            _isSelected = false;
            return;
        }

        if (p != null)
        {
            // If it has not moved (если шашку не перемещали)
            if (endDrag == startDrag || !_checkers.IsValidMove(p, x1, y1, x2, y2))
            {
                MovePiece(pieces[p], x1, y1);
                _isSelected = false;
                return;
            }

            // Did we kill anything
            // If this is a jump
            if (Mathf.Abs(x2 - x1) == 2)
            {
                // Для получения средней шашки между двумя
                var middle = _checkers.GetPiece((x1 + x2) / 2, (y1 + y2) / 2);
                if (middle != null)
                {
                    // Удаляем среднюю шашку между двумя
                    _checkers.SetPiece(null, (x1 + x2) / 2, (y1 + y2) / 2);
                    DestroyImmediate(pieces[middle].gameObject);
                    _checkers.HasKilled = true;
                }
            }

            // If we did not kill anything and just moved
            // when we were supposed to do a forced move
            var forcedPieces = _checkers.ScanForForcedMoves();
            if (forcedPieces.Count != 0 && _checkers.HasKilled == false)
            {
                MovePiece(pieces[p], x1, y1);
                _isSelected = false;
            }
            else
            {
                _checkers.MovePiece((x1, y1), (x2, y2));
                MovePiece(pieces[p], x2, y2);
                _isSelected = false;
                _checkers.EndTurn(p, x1, y1, x2, y2);
            }
        }
    }