示例#1
0
文件: GameManager.cs 项目: kro13/KK
        //unity

        private void BeginGame()
        {
            //create canyon
            canyon = GameObjectsFactory.getInstance().Create <Canyon>();
            canyon.Generate(difficulty);
            finishMarker = GameObjectsFactory.getInstance().Create <FinishMarker>();
            finishMarker.transform.position   = canyon.GetExitPoint();
            finishMarker.transform.localScale = new Vector3(20, 1, 0);
            finishMarker.onHitFinish         += OnHitFinish;

            //setup player if not yet
            if (player == null)
            {
                player = Instantiate(GameObjectsFactory.getInstance().playerPrefab);
                player.SetControl(control);
                player.SetPhysicsl(physics);
                player.SetPScore(score);
                cameraManager.SetTarget(player.gameObject);
            }

            RespawnPlayer();

            if (uiManager.isFirstStart)
            {
                uiManager.isFirstStart = false;
            }

            PlaySnowIfNeeded();

            isFinish         = false;
            Cursor.lockState = CursorLockMode.Locked;
        }
示例#2
0
        // TODO: добавить отграничение скорострельность
        /// <summary>
        /// Обработчик события выстрела
        /// </summary>
        /// <param name="args"></param>
        private void Shoot(GameEventArgs args)
        {
            var bullet = GameObjectsFactory.CreateBullet(_ship.GetPoint());

            _bullets.Add(bullet);
            AddDrawable(bullet);
        }
示例#3
0
文件: Player.cs 项目: kro13/KK
 private void EmitScore(int val)
 {
     if (Mathf.Abs(val) > 0)
     {
         Points points = GameObjectsFactory.getInstance().Create <Points>();
         points.transform.position = transform.position;
         points.SetValue(val);
     }
 }
示例#4
0
        public static void CheckForRebounce(ICollection <IRebouncable> rebouncable, ICollection <IMovable> movable)
        {
            foreach (var Ball in movable)
            {
                //granici na moveingObj za udar
                var ballTop    = Ball.Position.Top;
                var ballLeft   = Ball.Position.Left;
                var ballBottom = Ball.Position.Top + (Ball.Bounds.Height);
                var ballRight  = ballLeft + Ball.Bounds.Width;
                foreach (var Pad in rebouncable)
                {  //granici na pada
                    var PadLeftUppersideLeft  = Pad.Position.Left;
                    var PadLeftUppersideTop   = Pad.Position.Top;
                    var PadRightUppersideLeft = Pad.Position.Left + Pad.Bounds.Width;
                    var PadRightUppersideTop  = PadLeftUppersideTop;
                    //proverka za udur

                    if ((ballBottom) == PadLeftUppersideTop && ((ballLeft <= PadRightUppersideLeft &&
                                                                 ballRight > PadRightUppersideLeft) || (ballRight < PadRightUppersideLeft &&
                                                                                                        ballLeft > PadLeftUppersideLeft) || (ballRight >= PadLeftUppersideLeft &&
                                                                                                                                             ballLeft < PadLeftUppersideLeft)))
                    {
                        int newLeftSpeed;
                        int newRightSpeed;

                        if (ballRight <= (PadRightUppersideLeft - Pad.Bounds.Width / 4) && ballLeft >= PadLeftUppersideLeft + (Pad.Bounds.Width) / 4)
                        {
                            newLeftSpeed  = Ball.Speed.Left / 2;
                            newRightSpeed = -Ball.Speed.Top;
                            Ball.Speed    = GameObjectsFactory.GenerateNewPosition(newLeftSpeed, newRightSpeed);
                        }

                        else
                        {
                            if (Ball.Speed.Left == 0)
                            {
                                if ((ballLeft + Ball.Bounds.Width / 2) <= PadLeftUppersideLeft + Pad.Bounds.Width / 2)
                                {
                                    newLeftSpeed = GlobalConstants.BallInitSpeedLeft;
                                }
                                else
                                {
                                    newLeftSpeed = (-GlobalConstants.BallInitSpeedLeft);
                                }
                            }
                            else
                            {
                                newLeftSpeed = Ball.Speed.Left < 0 ? GlobalConstants.BallInitSpeedLeft : (-GlobalConstants.BallInitSpeedLeft);
                            }
                            newRightSpeed = -Ball.Speed.Top;
                            Ball.Speed    = GameObjectsFactory.GenerateNewPosition(newLeftSpeed, newRightSpeed);
                        }
                    }
                }
            }
        }
