Ejemplo n.º 1
0
        void _thread(object obj)
        {
            byte g = (byte)obj;

            if (Attack_Button.InvokeRequired)
            {
                Attack_Button.Invoke(new MethodInvoker(delegate { Attack_Button.Enabled = true; }));
            }
            if (STOIKA_BUTTON.InvokeRequired)
            {
                STOIKA_BUTTON.Invoke(new MethodInvoker(delegate { STOIKA_BUTTON.Enabled = true; }));
            }
            sw = new Stopwatch();
            sw.Start();
            while (!Hero_Attacked)
            {
                if (sw.ElapsedMilliseconds >= 20000)
                {
                    Hero_Attacked = true;
                }
            }
            sw.Stop();
            UpdInfo.Invoke(this, new NumOfEnemy {
                i = g
            });
        }
Ejemplo n.º 2
0
        public void Fight_Source(object sender, NumOfEnemy arg)
        {
            Player_HP.Visible     = true;
            Enemy_HP.Visible      = true;
            Hero_Stats.Visible    = true;
            Enemy_Stats.Visible   = true;
            Attack_Button.Visible = true;
            STOIKA_BUTTON.Visible = true;
            hodiki.Visible        = true;
            hodiki.ForeColor      = Color.Green;
            Random rnd = RandomProvider.GetThreadRandom();

            if (!IsHeroCreated)
            {
                hero          = new Hero(stHP, stHP, stDMG, stEvadeChance, stBlockChance, CriticalDmgChance, CriticalDmg);
                IsHeroCreated = true;
            }
            int enemyFullhp = (int)rnd.Next(enstHP + Dungeon_Number * 5, enstHP + Dungeon_Number * 7);

            enemy = new Enemy(enemyFullhp,
                              enemyFullhp,
                              rnd.Next(enstDMG + Dungeon_Number * 3, enstDMG + Dungeon_Number * 5),
                              rnd.Next(enstEvadeChance + Dungeon_Number, enstEvadeChance + Dungeon_Number * 2),
                              rnd.Next(enstBlockChance + Dungeon_Number, enstBlockChance + Dungeon_Number * 3),
                              rnd.Next(enCriticalDmgChance + Dungeon_Number * 2, enCriticalDmgChance + Dungeon_Number * 3),
                              rnd.Next(enCriticalDmg + Dungeon_Number * 5, enCriticalDmg + Dungeon_Number * 7));
            Application.DoEvents();
            UpdInfo.Invoke(this, new NumOfEnemy {
                i = arg.i
            });
        }
Ejemplo n.º 3
0
        void _thread2(object obj)
        {
            if (hodiki.InvokeRequired)
            {
                hodiki.Invoke(new MethodInvoker(delegate
                {
                    hodiki.Text      = "<--Ход противника";
                    hodiki.ForeColor = Color.Red;
                }));
            }
            byte   g   = (byte)obj;
            Random rnd = RandomProvider.GetThreadRandom();

            // Ход врага
            if (Attack_Button.InvokeRequired)
            {
                Attack_Button.Invoke(new MethodInvoker(delegate { Attack_Button.Enabled = false; }));
            }
            if (STOIKA_BUTTON.InvokeRequired)
            {
                STOIKA_BUTTON.Invoke(new MethodInvoker(delegate { STOIKA_BUTTON.Enabled = false; }));
            }

            if (rnd.NextDouble() > 0.25) //бьёт с вероятностью 75%
            {
                if (rnd.NextDouble() <= (double)hero.BlockChance / 100)
                {
                    if (stoika_opt)
                    {
                        if (rnd.NextDouble() <= enemy.EvadeChance) //10 процентов на срабатывание контратаки
                        {
                            //enemy.HP -= hero.DMG;
                        }
                        else if (rnd.NextDouble() <= 0.1)
                        {
                            enemy.HP -= hero.DMG;
                        }
                    }
                }//заблочил
                else
                {
                    if (rnd.NextDouble() <= (double)hero.EvadeChance / 100)
                    {
                    }   //увернулся
                    else
                    {
                        if (rnd.NextDouble() <= (double)enemy.CriticalDMGChance / 100) //крит. шанс
                        {
                            hero.HP -= (int)(enemy.DMG * (enemy.CriticalDMG / 100));
                        }
                        else
                        {
                            hero.HP -= enemy.DMG;
                        }
                    }
                }
            }
            else //Блокирует с +25% шансом, не бьёт
            {
                Enemy_is_blocking  = true;
                enemy.BlockChance += 25;
            }
            if (stoika_opt)
            {
                stoika_opt         = false;
                hero.BlockChance  -= 50;
                hero.DMG          -= 7;
                enemy.EvadeChance -= 30;
            }
            Hero_Attacked = false;
            Thread.Sleep(1500);
            if (hodiki.InvokeRequired)
            {
                hodiki.Invoke(new MethodInvoker(delegate
                {
                    hodiki.Text      = "<--Ваш ход";
                    hodiki.ForeColor = Color.Green;
                }));
            }
            UpdInfo.Invoke(this, new NumOfEnemy {
                i = g
            });
        }