コード例 #1
0
    private void StartPhase1()
    {
        /////////////////////////////////////
        /////////////////////////////////////
        /////////////////////////////////////
        /////////////////////////////////////
        /////////////////////////////////////
        /////////////////////////////////////
        //timeElapsed = 20f;

        CurrentPhase = Phase.PHASE1;
        BossInstance = Instantiate(BossPrefab, new Vector3(0, 16.5f, 0), Quaternion.identity);
        AudioManager.Play("Chapter1BossMusic", GetComponent <AudioSource>());
        Phase1PlayerNameLabel.SetActive(true);

        var bossPosition = BossInstance.transform.position;

        Phase1StartingPosition  = bossPosition;
        Phase1MoveStartPosition = bossPosition;
        Phase1PositionToMoveTo  = new Vector3(
            bossPosition.x + Mathf.Sign(Random.Range(-1, 1)) * 10, bossPosition.y, bossPosition.z);

        Phase1TimeToHomingShooting = 5.1f - Phase1IdleTime;
        CurrentEnemy.SetCurrentEnemyName("Survive!");
    }
コード例 #2
0
    public GameObject SpawnCertainMonsterWithoutName(GameObject monster)
    {
        var enemy = Instantiate(monster, transform.position, Quaternion.identity);

        if (!anyBoy)
        {
            anyBoy = true;
            CurrentEnemy.SetCurrentEnemy(currentEvilDictionary[randomSequence[sequenceIndex]], enemy);
            enemy.GetComponent <MonsterLife>().MakeBoy();
            currentBoy = enemy;
        }

        enemy.GetComponentInChildren <TMPro.TextMeshPro>().text = currentEvilDictionary[randomSequence[sequenceIndex]];
        boysList.Add(enemy);
        //roomLighting.AddToLight(1);

        if (!SpawnZone)
        {
            SetMonsterPosition(enemy);
        }
        else
        {
            enemy.transform.position = SpawnZone.SpawnPosition();
        }

        sequenceIndex++;
        return(enemy);
    }
コード例 #3
0
 private void Start()
 {
     Player = GameObject.FindGameObjectWithTag("Player");
     AudioManager.Pause("Chapter1BossMusic", GetComponent <AudioSource>());
     CurrentEnemy.SetCurrentEnemyName("???");
     camera = Camera.main.transform;
 }
コード例 #4
0
ファイル: Player.cs プロジェクト: jdkula/ConceptCombat
 public override void Attack(float damage)
 {
     if (CurrentEnemy)
     {
         CurrentEnemy.Damage(damage * Mathf.Clamp(
                                 ((PlayerUserInterface)AttatchedUserInterface).Level * Constants.LevelScale, 1,
                                 float.PositiveInfinity));
     }
 }
コード例 #5
0
        public override void ActiveEnemyComponent()
        {
            SpellLeft = TotalSpellCount;

            CurrentEnenmyIndex = 0;

            CurrentEnemy = spawnEnemy(CurrentEnenmyIndex);
            CurrentEnemy.OnEnemyFinished += continueBoss;
            CurrentEnemy.ActiveEnemyComponent();
        }
コード例 #6
0
ファイル: RelodScene.cs プロジェクト: saintruler/one-by-one
 protected virtual void ProcessVictory()
 {
     CurrentEnemy.SetCurrentEnemyName(" ");
     isVictory = true;
     Canvas.transform.GetChild(0).gameObject.SetActive(true);
     if (Input.GetKeyDown(KeyCode.F) && !CharacterLife.isDeath)
     {
         Canvas.transform.GetChild(0).gameObject.SetActive(false);
         SceneManager.LoadScene(NextSceneName);
     }
 }
コード例 #7
0
        private void continueToNextEnemy()
        {
            CurrentEnemy = spawnEnemy(CurrentEnenmyIndex);
            CurrentEnemy.OnEnemyFinished += continueBoss;

            if (CurrentEnemy is SpellCard)
            {
                SpellLeft--;
            }

            CurrentEnemy.ActiveEnemyComponent();
        }
コード例 #8
0
        void Attack()
        {
            CurrentEnemy.TakeDamage(_gameService.CurrentPlayer.Weapon.Damage);
            _gameService.CurrentPlayer.TakeDamage(CurrentEnemy.Weapon.Damage);
            _gameService.Messages.Add(new Message("The Dungeon", "You Strike!"));
            _gameService.Messages.Add(new Message("The Dungeon", "The Goblins Health is " + CurrentEnemy.Health + " & Your Health is " + _gameService.CurrentPlayer.Health));

            if (CurrentEnemy.Health <= 0)
            {
                _gameService.Messages.Add(new Message("The Dungeon", $"The {CurrentEnemy} IS DEAD"));
            }
            ;
        }
