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 }); }
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 }); }
void Update_Info_thread(object obj) { byte g = (byte)obj; if (Player_HP.InvokeRequired) { Player_HP.Invoke(new MethodInvoker(delegate { Player_HP.Text = string.Format("HP: {0}/{1}", hero.HP, hero.FULLHP); })); } if (Enemy_HP.InvokeRequired) { Enemy_HP.Invoke(new MethodInvoker(delegate { Enemy_HP.Text = string.Format("HP: {0}/{1}", enemy.HP, enemy.FULLHP); })); } string Hero_text = string.Format(@"Full HP: {0} Damage: {1} Evade Chance: {2} Block Chance: {3} CriticalDMG %: {4} CriticalDMG: {5}%", hero.HP, hero.DMG, hero.EvadeChance, hero.BlockChance, hero.CriticalDMGChance, hero.CriticalDMG); string Enemy_text = string.Format(@"Full HP: {0} Damage: {1} Evade Chance: {2} Block Chance: {3} CriticalDMG %: {4} CriticalDMG: {5}%", enemy.HP, enemy.DMG, enemy.EvadeChance, enemy.BlockChance, enemy.CriticalDMGChance, enemy.CriticalDMG); if (Hero_Stats.InvokeRequired) { Hero_Stats.Invoke(new MethodInvoker(delegate { Hero_Stats.Text = Hero_text; })); } if (Enemy_Stats.InvokeRequired) { Enemy_Stats.Invoke(new MethodInvoker(delegate { Enemy_Stats.Text = Enemy_text; })); } if (hero.HP <= 0) { Thread t = Thread.CurrentThread; fight = false; enemyRectanglepos.RemoveAt(g); enemys.RemoveAt(g); foreach (Thread thr in thList) { thr.Resume(); } LoadEnemySightAndWay(); if (pictureBox2.InvokeRequired) { pictureBox2.Invoke(new MethodInvoker(delegate { pictureBox2.Image = Image.FromFile(Environment.CurrentDirectory + "\\ImagesH\\Battle_tendence.png"); })); } if (Attack_Button.InvokeRequired) { Attack_Button.Invoke(new MethodInvoker(delegate { Attack_Button.Enabled = false; Attack_Button.Visible = false; })); } if (STOIKA_BUTTON.InvokeRequired) { STOIKA_BUTTON.Invoke(new MethodInvoker(delegate { STOIKA_BUTTON.Enabled = false; STOIKA_BUTTON.Visible = false; })); } if (Player_HP.InvokeRequired) { Player_HP.Invoke(new MethodInvoker(delegate { Player_HP.Visible = false; })); } if (Enemy_HP.InvokeRequired) { Enemy_HP.Invoke(new MethodInvoker(delegate { Enemy_HP.Visible = false; })); } if (Hero_Stats.InvokeRequired) { Hero_Stats.Invoke(new MethodInvoker(delegate { Hero_Stats.Visible = false; })); } if (Enemy_Stats.InvokeRequired) { Enemy_Stats.Invoke(new MethodInvoker(delegate { Enemy_Stats.Visible = false; })); } if (hodiki.InvokeRequired) { hodiki.Invoke(new MethodInvoker(delegate { hodiki.Visible = false; hodiki.Text = "<--Ваш ход"; hodiki.ForeColor = Color.Green; })); } t.Abort(); } else if (enemy.HP <= 0) { if (pictureBox2.InvokeRequired) { pictureBox2.Invoke(new MethodInvoker(delegate { pictureBox2.Image = Image.FromFile(Environment.CurrentDirectory + "\\ImagesH\\Battle_tendence.png"); })); } Thread t = Thread.CurrentThread; fight = false; enemyRectanglepos.RemoveAt(g); enemys.RemoveAt(g); foreach (Thread thr in thList) { thr.Resume(); } LoadEnemySightAndWay(); if (hodiki.InvokeRequired) { hodiki.Invoke(new MethodInvoker(delegate { hodiki.Visible = false; hodiki.Text = "<--Ваш ход"; hodiki.ForeColor = Color.Green; })); } if (Attack_Button.InvokeRequired) { Attack_Button.Invoke(new MethodInvoker(delegate { Attack_Button.Enabled = false; Attack_Button.Visible = false; })); } if (STOIKA_BUTTON.InvokeRequired) { STOIKA_BUTTON.Invoke(new MethodInvoker(delegate { STOIKA_BUTTON.Enabled = false; STOIKA_BUTTON.Visible = false; })); } if (Player_HP.InvokeRequired) { Player_HP.Invoke(new MethodInvoker(delegate { Player_HP.Visible = false; })); } if (Enemy_HP.InvokeRequired) { Enemy_HP.Invoke(new MethodInvoker(delegate { Enemy_HP.Visible = false; })); } if (Hero_Stats.InvokeRequired) { Hero_Stats.Invoke(new MethodInvoker(delegate { Hero_Stats.Visible = false; })); } if (Enemy_Stats.InvokeRequired) { Enemy_Stats.Invoke(new MethodInvoker(delegate { Enemy_Stats.Visible = false; })); } t.Abort(); } else { if (Hero_Attacked) { Turn_Enemy.Invoke(this, new NumOfEnemy { i = g }); } else { Turn_Hero.Invoke(this, new NumOfEnemy { i = g }); } } }