Пример #1
0
            public void Dig()
            {
                DigOut();

                do
                {
                    var dir     = RHelper.GetRandomDirection();
                    var nextRow = _row;
                    var nextCol = _col;
                    RHelper.MoveInDirection(ref nextRow, ref nextCol, dir);

                    if (!CanMove(nextRow, nextCol))
                    {
                        continue;
                    }

                    _row = nextRow;
                    _col = nextCol;

                    if (!CanDig())
                    {
                        continue;
                    }

                    DigOut();
                    ++_digged;
                } while (_digged < _digGoal);
            }
Пример #2
0
        public bool ProcessTurn(int playerX, int playerY)
        {
            _map.SetWalkable(Position.X, Position.Y, true);
            _map.SetVisible(Position.X, Position.Y, true);

            _fovMap.CalculateFoV(Position.X, Position.Y, SightRadius);

            if (_fovMap.IsVisible(playerX, playerY))
            {
                _fovMap.ComputePath(Position.X, Position.Y, playerX, playerY);
            }

            int wantX;
            int wantY;

            if (!_fovMap.PathAvailable())
            {
                do
                {
                    wantX = Position.X;
                    wantY = Position.Y;
                    RHelper.MoveInDirection(ref wantY, ref wantX, RHelper.GetRandomDirection());
                } while (!_fovMap.IsWalkable(wantX, wantY));
            }
            else
            {
                wantX = _position.X;
                wantY = _position.Y;
                _fovMap.WalkPath(ref wantX, ref wantY);
            }

            _position.X = wantX;
            _position.Y = wantY;

            var onPlayer = playerX == _position.X && playerY == _position.Y;

            _map.SetWalkable(_position.X, _position.Y, onPlayer);
            _map.SetVisible(_position.X, _position.Y, onPlayer);

            return(onPlayer);
        }