Example #1
0
        public static void StartGame()
        {
            Level firstLevel = new Level(1);
            firstLevel.PrintLevel();

            Tank playerTank = new Tank();

            playerTank.Print();

            while (true)
            {
                while (Console.KeyAvailable)
                {
                    ConsoleKeyInfo pressedKey = Console.ReadKey(true);

                    playerTank.Move(pressedKey);
                }
            }
        }
Example #2
0
        public static void StartGame(int level, PlayerProfile player)
        {
            DateTime timeGameStart = DateTime.Now;
            //To use it for add score for every play time minute
            int passedMinutes = 1;
            int waves = 1 + level;
            int lives = gamerLives;

            Level currentLevel = new Level(level);
            List<CannonBall> cannonBalls = new List<CannonBall>();
            List<Tank> enemyTanks = new List<Tank>();
            SoundEngine.StartGameSound();

            PlayerTank playerTank = player.PersonalTank;

            enemyTanks.Add(player.PersonalTank);

            List<LevelObject> allLevelObjects = new List<LevelObject>(currentLevel.LoadLevel());
            allLevelObjects.Add(player.PersonalTank);

            int enemyTankPosition = 1;
            int enemyTanksCount = 5;

            for (int i = 0; i < enemyTanksCount; i++)
            {
                allLevelObjects.Add(new EnemySmartTank(playerTank, allLevelObjects, enemyTankPosition, 1, Directions.Down));
                enemyTankPosition += 15;
            }
            enemyTankPosition = 1;

            currentLevel.PrintLevel();
            playerTank.Print();

            for (int i = 0; i < allLevelObjects.Count; i++)
            {
                if (allLevelObjects[i] is EnemySmartTank)
                {
                    allLevelObjects[i].Print();
                }
            }

            while (true)
            {
                while (Console.KeyAvailable)
                {
                    ConsoleKeyInfo pressedKey = Console.ReadKey(true);

                    if (pressedKey.Key == ConsoleKey.UpArrow || pressedKey.Key == ConsoleKey.DownArrow ||
                        pressedKey.Key == ConsoleKey.LeftArrow || pressedKey.Key == ConsoleKey.RightArrow)
                    {
                        if (HitManager.ManageTankAndWallHit(playerTank, allLevelObjects, pressedKey)) // changed from LevelObjects
                        {
                            playerTank.Move(pressedKey);
                            if (DateTime.Now > timeGameStart.AddSeconds(5))
                            {
                                SoundEngine.MoveSound();
                            }

                        }

                    }
                    else if (pressedKey.Key == ConsoleKey.Spacebar)
                    {
                        //implement fire
                        SoundEngine.FireSound();
                        int[] barrelCoords = playerTank.GetTankBarrel();
                        cannonBalls.Add(new SimpleCannonBall(playerTank.Y + barrelCoords[0], playerTank.X + barrelCoords[1], 1, 100, playerTank.Direction, true));
                    }
                    else if (pressedKey.Key == ConsoleKey.Escape)
                    {
                        Menu.LoadPauseMenu(player);
                    }
                }

                Thread.Sleep(50);

                // If players tank is hitted, lose life
                // Shoot if possible and update direction and position
                for (int i = 0; i < allLevelObjects.Count; i++)
                {
                    if (allLevelObjects[i] is PlayerTank)
                    {
                        PlayerTank currentPlayerTank = allLevelObjects[i] as PlayerTank;

                        if (currentPlayerTank.IsDestroyed)
                        {
                            lives--;
                            currentPlayerTank.LooseLive();

                            //clear position
                            if (currentPlayerTank.Direction == Directions.Up || currentPlayerTank.Direction == Directions.Down)
                            {
                                ConsoleAction.Clear(playerTank.X, playerTank.Y, 6, 2);
                            }
                            else if (currentPlayerTank.Direction == Directions.Left || currentPlayerTank.Direction == Directions.Right)
                            {
                                ConsoleAction.Clear(playerTank.X, playerTank.Y, 3, 3);
                            }
                            currentPlayerTank.SetDefaultPosition();
                            currentPlayerTank.Print();

                            if (currentPlayerTank.IsGameOver)
                            {
                                EndGame(player, currentLevel.LevelNumber);
                            }
                            continue;
                        }
                    }

                    if (allLevelObjects[i] is EnemySmartTank)
                    {
                        EnemySmartTank currentEnemyTank = allLevelObjects[i] as EnemySmartTank;
                        if (currentEnemyTank.CanShootToPlayertank())
                        {
                            int[] barrelCoords = (allLevelObjects[i] as EnemySmartTank).GetTankBarrel();
                            cannonBalls.Add(new SimpleCannonBall(allLevelObjects[i].Y + barrelCoords[0], allLevelObjects[i].X + barrelCoords[1], 1, 100, currentEnemyTank.Direction, false));
                        }

                        currentEnemyTank.Update();
                    }
                }

                // Remove destroyed objects
                for (int i = 0; i < allLevelObjects.Count; i++)
                {
                    if ((allLevelObjects[i] is IDestroyable) && !(allLevelObjects[i] is PlayerTank))
                    {
                        if ((allLevelObjects[i] as IDestroyable).IsDestroyed)
                        {
                            // Check coordinate to clear for different type of objects(tank, cannonball, brick)
                            ConsoleAction.Clear(allLevelObjects[i].X, allLevelObjects[i].Y, allLevelObjects[i].LoadVisual()[0].Length, allLevelObjects[i].LoadVisual().Length);
                            allLevelObjects.RemoveAt(i);
                        }
                    }
                }
                //check if base is dstroyed
                if (HitManager.IsBaseDestroyed(allLevelObjects))
                {
                    EndGame(player, currentLevel.LevelNumber);
                }

                // Move all cannonballs
                for (int i = 0; i < cannonBalls.Count; i++)
                {
                    ConsoleAction.Clear(cannonBalls[i].Y, cannonBalls[i].X, 1, 1);

                    cannonBalls[i].Move();
                    cannonBalls[i].Print();
                }

                // Check if some cannonball hit an object
                HitManager.ManageShotsAndLevelObject(cannonBalls, allLevelObjects, player);

                // Remove destroyed cannonballs
                for (int i = 0; i < cannonBalls.Count; i++)
                {
                    if (cannonBalls[i].IsDestroyed)
                    {
                        ConsoleAction.Clear(cannonBalls[i].Y, cannonBalls[i].X, 1, 1);
                        cannonBalls.RemoveAt(i);
                    }
                }
                //Destroy enemies
                if (!allLevelObjects.Any(x => x is EnemyTank))
                {
                    waves--;
                    if (waves == 0)
                    {
                        player.AddScore(500);
                        WinGame(player, currentLevel.LevelNumber);
                    }
                    else
                    {
                        for (int i = 0; i < enemyTanksCount; i++)
                        {
                            allLevelObjects.Add(new EnemySmartTank(playerTank, allLevelObjects, enemyTankPosition, 1, Directions.Down));
                            enemyTankPosition += 15;
                        }
                        for (int i = 0; i < allLevelObjects.Count; i++)
                        {
                            if (allLevelObjects[i] is EnemySmartTank)
                            {
                                allLevelObjects[i].Print();
                            }
                        }
                        enemyTankPosition = 1;
                    }
                }

                //Add score point for playing minute
                if (DateTime.Now.Minute == timeGameStart.AddMinutes(passedMinutes).Minute)
                {
                    passedMinutes++;
                    player.AddScore(10);

                }
                RePrintLevelObjects(allLevelObjects);
                PrintStats(player, lives);
            }
        }