Exemple #1
0
        static void Main(string[] args)
        {
            Console.BufferHeight  = consoleHeight;
            Console.BufferWidth   = consoleWidth;
            Console.WindowHeight  = consoleHeight;
            Console.WindowWidth   = consoleWidth;
            Console.CursorVisible = false;
            Console.Title         = "Fireship";
            menu = Menu.Create();
            readHighscores(highscoresNames, highscoresScores);
            int sleepTime       = 0;
            int maxEnemiesCount = 0;
            int frameCounter    = 0;

            initializeGame();
            Task.Run(keyboardListener);

            while (gameRunning)
            {
                stopWatch.Start();
                frameCounter++;

                drawAllObjects();
                Console.ForegroundColor = ConsoleColor.Gray;

                if (frameCounter == 10)
                {
                    sceneryObjectList.Add(new SceneryObject());
                }

                if (!gameStart)
                {
                    if (!showHighScores)
                    {
                        menu.drawTitle();
                        menu.drawMenu();
                    }
                    else
                    {
                        menu.drawTitle();
                        menu.drawHighscores(highscoresNames, highscoresScores);
                    }

                    Thread.Sleep(10);
                }
                else
                {
                    if (!playerDead)
                    {
                        // in-game logic - random enemy movement etc. --------------------
                        if (frameCounter == 10)
                        {
                            if (maxEnemiesCount < 6)
                            {
                                maxEnemiesCount = 1 + (int)(gameTime.ElapsedMilliseconds / (difficultyTimeIncrement * 3000));
                            }

                            for (int i = 0; i < maxEnemiesCount; i++)
                            {
                                enemyShipList.Add(new EnemyShip(difficultyTimeIncrement, 3, enemySkins[1]));
                            }
                        }

                        if (frameCounter == 20 && enemyShipList.Count != 0)
                        {
                            double maxMoveSpeed = 0;

                            if (enemyShipList[0] != null)
                            {
                                maxMoveSpeed = enemyShipList[0].getMaxVelocity();
                            }

                            for (int i = 0; i < enemyShipList.Count; i++)
                            {
                                if (enemyShipList[i].GetType() == typeof(PlayerShip) || enemyShipList[i].GetType() == typeof(Bullet))
                                {
                                    continue;
                                }

                                if (enemyShipList[i].getVelocity().X > 0)
                                {
                                    enemyShipList[i].moveLeft(rnd.NextDouble() % (maxMoveSpeed / 4));
                                }
                                else
                                {
                                    enemyShipList[i].moveRight(rnd.NextDouble() % (maxMoveSpeed / 4));
                                }

                                if (rnd.NextDouble() < (double)gameTime.ElapsedMilliseconds / (difficultyTimeIncrement * 1000) / 100)
                                {
                                    ((EnemyShip)enemyShipList[i]).fire();
                                }
                            }
                        }

                        if (frameCounter == 25)
                        {
                            if (powerUp == null)
                            {
                                if ((double)gameTime.ElapsedMilliseconds % (difficultyTimeIncrement * 1000) > difficultyTimeIncrement * 800)
                                {
                                    powerUpAvailable = true;
                                }

                                if (powerUpAvailable)
                                {
                                    powerUp          = new PowerUp(otherSkins[0], (PlayerShip)playerShipList[0]);
                                    powerUpAvailable = false;
                                }
                            }
                        }

                        if (togglePlayerFire == true)
                        {
                            ((PlayerShip)playerShipList[0]).fire();
                        }



                        checkCollisions();
                        calculateEnemyMovement();

                        timeScore = (int)gameTime.ElapsedMilliseconds / 1000;

                        lock (drawingLock)
                        {
                            Console.SetCursorPosition(1, consoleHeight - 2);
                            Console.Write("Score: " + (score + timeScore));
                        }


                        // ------------------------------------------
                    }
                    else
                    {
                        menu.drawGameOver(score + timeScore);
                        if (checkHighscores(score + timeScore))
                        {
                            menu.drawNewHighscore();
                            if (!newScoreSaved)
                            {
                                string newName = getPlayerName();

                                lock (drawingLock)
                                {
                                    Console.SetCursorPosition(screenWidth / 2 - 12 / 2, 10 + (int)(screenHeight / 2.5));
                                    Console.Write("                 ");
                                }

                                addHighscore(score + timeScore, newName);
                                saveHighscores(highscoresNames, highscoresScores);
                                newScoreSaved = true;
                            }
                        }
                        else
                        {
                            Console.ReadKey(true);
                        }

                        initializeGame();
                        menu.eraseGameOver();

                        lock (drawingLock)
                        {
                            Console.SetCursorPosition(1, consoleHeight - 2);
                            Console.Write("                 ");
                        }
                    }
                }

                if (!playerDead)
                {
                    calculatePlayerMovement();
                }
                calculateSceneryMovement();

                sleepTime = frameTime - (int)stopWatch.ElapsedMilliseconds;
                if (sleepTime > 0)
                {
                    Thread.Sleep(sleepTime);
                }

                if (frameCounter == framesPerSecondTop)
                {
                    frameCounter = 0;

                    lock (drawingLock)
                    {
                        Console.SetCursorPosition(1, 1);
                        Console.Write("FPS: " + (1000 / stopWatch.ElapsedMilliseconds + 1) + " ");
                    }
                }

                stopWatch.Reset();
            }
        }
