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 }); }
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 }); }
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 }); }