예제 #1
0
        /// <summary>
        /// Perform generation of new BonusLife.
        /// </summary>
        protected virtual void Generate()
        {
            GeneratedLife = new BonusLife(TimeSpan.FromSeconds(10));
            var pos = _coinsPositions[_random.Next(0, _coinsPositions.Count)];

            GeneratedLife.X = pos.Item1;
            GeneratedLife.Y = pos.Item2;
            Generated?.Invoke(this, EventArgs.Empty);
        }
예제 #2
0
        private IList <GameElement> GenerateElements(IEnumerable <GameElementInfo> info)
        {
            IList <GameElement> elements = new List <GameElement>();

            foreach (var gameElementInfo in info)
            {
                GameElement element;
                switch (gameElementInfo.Type)
                {
                case GameElementType.Block:
                    element = new Block();
                    break;

                case GameElementType.Coin:
                    element = new Coin();
                    break;

                case GameElementType.Portal:
                    element = new Portal()
                    {
                        PortalId = gameElementInfo.Id
                    };
                    break;

                case GameElementType.BonusLife:
                    element = new BonusLife();
                    break;

                case GameElementType.Player:
                    element = new Player();
                    break;

                case GameElementType.Enemy:
                    element = new Enemy();
                    break;

                default:
                    throw new InvalidEnumArgumentException();
                }
                element.X = gameElementInfo.X;
                element.Y = gameElementInfo.Y;
                elements.Add(element);
            }
            return(elements);
        }
예제 #3
0
 private void ConfigureLifesGeneratior()
 {
     _lifesGenerator            = new AdditionalLifeGenerator(_coinsPosition, _provider.AdditionalLifeGenerationInterval);
     _lifesGenerator.Generated += (sender, args) =>
     {
         BonusLife life = _lifesGenerator.GeneratedLife;
         if (life == null)
         {
             return;
         }
         life.Collected += (o, eventArgs) =>
         {
             _gameBoard.Children.Remove(o as Coin);
             Lifes++;
             Points += (o as BonusLife)?.PointReward ?? 0;
         };
         life.Disappeared += (o, eventArgs) => _gameBoard.Children.Remove(o as BonusLife);
         _gameBoard.Children.Add(life);
         life.Appear();
     };
     _lifesGenerator.Start();
 }
예제 #4
0
        /// <summary>
        /// Reads the information about the elements on GameBoard from file.
        /// </summary>
        /// <returns>The list of elements on the board.</returns>
        private IList <GameElement> ReadFile()
        {
            IList <GameElement> elements = new List <GameElement>();
            Stream stream = Application.GetResourceStream(new Uri(_path, UriKind.Relative))?.Stream;

            if (stream == null)
            {
                throw new InvalidOperationException("Cannot load gameboard");
            }
            using (var sr = new StreamReader(stream))
            {
                string line;
                Portal previousPortal = null;
                while ((line = sr.ReadLine()) != null)
                {
                    string[]    split = line.Split(' ');
                    GameElement element;
                    switch (split[0])
                    {
                    case "B":
                        element = new Block();
                        break;

                    case "C":
                        element = new Coin();
                        break;

                    case "P":
                        element = new Player();
                        break;

                    case "E":
                        element = new Enemy();
                        break;

                    case "BL":
                        element = new BonusLife();
                        break;

                    case "PO":
                        element = new Portal(previousPortal);
                        if (previousPortal == null)
                        {
                            previousPortal = (Portal)element;
                        }
                        else
                        {
                            previousPortal = null;
                        }
                        break;

                    default:
                        throw new NotSupportedException();
                    }
                    element.X = double.Parse(split[1]);
                    element.Y = double.Parse(split[2]);
                    elements.Add(element);
                }
            }
            return(elements);
        }