Exemple #2
0
        static void checkCollisions()
        {
            int iCount = playerShipList.Count;
            int jCount = enemyShipList.Count;

            if (powerUp != null)
            {
                if (powerUp.getPosition().Y > 1)
                {
                    powerUp = null;
                }
            }

            for (int i = 0; i < iCount; i++)
            {
                if (powerUp != null && i == 0)
                {
                    double size1 = playerShipList[i].getSize();
                    double size2 = powerUp.getSize();
                    double pos1X = playerShipList[i].getPosition().X;
                    double pos1Y = playerShipList[i].getPosition().Y;
                    double pos2X = powerUp.getPosition().X;
                    double pos2Y = powerUp.getPosition().Y;

                    if ((Math.Abs(pos1X - pos2X) < size1 - 0.0125 || Math.Abs(pos1X - pos2X) < size2 - 0.0125) &&
                        (Math.Abs(pos1Y - pos2Y) < size1 - 0.025 || Math.Abs(pos1Y - pos2Y) < size2 - 0.025))
                    {
                        ((PlayerShip)playerShipList[i]).upgrade(powerUp.getShape());
                        eraseObject(powerUp);
                        powerUp = null;
                    }
                }

                for (int j = 0; j < jCount; j++)
                {
                    double size1 = playerShipList[i].getSize();
                    double size2 = enemyShipList[j].getSize();
                    double pos1X = playerShipList[i].getPosition().X;
                    double pos1Y = playerShipList[i].getPosition().Y;
                    double pos2X = enemyShipList[j].getPosition().X;
                    double pos2Y = enemyShipList[j].getPosition().Y;

                    if ((Math.Abs(pos1X - pos2X) < size1 - 0.0125 || Math.Abs(pos1X - pos2X) < size2 - 0.0125) &&
                        (Math.Abs(pos1Y - pos2Y) < size1 - 0.025 || Math.Abs(pos1Y - pos2Y) < size2 - 0.025))
                    {
                        if (i == 0)
                        {
                            playerDead = true;
                        }
                        else
                        {
                            if (enemyShipList[j].GetType() == typeof(EnemyShip) && playerShipList[i].GetType() == typeof(Bullet))
                            {
                                if (((EnemyShip)enemyShipList[j]).takeDamage(((Bullet)playerShipList[i]).getDamage()) <= 0)
                                {
                                    score += 5;
                                    eraseObject(enemyShipList[j]);
                                    enemyShipList.RemoveAt(j);
                                    j--;
                                    jCount--;
                                }
                            }

                            eraseObject(playerShipList[i]);
                            playerShipList.RemoveAt(i);
                            i--;
                            iCount--;
                        }
                    }
                }
            }
        }