Пример #1
0
        public GamePage(MainWindow frame, string playerChoice)
        {
            InitializeComponent();
            // start background music player
            soundEngine = new SoundEngine(SoundContext.GamePage);
            soundEngine.PlayBackgroundMusic();

            frameRef         = frame;
            frame.Background = new SolidColorBrush(Colors.Black);
            pageData         = new PageData(this);
            // start game
            monsterImages     = new Dictionary <int, Image>();
            obstacleImages    = new List <Image>();
            portalImages      = new List <Image>();
            interactionImages = new List <Image>();
            currentSession    = new GameSession(this, playerChoice);
            Player.Source     = currentSession.CurrentPlayer.GetImageSource();
            Grid.SetColumn(Player, currentSession.PlayerPosLeft);
            Grid.SetRow(Player, currentSession.PlayerPosTop);
            // prepare animations
            Movable        = true;
            RemovableItems = false;
            ItemSellFlag   = false;
            IgnoreNextKey  = false;
        }
Пример #2
0
        public MenuPage(MainWindow frame)
        {
            InitializeComponent();
            // start background music player
            SoundLibrary.InitializeLibrary(true);
            soundEngine = new SoundEngine(SoundContext.MenuPage);
            soundEngine.PlayBackgroundMusic();

            frameRef         = frame;
            frame.Background = new SolidColorBrush(Colors.Beige);
        }