示例#5
0
        //incializiram vsi4ki obekti tuk i vkarvam v colectiite ,sled koeto presmqta lista s coordinati
        public void InitGame()
        {
            this.renderer.ShowStartGameScreen();


            //int Pad
            this.rebouncableObjects = new List <IRebouncable>();
            int initPadLeftPosition = (this.renderer.ScreenWidth) / 2 - GlobalConstants.padWidth / 2;
            int initPadTopPosition  = ((this.renderer.ScreenHeight) - GlobalConstants.padHeight * 2);
            var padPosition         = GameObjectsFactory.GenerateNewPosition(initPadLeftPosition, initPadTopPosition);
            var padSize             = GameObjectsFactory.GenerateNewSize(GlobalConstants.padWidth, GlobalConstants.padHeight);

            this.Pad = GameObjectsFactory.GeneratePad(padPosition, padSize);
            this.rebouncableObjects.Add(this.Pad);

            //int Ball
            this.movingObjects = new List <IMovable>();
            int initBallLeftPosition = (this.renderer.ScreenWidth) / 2;
            int initBallTopPosition  = ((this.renderer.ScreenHeight) - GlobalConstants.padHeight * (GlobalConstants.distanceFromBottomRowPad) - GlobalConstants.padHeight - GlobalConstants.ballSize);
            var ballSpeed            = GameObjectsFactory.GenerateNewPosition(GlobalConstants.BallInitSpeedLeft, GlobalConstants.BallInitSpeedTop);
            var ballPosition         = GameObjectsFactory.GenerateNewPosition(initBallLeftPosition, (initBallTopPosition));
            var ballSize             = GameObjectsFactory.GenerateNewSize(GlobalConstants.ballSize, GlobalConstants.ballSize);

            this.Ball = GameObjectsFactory.GenerateNewBall(ballPosition, ballSize, ballSpeed);
            this.movingObjects.Add(this.Ball);

            //init HighScore
            int initHighScoreLeftPosition = (this.renderer.ScreenWidth) - GlobalConstants.highScoreLeft;
            int initHighScorePosition     = GlobalConstants.distanceFromBottomRowPad;
            var highScorePosition         = GameObjectsFactory.GenerateNewPosition(initHighScoreLeftPosition, initHighScorePosition);
            var highScoreSize             = GameObjectsFactory.GenerateNewSize(GlobalConstants.highScoreWidht, GlobalConstants.highScoreHeight);

            this.HighScore = GameObjectsFactory.GenerateNewHighScore(highScorePosition, highScoreSize);


            //init Bricks
            this.bricks = new List <IDestroyable>();
            for (int j = 0; j < GlobalConstants.brickRows; j++)
            {
                for (int i = 0; i < GlobalConstants.brickCows; i++)
                {
                    var brickPosition = GameObjectsFactory.GenerateNewPosition(GlobalConstants.initBrickLeftPosition + i * GlobalConstants.brickWidth * 2,
                                                                               (GlobalConstants.initBrickTopPosition + j * GlobalConstants.brickHright * 2));
                    var brickSize = GameObjectsFactory.GenerateNewSize(GlobalConstants.brickWidth, GlobalConstants.brickHright);
                    var brick     = GameObjectsFactory.GenerateNewBrick(brickPosition, brickSize);
                    Bricks.Add(brick);
                }
            }

            CollisionDetector.GetBoundariesForDestroiableObjects(this.Bricks);
        }