コード例 #9
0
    private void UpdatePhase4()
    {
        GlassFadeOutPassed += Time.deltaTime;
        GlassSprite.color   = new Color(
            GlassSprite.color.r, GlassSprite.color.g, GlassSprite.color.b,
            Mathf.Lerp(1, 0, GlassFadeOutPassed / GlassFadeOutDuration));

        if (BossInstance == null)
        {
            StartDead();
            CurrentEnemy.SetCurrentEnemyName(" ");
            return;
        }
        if (ArenaEnemySpawner.boysList.Count == 0)
        {
            CurrentEnemy.SetCurrentEnemyName("Shadow");
        }
        switch (phase4Attack)
        {
        case Phase4Attack.Idle:
            idleWaitTime -= Time.deltaTime;
            if (idleWaitTime <= 0)
            {
                phase4Attack     = Phase4Attack.Spawn;
                phase4FadeInLeft = phase4FadeIn;
                Phase4Spawn();
            }
            break;

        case Phase4Attack.Spawn:
            bossScript.FadeIn(phase4FadeIn);
            phase4FadeInLeft -= Time.deltaTime;
            if (phase4FadeInLeft + AfterBossFadeInExtraTime <= 0)
            {
                phase4FadeInLeft = phase4FadeIn;
                phase4Attack     = Phase4Attack.Attack;
            }
            break;

        case Phase4Attack.Attack:
            idleWaitTime = Phase4AfterAttackIdleTime;
            Random360Burst(BurstBulletAmount);
            phase4Attack = Phase4Attack.Idle;
            break;

        default:
            break;
        }
    }
コード例 #10
0
    public void MakeMonsterActive(string name1)
    {
        GameObject currentEnemy1 = boysList.Find(x => x.GetComponentInChildren <TMPro.TextMeshPro>().text == name1);

        if (currentEnemy)
        {
            currentBoy.GetComponent <MonsterLife>().MakeNoBoy();
            currentEnemy1.GetComponent <MonsterLife>().MakeBoy();

            CurrentEnemy.SetCurrentEnemy(name1, currentEnemy1);
            boysList.Remove(currentEnemy1);
            boysList.Insert(0, currentEnemy1);
            currentBoy = currentEnemy1;
        }
    }
コード例 #11
0
        //Method will calculate the chance of running into an enemy and add an enemy to
        //the room based on that. Players current level is given to the room so that when the room
        //spawns an enemy it's stats are updated according to that players level.
        public void getAnEnemy(int level)
        {
            EnemyType temp    = new EnemyType();
            int       chance1 = new Random().Next(1, ChanceEnemy + 1);

            if (chance1 == 1)
            {
                int chance = new Random().Next(0, temp.AllEnemies.Count);
                CurrentEnemy = temp.AllEnemies[chance];
                CurrentEnemy.statstoPlayerLevel(level);
            }
            else
            {
                CurrentEnemy = null;
            }
        }
コード例 #12
0
        void continueBoss(object sender, EventArgs args)
        {
            CurrentEnenmyIndex++;
            CurrentEnemy.OnEnemyFinished -= continueBoss;
            CurrentEnemy.DeactiveEnemyComponent();

            if (CurrentEnenmyIndex > BossComponents.Count - 1)
            {
                OnEnemyFinished?.Invoke(this, new EventArgs());
            }
            else
            {
                continueToNextEnemy();
            }

            OnEnemyConditionChange?.Invoke(this, new EventArgs());
        }
コード例 #13
0
    protected override void Update()
    {
        if (firstSpawn)
        {
            SpawnСertainMonsterWithName(enemyWaves[0].transform.GetChild(2).gameObject, "Reluctance");
            SpawnZone = null;
            SpawnCertainMonsterWithoutName(enemyWaves[0].transform.GetChild(0).gameObject);
            MakeMonsterActive("Reluctance");
            CurrentEnemy.SetCurrentEnemyName("Shoot even if you can't kill it");
            firstSpawn = false;
        }

        if (isVictoryT && firstDeath)
        {
            KillThemAll();
            firstDeath = false;
            CurrentEnemy.SetCurrentEnemyName("");
        }
    }
