示例#1
0
 private void ValidateTransition(SquareStates oldState, SquareStates newState)
 {
     if (_squareStateTransitions.IsValidTransition(oldState, newState) == false)
     {
         throw new InvalidStateTransitionException($"Old state: {oldState}, new state: {newState}");
     }
 }
    IEnumerator SwitchToStraight()
    {
        yield return(new WaitForSeconds(switchToStraightTime));

        currentFlyerState  = SquareStates.flyStraight;
        switchingCoroutine = null;
    }
示例#3
0
        private bool IsPlaceForVerticalShipTest(int gridSize, int shipSize)
        {
            var filler  = new ShipsVerticalFiller(null);
            var squares = new SquareStates[gridSize, gridSize];

            return(filler.IsPlaceForVerticalShip(squares, gridSize - 1, 0, 0, shipSize));
        }
示例#4
0
        private void ValidateChangeSquareState(SquareStates expectedState, SquareStates returnedState, int x, int y, IGrid grid)
        {
            Assert.AreEqual(expectedState, returnedState);

            var squareState = grid.GetSquares()[x, y];

            Assert.AreEqual(expectedState, squareState);
        }
示例#5
0
        public void Move()
        {
            //if (_Animate)
            //{
            //    AnimateSquare();
            //    return;
            //}

            if (_Destination == PointF.Empty)
            {
                return;
            }

            _PrevPosition = _Position;
            _SquareState  = SquareStates.Moving;

            if (_Destination.X - _Position.X > 0 && _Destination.X - _Position.X + _SpeedX < 0)
            {
                _Position.X = _Destination.X;
            }
            else if (_Destination.X - _Position.X < 0 && _Destination.X - _Position.X + _SpeedX > 0)
            {
                _Position.X = _Destination.X;
            }
            else if (_Destination.X == _Position.X)
            {
            }
            else
            {
                _Position.X = _Position.X + (float)_SpeedX;
            }

            if (_Destination.Y - _Position.Y > 0 && _Destination.Y - _Position.Y + _SpeedY < 0)
            {
                _Position.Y = _Destination.Y;
            }
            else if (_Destination.Y - _Position.Y < 0 && _Destination.Y - _Position.Y + _SpeedY > 0)
            {
                _Position.Y = _Destination.Y;
            }
            else if (_Destination.Y == _Position.Y)
            {
            }
            else
            {
                _Position.Y = _Position.Y + (float)_SpeedY;
            }

            if (_Position == _Destination)
            {
                _DestinationReached = true;
                _Destination        = PointF.Empty;
                _SquareState        = SquareStates.Stopped;
            }
        }
示例#6
0
        public void Fill_Negative(int gridSize, int shipSize, int shipCount)
        {
            var ships = PrepareShips(new Dictionary <int, int>()
            {
                { shipSize, shipCount }
            });
            var filler  = new ShipsVerticalFiller(ships);
            var squares = new SquareStates[gridSize, gridSize];

            filler.Fill(ref squares, gridSize);
        }
示例#7
0
        public void Fill_Positive(int gridSize, int shipSize, int shipCount)
        {
            var ships = PrepareShips(new Dictionary <int, int>()
            {
                { shipSize, shipCount }
            });
            var filler  = new ShipsVerticalFiller(ships);
            var squares = new SquareStates[gridSize, gridSize];

            var shipsOnGrid = filler.Fill(ref squares, gridSize);

            Assert.AreEqual(shipCount, shipsOnGrid.Count, $"There should be {shipCount} ships placed on grid ({gridSize}).");
        }
    public override void Start()
    {
        base.Start();
        currentFlyerState = SquareStates.flyStraight;
        rb      = GetComponent <Rigidbody>();
        rb.drag = 20.0f;
        //switchingCoroutine = StartCoroutine(SwitchToSpin());
        circleSwitcher = 0;

        switchToStraightTime = 0.7f;
        switchToCurveTime    = 1.5f;
        arcStage             = 1;
    }
示例#9
0
        public void ChangeSquareState_Test()
        {
            int          size      = 3;
            int          x         = 1;
            int          y         = 1;
            SquareStates shipState = SquareStates.Ship;

            var grid = PrepareEmptyGridWithTransition(size, shipState);

            var returnedState = grid.ChangeSquareState(new Coordinates(x, y), null);

            ValidateChangeSquareState(shipState, returnedState, x, y, grid);
        }