示例#6
0
        protected override void OnLoad()
        {
            Logger.Print("Space scene start load");

            EventManager.AddEventListener(EventManager.Events.ShootEvent, Shoot);
            EventManager.AddEventListener(EventManager.Events.ChangeScoreEvent, OnChangeScore);

            Score = 0;

            _stars.Clear();
            _asteroids.Clear();
            _bullets.Clear();

            for (var i = 0; i < 100; i++)
            {
                _stars.Add(GameObjectsFactory.CreateStar());
            }

            Logger.Print("Created {0} stars", _stars.Count);

            _ship = GameObjectsFactory.CreateSpaceShip();

            var random = new Random();

            _timer          = new Timer();
            _timer.Interval = 2000;
            _timer.Tick    += (sender, args) =>
            {
                GameObjects obj;
                var         next = random.Next(100);
                if (next % 2 == 0)
                {
                    obj = GameObjectsFactory.CreateAsteroid();
                    _asteroids.Add(obj as Asteroid);
                    AddUpdatable(obj);
                }
                else
                {
                    obj = GameObjectsFactory.CreateMedic();
                    _medics.Add(obj as Medic);
                }

                AddDrawable(obj);
            };
            _timer.Start();

            AddDrawable(_stars);
            AddDrawable(_ship);

            AddUpdatable(_stars);
        }
示例#7
0
        private void HandleKeyPressed(object sender, KeyDownEventArgs key)
        //metoda koito e zaka4en za eventa presingkey
        {
            try {
                if (key.Command == GameComand.MoveLeft)
                {
                    var Speed      = GameObjectsFactory.GenerateNewPosition(GlobalConstants.PadSpeedLeft, GlobalConstants.PadSpeedTop);
                    var newPositon = GameObjectsFactory.GenerateNewPosition(Speed, this.Pad);
                    if (this.renderer.isInBounds(newPositon))
                    {
                        this.Pad.Position = newPositon;
                    }
                }

                else if (key.Command == GameComand.MoveRight)
                {
                    var Speed      = GameObjectsFactory.GenerateNewPosition(-GlobalConstants.PadSpeedLeft, GlobalConstants.PadSpeedTop);
                    var newPositon = GameObjectsFactory.GenerateNewPosition(Speed, this.Pad);
                    if (this.renderer.isInBounds(newPositon))
                    {
                        this.Pad.Position = newPositon;
                    }
                }

                else if (key.Command == GameComand.Pause)
                {
                    if (this.timer.IsEnabled)
                    {
                        this.timer.Stop();
                    }
                    else
                    {
                        this.timer.Start();
                    }
                }

                else
                {
                    throw new WrongKeyException("Wrong key Pressed");
                }
            }
            catch (WrongKeyException ex)
            {
                var position = GameObjectsFactory.GenerateNewPosition(GlobalConstants.msgLeftPosition, GlobalConstants.msgTopPosition);
                var size     = GameObjectsFactory.GenerateNewSize(GlobalConstants.msgWidth, GlobalConstants.msgHeight);
                var wrongKeyExceptionObject = GameObjectsFactory.GenerateNewErrorText(position, size, ex.Message);
                this.renderer.Draw(wrongKeyExceptionObject);
            }
        }
示例#8
0
        public World(GameObjectsFactory gameObjectsFactory, int size)
        {
            _size       = size;
            gameObjects = new IGameObject[size, size];

            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    gameObjects[i, j] = gameObjectsFactory.CreateVoid(i, j);
                }
            }

            hero = gameObjectsFactory.CreateHero(size / 2, size / 2);
        }
示例#9
0
        protected override void OnUpdate()
        {
            var random = new Random();

            for (int i = 0; i < BaseObjectsCount + _wave; i++)
            {
                GameObjects obj;
                var         next = random.Next(100);
                if (next % 10 == 0)
                {
                    obj = GameObjectsFactory.CreateMedic();
                }
                else
                {
                    obj = GameObjectsFactory.CreateAsteroid();
                }

                _objects.Enqueue(obj);
            }
            _wave++;
            Logger.Print("Волна создана {0}", _wave);
            EventManager.DispatchEvent(GameEvents.STAGE_GENERATED);
        }