コード例 #14
0
        /// /////////////CUSTOM CONSTRUCTORS FOR NPCs

        //Sets the Data Config for a selected enemy
        public void EnemyMultiplier()
        {
            CurrentEnemy enemy = (CurrentEnemy)(5);

            switch (enemy)
            {
            case CurrentEnemy.VoidKnight:
                EnemyName     = "Void Knight";
                Enemyhealth   = Enemyhealth * 2.5f;
                EnemyStrength = EnemyStrength * 3f;
                EnemyArmour   = EnemyArmour + 30;

                break;

            case CurrentEnemy.Prince:
                EnemyName     = "Prince";
                Enemyhealth   = Enemyhealth * 1.5f;
                EnemyStrength = EnemyStrength * 1.2f;
                EnemyArmour   = EnemyArmour + 10;
                break;

            case CurrentEnemy.Overlord:
                EnemyName     = "Overlord";
                Enemyhealth   = Enemyhealth * 5.5f;
                EnemyStrength = EnemyStrength * 3f;
                EnemyArmour   = EnemyArmour + 100;

                break;

            case CurrentEnemy.Brother:
                EnemyName     = "Brother";
                Enemyhealth   = Enemyhealth * 0.8;
                EnemyStrength = EnemyStrength * 0.6f;
                EnemyArmour   = EnemyArmour / 2;

                break;

            default:
                Console.WriteLine("The Current Enemy Multiplier in the combat engine returned a null value!");
                break;
            }
        }
コード例 #15
0
    // Initialize enemy list with random weights.
    void ResetEnemyList()
    {
        enemyList = new List <CurrentEnemy>();
        var    rnd     = new System.Random();
        string weights = "";

        foreach (Enemy we in enemies)
        {
            if (we.dormant > number)
            {
                continue;
            }
            var ce = new CurrentEnemy();
            ce.enemy  = we;
            ce.weight = rnd.Next(1, maxSpawnWeight + 1);
            enemyList.Add(ce);
            weights += ce.weight + " ";
        }
        //Debug.Log("New enemy list weights: " + weights);
    }
コード例 #16
0
    public static void ChangeTheBoy(GameObject oldBoy)
    {
        if (scenesController)
        {
            scenesController.CurrentCount(1);
        }
        roomLighting.AddToLight(1);

        boysList.Remove(oldBoy);
        if (boysList.Count != 0)
        {
            var nextBoy = boysList[Random.Range(0, boysList.Count)];
            CurrentEnemy.SetCurrentEnemy(nextBoy.GetComponentInChildren <TMPro.TextMeshPro>().text, nextBoy);
            nextBoy.GetComponent <MonsterLife>().MakeBoy();
            currentBoy = nextBoy;
        }
        else
        {
            anyBoy = false;
        }
    }
コード例 #17
0
        protected IEnumerator CheckForPlayers()
        {
            while (true)
            {
                yield return(new WaitForSeconds(HEARTBEAT_CHECK_FOR_PLAYERS));

                if (EnemyCombatStance.Aggresive == CombatStance)
                {
                    if (null == CurrentEnemy)
                    {
                        CurrentEnemy = GetTarget();
                        if (null != CurrentEnemy)
                        {
                            CurrentEnemy.Targetted(this);
                        }
                    }
                    if (!IsInRange(CurrentEnemy) || CurrentEnemy.Dead)
                    {
                        CurrentEnemy = null;
                    }
                }
            }
        }
コード例 #18
0
    private void SpawnMonsters(int waveNum)
    {
        var enemyWave = Instantiate(enemyWaves[waveNum], transform.position, Quaternion.identity);

        int enemiesInWave = enemyWave.transform.childCount;

        for (int i = 0; i < enemiesInWave; i++)
        {
            var enemy = enemyWave.transform.GetChild(i).gameObject;
            if (i == 0)
            {
                // If there is no active enemy name
                if (!anyBoy)
                {
                    anyBoy = true;
                    CurrentEnemy.SetCurrentEnemy(currentEvilDictionary[randomSequence[sequenceIndex]], enemy);
                    enemy.GetComponent <MonsterLife>().MakeBoy();
                    currentBoy = enemy;
                }
            }
            // Set random enemy name from the dictionary
            enemy.GetComponentInChildren <TMPro.TextMeshPro>().text = currentEvilDictionary[randomSequence[sequenceIndex]];
            boysList.Add(enemy);

            if (!SpawnZone)
            {
                SetMonsterPosition(enemy);
            }
            else
            {
                enemy.transform.position = SpawnZone.SpawnPosition();
            }

            sequenceIndex++;
        }
    }
コード例 #19
0
    public void SpawnСertainMonsterWithName(GameObject monster, string name, bool makeBoyIfPossible = true)
    {
        var enemy = Instantiate(monster, transform.position, Quaternion.identity);

        if (!anyBoy)
        {
            anyBoy = true;
            CurrentEnemy.SetCurrentEnemy(name, enemy);
            enemy.GetComponent <MonsterLife>().MakeBoy();
            currentBoy = enemy;
        }
        enemy.GetComponentInChildren <TMPro.TextMeshPro>().text = name;
        boysList.Add(enemy);
        //roomLighting.AddToLight(1);

        if (!SpawnZone)
        {
            SetMonsterPosition(enemy);
        }
        else
        {
            enemy.transform.position = SpawnZone.SpawnPosition();
        }
    }