示例#10
0
        private IGrid PrepareEmptyGridWithTransition(int size, SquareStates stateToReturn)
        {
            var returnShipTransitionMoq = new Mock <ISquareStateTransition>();

            returnShipTransitionMoq
            .Setup(stm => stm.GetNewState(It.IsAny <SquareStates>()))
            .Returns(stateToReturn);

            returnShipTransitionMoq
            .Setup(stm => stm.GetNewState(It.IsAny <SquareStates>(), It.IsAny <SquareStates>()))
            .Returns(stateToReturn);

            return(new Grid(size, null, returnShipTransitionMoq.Object));
        }
    IEnumerator SwitchToSpin()
    {
        yield return(new WaitForSeconds(switchToCurveTime));

        currentFlyerState = SquareStates.spin;

        arcStage++;
        if (arcStage == 5)
        {
            arcStage = 1;
        }

        switchingCoroutine = null;
    }
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            SquareTypeIndex pi = value as SquareTypeIndex;

            if (pi == null)
            {
                return(null);
            }

            SquareStates src = (SquareStates)((byte)pi._type);
            Style        s   = new Style(typeof(Button));

            s.Setters.Add(new Setter(Button.BackgroundProperty, Brushes.Transparent));
            Binding b = new Binding();

            switch (src)
            {
            case SquareStates.EMPTY:
                b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(UserControl), 1);
                b.Path           = new PropertyPath("DataContext.clickEmpty");
                s.Setters.Add(new Setter(Button.CommandProperty, b));
                return(s);

            case SquareStates.ALLIED_PIECE:
                b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(UserControl), 1);
                b.Path           = new PropertyPath("DataContext.clickAllied");
                s.Setters.Add(new Setter(Button.CommandProperty, b));
                s.Setters.Add(new Setter(Button.CommandParameterProperty, pi._index));

                return(s);

            case SquareStates.TARGET_SQUARE:
                b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(UserControl), 1);
                b.Path           = new PropertyPath("DataContext.clickTarget");
                s.Setters.Add(new Setter(Button.BackgroundProperty, new SolidColorBrush(Color.FromArgb(150, 155, 255, 155))));
                s.Setters.Add(new Setter(Button.CommandProperty, b));
                s.Setters.Add(new Setter(Button.CommandParameterProperty, pi._index));
                return(s);

            case SquareStates.SELECTED_SQUARE:
                b.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(UserControl), 1);
                b.Path           = new PropertyPath("DataContext.clickCurrent");
                s.Setters.Add(new Setter(Button.CommandProperty, b));
                return(s);

            default:
                return(s);
            }
        }
示例#13
0
        public void AnimateSquare()
        {
            if (!_Animate)
            {
                return;
            }

            _SquareState = SquareStates.Animating;

            if (_AnimationState == AnimationStates.Enlarge)
            {
                _AnimationPosition.X = _AnimationPosition.X - (float)_AnimateSpeed;
                _AnimationPosition.Y = _AnimationPosition.Y - (float)_AnimateSpeed;

                _AnimationWidth = _AnimationWidth + (_AnimateSpeed * 2);

                if (_AnimationPosition.X <= _Position.X - _AnimateMax || _AnimationPosition.Y <= _Position.Y - _AnimateMax)
                {
                    _AnimationPosition.X = _Position.X - (float)_AnimateMax;
                    _AnimationPosition.Y = _Position.Y - (float)_AnimateMax;

                    _AnimationState = AnimationStates.Shrink;
                }
            }
            else if (_AnimationState == AnimationStates.Shrink)
            {
                _AnimationPosition.X = _AnimationPosition.X + (float)_AnimateSpeed;
                _AnimationPosition.Y = _AnimationPosition.Y + (float)_AnimateSpeed;

                _AnimationWidth = _AnimationWidth - (_AnimateSpeed * 2);

                if (_AnimationPosition.X >= _Position.X || _AnimationPosition.Y >= _Position.Y)
                {
                    _AnimationPosition.X = _Position.X;
                    _AnimationPosition.Y = _Position.Y;
                    _AnimationWidth      = _Width;

                    _AnimationState = AnimationStates.None;
                    _Animate        = false;

                    _SquareState = SquareStates.Stopped;
                }
            }
        }
示例#14
0
        public static char GetCharFromSquareState(SquareStates state)
        {
            switch (state)
            {
            case SquareStates.Ship:
            case SquareStates.HittedShip:
            case SquareStates.Virgin:
                return(' ');

            case SquareStates.SunkShip:
                return('X');

            case SquareStates.MissedShot:
                return('*');

            default:
                return('?');
            }
        }
示例#15
0
        public static string GetFormat(SquareStates state)
        {
            switch (state)
            {
            case SquareStates.Ship:
                return("bg-primary");

            case SquareStates.HittedShip:
                return("bg-warning");

            case SquareStates.SunkShip:
                return("bg-danger");

            case SquareStates.Virgin:
                return("bg-white");

            case SquareStates.MissedShot:
                return("bg-secondary");

            default:
                return("bg-white");
            }
        }
示例#16
0
 private static SquareStates GetState(SquareStates currentState) => currentState switch
 {
示例#17
0
 public void ChangeState(SquareStates _state)
 {
     this.state = _state;
 }
示例#18
0
        private void SetStateForWholeShip(Coordinates coordinates, SquareStates newState)
        {
            var ship = GetShip(coordinates);

            ship.Parts.ForEach(p => Squares[p.X, p.Y] = newState);
        }
示例#19
0
 public void StopAnimation()
 {
     _Animate        = false;
     _AnimationState = AnimationStates.None;
     _SquareState    = SquareStates.Stopped;
 }
示例#20
0
 public void SetSquareState(int x, int y, SquareStates newState)
 {
     Squares[x, y] = newState;
 }
示例#21
0
 public SquareStates GetNewState(SquareStates currentState, SquareStates suggestedState)
 {
     return(UpdateState(new Tuple <SquareStates, SquareStates>(currentState, suggestedState)));
 }
示例#22
0
 public SquareStates GetNewState(SquareStates currentState)
 {
     return(UpdateState(currentState));
 }
示例#23
0
 public void UpdateOpponentGrid(Coordinates coordinates, SquareStates newState)
 {
     OpponentGrid.ChangeSquareState(coordinates, newState);
 }