示例#10
0
        protected override void OnLoad()
        {
            Logger.Print("Space scene start load");

            EventManager <ThrowObjectWaveEventArgs> .AddEventListener(GameEvents.WAVE_NEXT_OBJECT, OnNextObject);

            EventManager.AddEventListener(GameEvents.SHOOT, Shoot);
            EventManager.AddEventListener(GameEvents.STAGE_COMPLETE, OnStageCompleted);
            EventManager.AddEventListener(GameEvents.STAGE_GENERATED, OnStageGenerated);
            EventManager.AddEventListener(GameEvents.STAGE_GENERATE, OnStageGenerate);

            _generateWaveState.Init(_objects);
            _throwObjectWaveState.Init(_objects);
            _waitForNewWaveState.Init(_objects);

            _player = new Player();

            _stars.Clear();
            _asteroids.Clear();
            _bullets.Clear();

            for (var i = 0; i < 100; i++)
            {
                _stars.Add(GameObjectsFactory.CreateStar());
            }

            Logger.Print("Created {0} stars", _stars.Count);

            _ship = GameObjectsFactory.CreateSpaceShip();

            AddDrawable(_stars);
            AddDrawable(_ship);

            AddUpdatable(_stars);

            EventManager.DispatchEvent(GameEvents.STAGE_GENERATE);
        }
示例#11
0
 public void BuildWorld(GameObjectsFactory gameObjectsFactory)
 {
     _world = new World(gameObjectsFactory, WorldSize);
 }
示例#12
0
        //cikula na igrata
        public void StartGame()
        {
            timer.Interval = TimeSpan.FromMilliseconds(GlobalConstants.timerFramesIntervalInMiliSeconds);
            timer.Tick    += (sender, args) =>
            {
                CollisionDetector.CheckForRebounce(this.rebouncableObjects, this.movingObjects);

                var screenSize = GameObjectsFactory.GenerateNewSize(this.renderer.ScreenWidth, this.renderer.ScreenHeight);

                if (CollisionDetector.CheckForBoundariesRebound(movingObjects, screenSize))
                {
                    timer.Stop();
                    this.renderer.ShowEndGameScreen();
                }

                //proverka za udar i smqna na skorosta i posokata pri udar //maha udarenite ot bricks
                foreach (var movingObject in this.movingObjects)
                {
                    var posibleCollision = CollisionDetector.CheckForCollisionWithBricks(movingObject, this.Bricks, screenSize);
                    if (posibleCollision.CollideteStaticElementIndex != -1)
                    {
                        if (posibleCollision.Side == HitTypeEnum.horizontal)
                        {
                            movingObject.Speed = GameObjectsFactory.GenerateNewPosition(movingObject.Speed.Left, -movingObject.Speed.Top);
                        }
                        else
                        {
                            movingObject.Speed = GameObjectsFactory.GenerateNewPosition(-movingObject.Speed.Left, movingObject.Speed.Top);
                        }
                        this.bricks[posibleCollision.CollideteStaticElementIndex].DestroyMe();
                    }
                }

                //za vsqko ubito increase na highscore

                int score = 0;

                foreach (var brick in this.bricks)
                {
                    if (brick.IsAlive == false)
                    {
                        score += brick.PointsForBraking;
                    }
                }

                (this.HighScore as HighScore).IncreaseHighScore(score);

                this.bricks.RemoveAll(x => x.IsAlive == false);

                if (this.bricks.Count == 0)
                {
                    timer.Stop();
                    this.renderer.ShowWinGameScreen(HighScore.Text);
                }

                this.renderer.Clear();

                foreach (var bal in movingObjects)
                {
                    bal.MoveWithCurrentSpeed(); //premestva topkata sys segashnata i skorost
                }

                //draw bricks,pad and ball
                this.renderer.Draw(this.HighScore);
                this.renderer.Draw(this.RebouncableObjects.ToArray());
                this.renderer.Draw(this.movingObjects.ToArray());
                this.renderer.Draw(this.bricks.Where(x => x.IsAlive == true).ToArray());
            };
            timer.Start();
        }