コード例 #20
0
ファイル: GameSession.cs プロジェクト: dpnull/con-rogue
        public void Update(ConsoleKeyInfo input)
        {
            // Open Inventory
            if (input.KeyChar == action.GetKeybind("inventory") && CAN_OPEN_INVENTORY)
            {
                gui.OpenInventoryWindow();
            }
            // Trade
            if (input.KeyChar == action.GetKeybind("trade") && CAN_TRADE)
            {
                gui.OpenTradeWindow();
            }
            // Trade window logic
            if (gui.GetTradeWindowState())
            {
                // Switch between player and trader window
                if (input.KeyChar == action.GetKeybind("trader_side") || input.Key == ConsoleKey.RightArrow)
                {
                    gui.ChooseTraderTradeSide();
                    itemChoice = 0;
                }
                if (input.KeyChar == action.GetKeybind("player_side") || input.Key == ConsoleKey.LeftArrow)
                {
                    gui.ChoosePlayerTradeSide();
                    itemChoice = 0;
                }
                // Move up and down on the list
                if (input.Key == ConsoleKey.UpArrow && itemChoice > 0)
                {
                    itemChoice--;
                }
                if (input.Key == ConsoleKey.DownArrow)
                {
                    if (gui.GetTraderTradeSide() && itemChoice < CurrentTrader.Inventory.Count - 1)
                    {
                        itemChoice++;
                    }
                    else if (gui.GetPlayerTradeSide() && itemChoice < CurrentPlayer.Inventory.Count - 1)
                    {
                        itemChoice++;
                    }
                }
                // Select item from player and trader window
                if (gui.GetPlayerTradeSide())
                {
                    SelectedItemAction(CurrentPlayer, input);
                }
                if (gui.GetTraderTradeSide())
                {
                    SelectedItemAction(CurrentLocation.TraderHere, input);
                }
                // Selected item actions
                if (gui.GetItemSelectedState())
                {
                    // Visible on both windows
                    if (input.KeyChar == action.GetKeybind("cancel"))
                    {
                        gui.CloseItemSelected();
                    }
                    // Visible on player window
                    if (input.KeyChar == action.GetKeybind("sell") && gui.GetPlayerTradeSide())
                    {
                        SellSelectedItem();
                    }
                    // Visible on trader window
                    if (input.KeyChar == action.GetKeybind("buy") && gui.GetTraderTradeSide())
                    {
                        BuySelectedItem();
                    }
                }

                // Exit
                if (input.KeyChar == action.GetKeybind("exit") && !gui.GetItemSelectedState())
                {
                    gui.CloseTradeWindow();
                }
            }
            // Inventory window logic
            if (gui.GetInventoryWindowState())
            {
                if (!gui.GetItemSelectedState())
                {
                    // Open Misc Tab
                    if (input.KeyChar == action.GetKeybind("misc_tab"))
                    {
                        gui.MiscVisibility(true);
                    }
                    // Open Weapons Tab
                    if (input.KeyChar == action.GetKeybind("weapons_tab"))
                    {
                        gui.WeaponsVisibility(true);
                    }
                    // Close Inventory
                    if (input.KeyChar == action.GetKeybind("exit"))
                    {
                        gui.CloseInventoryWindow();
                    }
                }
                else
                {
                    // Equip selected weapon
                    if (input.KeyChar == action.GetKeybind("equip"))
                    {
                        EquipWeapon();
                        gui.CloseItemSelected();
                    }
                    // Remove item from inventory
                    if (input.KeyChar == action.GetKeybind("drop"))
                    {
                        DropItem();
                    }
                    // Close specific item option menu
                    if (input.KeyChar == action.GetKeybind("cancel"))
                    {
                        gui.CloseItemSelected();
                    }
                }
                SelectedItemAction(CurrentPlayer, input);
            }

            if (CAN_TRAVEL)
            {
                // Open Travel Menu
                if (input.KeyChar == action.GetKeybind("travel"))
                {
                    gui.OpenTravelWindow();
                }
                // Close Travel Menu
                if (input.KeyChar == action.GetKeybind("exit"))
                {
                    gui.CloseTravelWindow();
                }
                // Commence X Travel
                if (char.IsDigit(input.KeyChar) && gui.GetTravelWindowState()) // GetTravelWindow state shouldn't be here
                {
                    if (char.IsDigit(input.KeyChar))
                    {
                        int choice = 0;
                        choice = int.Parse(input.KeyChar.ToString()) - 1;
                        for (int i = 0; i < CurrentWorld.locations.Count; i++)
                        {
                            if (choice == CurrentWorld.locations[i].X && CurrentWorld.locations[i].Y == 0)
                            {
                                CurrentLocation = CurrentWorld.GetLocation(choice, 0);
                                messageLog.Add($"Travelling to {CurrentWorld.GetLocation(choice, 0).Name}...");
                                gui.CloseTravelWindow();
                            }
                        }
                    }
                }
            }


            // Location specific
            if (CAN_TRAVEL)
            {
                if (CurrentLocation.X == 1)
                {
                    if (input.KeyChar == action.GetKeybind("blacksmith") && action.GetActionState("blacksmith"))
                    {
                        CurrentLocation = CurrentWorld.GetLocation(1, 1);
                    }
                    if (input.KeyChar == action.GetKeybind("market") && action.GetActionState("market"))
                    {
                        CurrentLocation = CurrentWorld.GetLocation(1, 2);
                    }
                }

                if (CurrentLocation.X == 2)
                {
                    if (input.KeyChar == action.GetKeybind("hunt") && action.GetActionState("hunt") && InCombat != true)
                    {
                        GetEnemyAtLocation();
                        gui.OpenBattleWindow();
                        InCombat = true;
                    }
                }
            }


            // Battle system
            if (InCombat)
            {
                if (input.KeyChar == battleAction.GetKeybind("attack") && battleAction.GetActionState("attack") && CurrentEnemy.Health > 0)
                {
                    CurrentPlayer.UseCurrentWeaponOn(CurrentEnemy);
                    CurrentEnemy.UseCurrentWeaponOn(CurrentPlayer);
                    KillReward();
                }
                if (input.KeyChar == action.GetKeybind("exit") && CurrentEnemy.Health <= 0)
                {
                    if (CurrentEnemy.Health <= 0)
                    {
                        InCombat = false;
                        gui.CloseBattleWindow();
                    }
                }
            }

            // Redraw
            gui.Render(this);
        }