Пример #3
0
        protected override void RunContent()
        {
            // stop game music and play battle music
            parentSession.SoundEngine.PauseBackgroundMusic();
            SoundEngine.PlayBackgroundMusic();

            parentSession.SendText("\nPojedynek!");
            battleScene.SetupDisplay();
            CopyPlayerState();
            // battle
            if (Monster.BattleGreetings != null)
            {
                battleScene.SendColorText(Monster.BattleGreetings, "red");
                // play battle monster greetings
                SoundEngine.WaitAndPlay(Monster.Name, SoundType.MonsterInit);
                battleScene.SendBattleText("");
            }
            if (!possibleToEscape)
            {
                battleScene.SendColorText("Ostrzezenie - z tego pojedynku nie mozna uciec", "yellow");
                battleScene.SendBattleText("");
            }
            battleScene.SetSkills(parentSession.currentPlayer.ListAvailableSkills(possibleToEscape));
            while (Monster.Health > 0)                                                            // reminder: there will be a separate mechanism for what happens when Player.Health == 0
            {
                if (parentSession.currentPlayer.ListAvailableSkills(possibleToEscape).Count == 0) // player has run out of stamina
                {
                    RestorePlayerState();
                    battleScene.SendColorText("Zadne dalsze ruchy nie sa dostepne - porazka! (Nacisnij dowolny klawisz, aby kontynuowac)", "red");
                    parentSession.GetKeyResponse();
                    parentSession.SendText("Zadne dalsze ruchy nie sa dostepne - porazka!");
                    battleScene.EndDisplay();
                    // stop battle music and resume main game music
                    SoundEngine.StopBackgroundMusic();
                    parentSession.SoundEngine.ResumeBackgroundMusic();
                    return;
                }
                // player attacks first
                Skill playerResponse = parentSession.GetListBoxResponse();
                if (playerResponse.PublicName == "Ucieczka (tylko polowa odniesionych obrazen sie zagoi!)")
                {
                    battleScene.EndDisplay();
                    if (firstBlood)
                    {
                        parentSession.SendText("Potwor sciga cie przez jakis czas i nie jestes w stanie opatrzyc swoich ran...");
                    }
                    else
                    {
                        parentSession.SendText("Wyglada dosyc groznie, lepiej trzymac sie z daleka.");
                    }
                    battleResult = false;
                    RestorePlayerState(false);
                    // stop battle music and resume main game music
                    SoundEngine.StopBackgroundMusic();
                    parentSession.SoundEngine.ResumeBackgroundMusic();
                    return;
                }
                // play item sound
                SoundEngine.PlaySound(playerResponse.ReqItem.ToString(), SoundType.BattleRequiredItem);
                firstBlood = true;
                // calculate damage
                List <StatPackage> playerAttack    = playerResponse.BattleMove(parentSession.currentPlayer, parentSession.GetActiveItemNames());
                List <StatPackage> memorizedAttack = new List <StatPackage>();
                foreach (StatPackage pack in playerAttack)
                {
                    memorizedAttack.Add(pack.Copy());
                }
                playerAttack = parentSession.ModifyOffensive(playerAttack);
                for (int i = 0; i < playerAttack.Count && i < memorizedAttack.Count; i++)
                {
                    battleScene.SendColorText(playerAttack[i].CustomText, "green");
                    if (memorizedAttack[i].HealthDmg != playerAttack[i].HealthDmg)
                    {
                        battleScene.SendColorText("Twoje przedmioty pozwalaja zadac dodatkowe " + (-memorizedAttack[i].HealthDmg + playerAttack[i].HealthDmg) + " dmg!", "yellow");
                        memorizedAttack[i].HealthDmg = playerAttack[i].HealthDmg;
                    }
                    if (memorizedAttack[i].StrengthDmg != playerAttack[i].StrengthDmg)
                    {
                        battleScene.SendColorText("Twoje przedmioty pozwalaja zadac dodatkowe " + (-memorizedAttack[i].StrengthDmg + playerAttack[i].StrengthDmg) + " debuffa do sily!", "yellow");
                        memorizedAttack[i].StrengthDmg = playerAttack[i].StrengthDmg;
                    }
                    if (memorizedAttack[i].ArmorDmg != playerAttack[i].ArmorDmg)
                    {
                        battleScene.SendColorText("Twoje przedmioty pozwalaja zadac dodatkowe " + (-memorizedAttack[i].ArmorDmg + playerAttack[i].ArmorDmg) + " debuffa do pancerza!", "yellow");
                        memorizedAttack[i].ArmorDmg = playerAttack[i].ArmorDmg;
                    }
                    if (memorizedAttack[i].PrecisionDmg != playerAttack[i].PrecisionDmg)
                    {
                        battleScene.SendColorText("Twoje przedmioty pozwalaja zadac dodatkowe " + (-memorizedAttack[i].PrecisionDmg + playerAttack[i].PrecisionDmg) + " debuffa do precyzji!", "yellow");
                        memorizedAttack[i].PrecisionDmg = playerAttack[i].PrecisionDmg;
                    }
                    if (memorizedAttack[i].MagicPowerDmg != playerAttack[i].MagicPowerDmg)
                    {
                        battleScene.SendColorText("Twoje przedmioty pozwalaja zadac dodatkowe " + (-memorizedAttack[i].MagicPowerDmg + playerAttack[i].MagicPowerDmg) + " debuffa do mocy magicznej!", "yellow");
                        memorizedAttack[i].MagicPowerDmg = playerAttack[i].MagicPowerDmg;
                    }
                }
                playerAttack = Monster.React(playerAttack);
                for (int i = 0; i < playerAttack.Count && i < memorizedAttack.Count; i++)
                {
                    if (memorizedAttack[i].HealthDmg != playerAttack[i].HealthDmg)
                    {
                        battleScene.SendColorText("Specjalne umiejetnosci potwora zatrzymuja " +
                                                  (memorizedAttack[i].HealthDmg - playerAttack[i].HealthDmg) + " dmg!", "yellow");
                    }
                    if (memorizedAttack[i].StrengthDmg != playerAttack[i].StrengthDmg)
                    {
                        battleScene.SendColorText("Specjalne umiejetnosci potwora zatrzymuja " +
                                                  (memorizedAttack[i].StrengthDmg - playerAttack[i].StrengthDmg) + " debuffa do sily!", "yellow");
                    }
                    if (memorizedAttack[i].ArmorDmg != playerAttack[i].ArmorDmg)
                    {
                        battleScene.SendColorText("Specjalne umiejetnosci potwora zatrzymuja " +
                                                  (memorizedAttack[i].ArmorDmg - playerAttack[i].ArmorDmg) + " debuffa do pancerza!", "yellow");
                    }
                    if (memorizedAttack[i].PrecisionDmg != playerAttack[i].PrecisionDmg)
                    {
                        battleScene.SendColorText("Specjalne umiejetnosci potwora zatrzymuja " +
                                                  (memorizedAttack[i].PrecisionDmg - playerAttack[i].PrecisionDmg) + " debuffa do precyzji!", "yellow");
                    }
                    if (memorizedAttack[i].MagicPowerDmg != playerAttack[i].MagicPowerDmg)
                    {
                        battleScene.SendColorText("Specjalne umiejetnosci potwora zatrzymuja " +
                                                  (memorizedAttack[i].MagicPowerDmg - playerAttack[i].MagicPowerDmg) + " debuffa do mocy magicznej!", "yellow");
                    }
                }
                parentSession.UpdateStat(6, -1 * playerResponse.StaminaCost);
                battleScene.SetSkills(parentSession.currentPlayer.ListAvailableSkills(possibleToEscape));
                battleScene.ResetChoice();
                // monster attack
                if (Monster.Health == 0)
                {
                    continue;
                }
                List <StatPackage> effectiveAttack = Monster.BattleMove();
                List <StatPackage> monsterAttack   = new List <StatPackage>();
                foreach (StatPackage pack in effectiveAttack)
                {
                    monsterAttack.Add(pack.Copy());
                }
                effectiveAttack = parentSession.ModifyDefensive(effectiveAttack);
                effectiveAttack = parentSession.currentPlayer.React(effectiveAttack);
                for (int i = 0; i < monsterAttack.Count && i < effectiveAttack.Count; i++)
                {
                    battleScene.SendColorText(monsterAttack[i].CustomText, "red");
                    if (monsterAttack[i].HealthDmg != effectiveAttack[i].HealthDmg)
                    {
                        battleScene.SendColorText("Twoj pancerz i przedmioty zatrzymuja " +
                                                  (monsterAttack[i].HealthDmg - effectiveAttack[i].HealthDmg) + " dmg!", "yellow");
                    }
                    if (monsterAttack[i].StrengthDmg != effectiveAttack[i].StrengthDmg)
                    {
                        battleScene.SendColorText("Twoj pancerz i przedmioty zatrzymuja " +
                                                  (monsterAttack[i].StrengthDmg - effectiveAttack[i].StrengthDmg) + " debuffa do sily!", "yellow");
                    }
                    if (monsterAttack[i].ArmorDmg != effectiveAttack[i].ArmorDmg)
                    {
                        battleScene.SendColorText("Twoj pancerz i przedmioty zatrzymuja " +
                                                  (monsterAttack[i].ArmorDmg - effectiveAttack[i].ArmorDmg) + " debuffa do pancerza!", "yellow");
                    }
                    if (monsterAttack[i].PrecisionDmg != effectiveAttack[i].PrecisionDmg)
                    {
                        battleScene.SendColorText("Twoj pancerz i przedmioty zatrzymuja " +
                                                  (monsterAttack[i].PrecisionDmg - effectiveAttack[i].PrecisionDmg) + " debuffa do precyzji!", "yellow");
                    }
                    if (monsterAttack[i].MagicPowerDmg != effectiveAttack[i].MagicPowerDmg)
                    {
                        battleScene.SendColorText("Twoj pancerz i przedmioty zatrzymuja " +
                                                  (monsterAttack[i].MagicPowerDmg - effectiveAttack[i].MagicPowerDmg) + " debuffa do mocy magicznej!", "yellow");
                    }
                }
                // play monster bite sound
                SoundEngine.WaitAndPlay(Monster.Name, SoundType.MonsterBite);
                battleScene.SendBattleText("");
                battleScene.RefreshStats();
                parentSession.RefreshStats();
            }
            // after battle - clean up
            SoundEngine.WaitAndPlay(Monster.Name, SoundType.MonsterDeath);
            battleResult = true;
            RestorePlayerState();
            battleScene.SendColorText("Zwyciestwo! (Nacisnij dowolny klawisz, aby kontynuowac)", "green");
            SoundEngine.WaitAndPlay(SoundNames.PLAYER_WIN, SoundType.Player);
            parentSession.GetKeyResponse();
            battleScene.EndDisplay();
            parentSession.ResetItemsAfterBattle();
            parentSession.SendText("Zwyciestwo! Zyskane punkty doswiadczenia: " + Monster.XPValue);
            if (rewards)
            {
                VictoryReward();
            }
            //parentSession.UpdateStat(7, Monster.XPValue); // for smoother display, this one was moved to GameSession.cs
            // stop battle music and resume main game music
            SoundEngine.StopBackgroundMusic();
            parentSession.SoundEngine.ResumeBackgroundMusic();
        }