コード例 #21
0
ファイル: Program.cs プロジェクト: EdvinAndre/RetroGames
        public static void Main(string[] args)
        {
            Initialize();

            int ShipTexture = AddSpriteTexture(GetResourceBitmap("Graphics.Ship.png"), System.Drawing.Color.Black, true);
            int EnemyTexture = AddSpriteTexture(GetResourceBitmap("Graphics.Enemy.png"), System.Drawing.Color.Black, true);
            int shipX, shipY;

            System.Random Rnd = new System.Random();
            int           i, j;
            double        d;
            double        ToRadians         = Math.PI / 180;
            int           EnemyY            = Rnd.Next(100, 300);
            int           EnemyX            = Rnd.Next(600, 620);
            int           StarX             = Rnd.Next(1, 640);
            int           StarY             = Rnd.Next(10, 350);
            int           Level             = 1;
            int           Lives             = 2;
            int           Score             = 0;
            int           HighScore         = 0;
            bool          Collision         = false;
            bool          Done              = false;
            bool          GameOver          = false;
            bool          LevelUp           = false;
            bool          RightKeyIsPressed = false;
            bool          LeftKeyIsPressed  = false;
            bool          Left              = false;
            bool          Right             = false;
            bool          Up                = false;
            bool          Down              = false;

            OpenConsoleWindow(4, 4, 35, 25, "Welcome to Defender!", false);

            WriteLine("Keys in the game:");
            WriteLine();
            WriteLine("RIGHT: Accelerate forwards");
            WriteLine("LEFT: Accelerate backwards");
            WriteLine("UP: Moves Ship up in y-axis");
            WriteLine("DOWN: Moves Ship down in y-axis");
            WriteLine("SPACE: Fire");
            WriteLine("ESC: Close application");
            WriteLine();
            WriteLine("To play, press ENTER.");

            ReadLine();
            ClearConsoleWindowArea();

            LinkedList <EnemyShot>     EnemyShots          = new LinkedList <EnemyShot>();
            LinkedList <ShipLazer>     ShipLazers          = new LinkedList <ShipLazer>();
            LinkedList <Explosion>     Explosions          = new LinkedList <Explosion>();
            LinkedList <Enemy>         Enemies             = new LinkedList <Enemy>();
            LinkedList <Star>          Stars               = new LinkedList <Star>();
            LinkedList <MountainPixel> MountainRangePixels = new LinkedList <MountainPixel>();
            Ship Ship = new Ship(100, 250, 0, 0, CreateSprite(100, 250, ShipTexture));

            Ship.Position = Ship;

            Clear();
            FillRectangle(0, 0, 640, 0, Color.FromKnownColor(KnownColor.DarkGray));
            SetClipArea(0, 8, 639, 480);

            Write("Ships: ");
            int LivesPos = CursorX;

            Write(Lives.ToString("D2"));

            Write(" Score: ");
            int ScorePos = CursorX;

            Write(Score.ToString("D5"));

            Write(" Lvl: ");
            int LevelPos = CursorX;

            Write(Level.ToString("D2"));

            for (double Y = 400, X = 15000; X >= -5000; Y -= Math.Cos((int)X-- / 5 & -11))
            {
                MountainRangePixels.AddLast(new MountainPixel((int)X, (int)Y, 0, 0));
            }

            OnUpdateModel += (sener, e) =>
            {
                if (GameOver)
                {
                    return;
                }

                double ElapsedSeconds = e.Seconds;

                if (!RightKeyIsPressed || !LeftKeyIsPressed)
                {
                    foreach (Star star in Stars)
                    {
                        star.Draw(Star.StarColor);
                    }

                    foreach (MountainPixel pixel in MountainRangePixels)
                    {
                        pixel.Draw(MountainPixel.TerrainColor);
                    }
                }

                if (Enemies.Count < Level)
                {
                    Enemies.AddLast(new Enemy(EnemyX, EnemyY, 0, 0, CreateSprite(EnemyX, EnemyY, EnemyTexture), Ship.Position));
                    EnemyY = Rnd.Next(100, 300);
                    EnemyX = Rnd.Next(600, 620);
                }

                if (Stars.Count < 50)
                {
                    Stars.AddLast(new Star(StarX, StarY, 0, 0));
                    StarX = Rnd.Next(1, 640);
                    StarY = Rnd.Next(10, 350);
                }

                foreach (Enemy enemy in Enemies)
                {
                    foreach (MountainPixel pixel in MountainRangePixels)
                    {
                        if (pixel.X == enemy.X)
                        {
                            enemy.VelocityY = Math.Sign((pixel.Y - 70) - enemy.Y);
                        }
                    }

                    enemy.MoveStep();

                    if (MovingObject.CheckCollision(enemy.X, enemy.Y, 18, 16, Ship.X, Ship.Y, 36, 12))
                    {
                        Enemies.Remove(enemy);
                        enemy.DisposeSprite();

                        for (i = 0; i <= 15; i++)
                        {
                            d = Random() * 360 * ToRadians;
                            j = Random(10, 200);

                            Explosions.AddLast(new Explosion(enemy.X, enemy.Y,
                                                             enemy.VX + Math.Cos(d) * j,
                                                             enemy.VY + Math.Sin(d) * j,
                                                             Blend(Color.LimeGreen, Color.Yellow, Rnd.Next(3)),
                                                             1));
                        }

                        Score += 150;
                        GotoXY(ScorePos, 0);
                        Write(Score.ToString("D5"));
                    }

                    if (enemy.X < -18)
                    {
                        Enemies.Remove(enemy);
                        enemy.DisposeSprite();
                    }

                    if (EnemyShots.Count < 1 /*Enemies.Count*/ || enemy.EnemyFire)
                    {
                        enemy.EnemyFire = false;
                        enemy.StartTiming();
                        enemy.Fire(EnemyShots);
                    }
                }

                if (RightKeyIsPressed)
                {
                    Star.VelocityX          = -3;
                    MountainPixel.VelocityX = -4;

                    foreach (Star star in Stars)
                    {
                        star.Draw(Color.Black);
                        star.Move(ElapsedSeconds);
                        star.Draw(Star.StarColor);
                    }

                    foreach (MountainPixel pixel in MountainRangePixels)
                    {
                        pixel.Draw(Color.Black);
                        pixel.Move(ElapsedSeconds);
                        pixel.Draw(MountainPixel.TerrainColor);
                    }
                }
                else if (LeftKeyIsPressed)
                {
                    Star.VelocityX          = 3;
                    MountainPixel.VelocityX = 4;

                    foreach (Star star in Stars)
                    {
                        star.Draw(Color.Black);
                        star.Move(ElapsedSeconds);
                        star.Draw(Star.StarColor);
                    }

                    foreach (MountainPixel pixel in MountainRangePixels)
                    {
                        pixel.Draw(Color.Black);
                        pixel.Move(ElapsedSeconds);
                        pixel.Draw(MountainPixel.TerrainColor);
                    }
                }

                foreach (Explosion particle in Explosions)
                {
                    particle.Draw(Color.Black);
                    particle.Move(ElapsedSeconds);
                    particle.Draw(particle.color);
                }

                foreach (EnemyShot shot in EnemyShots)
                {
                    shot.Draw(Color.Black);
                    shot.Move(ElapsedSeconds);
                    shot.Draw(Color.White);

                    if (shot.p <= 0)
                    {
                        EnemyShots.Remove(shot);
                    }

                    if (shot.Y >= 479 || shot.Y <= 20 || shot.X <= 0)
                    {
                        shot.Draw(Color.Black);
                        EnemyShots.Remove(shot);
                    }

                    if (MovingObject.CheckCollision(Ship.X, Ship.Y, 36, 12, shot.X, shot.Y, 3, 3))
                    {
                        Collision = true;
                        shot.Draw(Color.Black);
                        EnemyShots.Clear();
                    }
                }

                foreach (ShipLazer lazer in ShipLazers)
                {
                    lazer.Draw(Color.Black);
                    lazer.Move(ElapsedSeconds);
                    lazer.Draw(Color.Red);

                    if (lazer.X <= 0)
                    {
                        lazer.Draw(Color.Black);
                        ShipLazers.Remove(lazer);
                    }
                }

                LinkedListNode <Enemy>     EnemyNode = Enemies.First;
                LinkedListNode <ShipLazer> ShotNode  = ShipLazers.First;
                ShipLazer CurrentShot;
                Enemy     CurrentEnemy;

                while (ShotNode != null)
                {
                    CurrentShot = ShotNode.Value;

                    while (EnemyNode != null)
                    {
                        CurrentEnemy = EnemyNode.Value;

                        if (MovingObject.CheckCollision(CurrentEnemy.X, CurrentEnemy.Y, 18, 16, CurrentShot.X, CurrentShot.Y, 20, 2))
                        {
                            Enemies.Remove(EnemyNode);
                            CurrentEnemy.DisposeSprite();
                            ShipLazers.Remove(ShotNode);
                            CurrentShot.Draw(Color.Black);

                            for (i = 0; i <= 15; i++)
                            {
                                d = Random() * 360 * ToRadians;
                                j = Random(10, 200);

                                Explosions.AddLast(new Explosion(CurrentEnemy.X, CurrentEnemy.Y,
                                                                 CurrentEnemy.VX + Math.Cos(d) * j,
                                                                 CurrentEnemy.VY + Math.Sin(d) * j,
                                                                 Blend(Color.LimeGreen, Color.Yellow, Rnd.Next(3)),
                                                                 1));
                            }

                            Score += 150;
                            GotoXY(ScorePos, 0);
                            Write(Score.ToString("D5"));
                        }
                        else
                        {
                            EnemyNode = EnemyNode.Next;
                        }
                    }

                    ShotNode = ShotNode.Next;
                }

                if ((Collision) && (Lives > 0))
                {
                    Collision = false;
                    Ship.DisposeSprite();
                    for (i = 0; i <= 120; i++)
                    {
                        d = Random() * 360 * ToRadians;
                        j = Random(10, 200);

                        Explosions.AddLast(new Explosion(Ship.X, Ship.Y,
                                                         Ship.VX + Math.Cos(d) * j,
                                                         Ship.VY + Math.Sin(d) * j,
                                                         Color.White, 2));
                    }

                    Lives--;
                    GotoXY(LivesPos, 0);
                    Write(Lives.ToString("D2"));

                    if (Lives > 0)
                    {
                        Ship          = new Ship(100, 250, 0, 0, CreateSprite(100, 250, ShipTexture));
                        Ship.Position = Ship;
                    }
                }
                else if (Lives == 0)
                {
                    GameOver = true;
                }

                if ((Score == 2250 && Level == 1) || (Score == 5250 && Level == 2) || (Score == 9000 && Level == 3))
                {
                    ClearRaster();
                    Ship.DisposeSprite();
                    LevelUp = true;
                }
            };

            OnKeyDown += (sener, e) =>
            {
                switch (e.Key)
                {
                case Key.Escape:
                    Done = true;
                    break;

                case Key.Left:
                    Left             = true;
                    shipX            = Ship.X;
                    shipY            = Ship.Y;
                    LeftKeyIsPressed = true;
                    if (Right)
                    {
                        Right             = false;
                        RightKeyIsPressed = false;
                        UpdateSpriteTexture(ShipTexture, GetResourceBitmap("Graphics.ReversedShip.png"), new Point(0, 0), Color.Black, true);
                    }
                    Ship.Left();
                    break;

                case Key.Right:
                    Right             = true;
                    RightKeyIsPressed = true;
                    if (Left)
                    {
                        Left             = false;
                        LeftKeyIsPressed = false;
                        UpdateSpriteTexture(ShipTexture, GetResourceBitmap("Graphics.Ship.png"), new Point(0, 0), Color.Black, true);
                    }
                    Ship.Right();
                    break;

                case Key.Up:
                    Up = true;
                    Ship.Up();
                    break;

                case Key.Down:
                    Down = true;
                    Ship.Down();
                    break;

                case Key.Space:
                    Ship.Fire(ShipLazers);
                    break;
                }
            };

            OnKeyUp += (sener, e) =>
            {
                switch (e.Key)
                {
                case Key.Left:
                    LeftKeyIsPressed = false;
                    Ship.NoLeftRight();
                    break;

                case Key.Right:
                    RightKeyIsPressed = false;
                    Ship.NoLeftRight();
                    break;

                case Key.Up:
                    Up = false;
                    if (Down)
                    {
                        Ship.Down();
                    }
                    else
                    {
                        Ship.NoUpDown();
                    }
                    break;

                case Key.Down:
                    Down = false;
                    if (Up)
                    {
                        Ship.Up();
                    }
                    else
                    {
                        Ship.NoUpDown();
                    }
                    break;
                }
            };

            while (!Done)
            {
                while (!GameOver && !Done && !LevelUp)
                {
                    Sleep(1000);
                }

                if (!Done && !LevelUp)
                {
                    foreach (Enemy enemy in Enemies)
                    {
                        enemy.DisposeSprite();
                    }

                    ClearRaster();
                    OpenConsoleWindow(4, 4, 35, 25, "Game Over!", false);

                    WriteLine();
                    Write("Score: ");
                    WriteLine(Score.ToString("D5"));

                    Write("Level: ");
                    WriteLine(Level.ToString("D2"));

                    if (Score > HighScore)
                    {
                        WriteLine("New HighScore!");

                        HighScore = Score;
                    }

                    WriteLine();
                    WriteLine("To close application, press ESC");
                    WriteLine("To play again, press ENTER.");

                    ReadLine();
                    ClearConsoleWindowArea();
                    Clear();

                    EnemyShots.Clear();
                    ShipLazers.Clear();
                    Explosions.Clear();
                    Enemies.Clear();
                    MountainRangePixels.Clear();
                    Level         = 1;
                    Lives         = 2;
                    Score         = 0;
                    GameOver      = false;
                    Ship          = new Ship(100, 250, 0, 0, CreateSprite(100, 250, ShipTexture));
                    Ship.Position = Ship;

                    for (double Y = 400, X = 15000; X >= -5000; Y -= Math.Cos((int)X-- / 5 & -11))
                    {
                        MountainRangePixels.AddLast(new MountainPixel((int)X, (int)Y, 0, 0));
                    }

                    Write("Ships: ");
                    Write(Lives.ToString("D2"));

                    Write(" Score: ");
                    Write(Score.ToString("D5"));

                    Write(" Lvl: ");
                    Write(Level.ToString("D2"));
                }
                else if (!Done && !GameOver)
                {
                    foreach (Enemy enemy in Enemies)
                    {
                        enemy.DisposeSprite();
                    }

                    OpenConsoleWindow(4, 4, 35, 25, "ATTACK WAVE " + Level, true);
                    GotoXY((ConsoleWindowWidth - 9) / 2, 0);
                    WriteLine("COMPLETED");

                    Thread.Sleep(3000);
                    ClearConsoleWindowArea();
                    Clear();

                    EnemyShots.Clear();
                    ShipLazers.Clear();
                    Explosions.Clear();
                    Enemies.Clear();
                    MountainRangePixels.Clear();
                    LevelUp  = false;
                    GameOver = false;
                    Lives++;
                    Level++;
                    Ship          = new Ship(100, 250, 0, 0, CreateSprite(100, 250, ShipTexture));
                    Ship.Position = Ship;

                    for (double Y = 400, X = 15000; X >= -5000; Y -= Math.Cos((int)X-- / 5 & -11))
                    {
                        MountainRangePixels.AddLast(new MountainPixel((int)X, (int)Y, 0, 0));
                    }

                    Write("Ships: ");
                    Write(Lives.ToString("D2"));

                    Write(" Score: ");
                    Write(Score.ToString("D5"));

                    Write(" Lvl: ");
                    Write(Level.ToString("D2"));
                }
            }

            Terminate();
        }
コード例 #22
0
 public override void UnPauseEnemyComponentExcution()
 {
     CurrentEnemy.UnPauseEnemyComponentExcution();
 }
コード例 #23
0
 public void DealDamage()
 {
     CurrentEnemy.GetDamage(DamagePerClick);
 }