public Weapon Generate(Character character) { var random = new Random(); var weapon = new Weapon(); var value = random.Next(5); switch (value) { case 0: weapon.Mace = true; break; case 1: weapon.Sword = true; break; case 2: weapon.Dagger = true; break; case 3: weapon.Staff = true; break; case 4: weapon.Bow = true; break; default: throw new ArgumentException("Unreachable code"); } value = (int)(random.Next(10)*character.Level); weapon.Attack = value; return weapon; }
/// <summary> /// При наступлении нового уровня, герою восполняются жизни /// </summary> /// <param name="character"></param> public void FillLife(Character character) { if (character == null) { throw new ArgumentNullException("character"); } character.Player.Life = character.Player.MaxLife; }
/// <summary> /// Рассчет того, сколько получит герой за убийство монстра /// </summary> /// <param name="character"></param> /// <param name="enemy"></param> public void AddXp(Character character, Enemy enemy) { if (character.Level - enemy.Level > 10) { return; } if (character.Level - enemy.Level > -10) { return; } if (character.Level > enemy.Level) { character.Xp += enemy.Xp*Math.Abs(character.Level - enemy.Level)/10; } if (character.Level < enemy.Level) { character.Xp += enemy.Xp*(Math.Abs(character.Level - enemy.Level)/10 + 1); } }
/// <summary> /// Рассчет количества опыта получаемого за врага. /// опыт начисляется в зависимости от того, какая разница уровней /// есть между сражающимися. Если один из них слишком крут, то опыта /// не будет. /// </summary> /// <param name="character"></param> /// <param name="beast"></param> public void AddXp(Character character, Beast beast) { if (beast == null) { throw new ArgumentNullException("beast"); } if (character.Level - beast.Level > 10) { return; } if (character.Level - beast.Level > -10) { return; } if (character.Level > beast.Level) { character.Xp += beast.Xp*Math.Abs(character.Level - beast.Level)/10; } if (character.Level < beast.Level) { character.Xp += beast.Xp*(Math.Abs(character.Level - beast.Level)/10 + 1); } }
/// <summary> /// При наступлении нового уровня, метод восстанавливает выносливость у персонажа /// </summary> /// <param name="character"></param> public void FillStamina(Character character) { character.Player.Stamina = character.Player.MaxStamina; }
/// <summary> /// Создание новой игры, ввод и распределение параметров персонажа /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button14_Click(object sender, EventArgs e) { var newGame = new NewGame(this); newGame.Show(); newGame.Closing += (o, args) => { character = new Character(); character.Player = MainStatistic; textBox1.Text = character.Player.Stats[0].ToString(); textBox2.Text = character.Player.Stats[1].ToString(); textBox3.Text = character.Player.Stats[2].ToString(); textBox4.Text = character.Player.Stats[3].ToString(); textBox5.Text = character.Player.Stats[4].ToString(); textBox6.Text = character.Player.Stats[5].ToString(); textBox7.Text = character.Player.Stats[6].ToString(); PlayerClass.Text = character.Player.Class; game = new Game(); game.LevelUp(character, this); }; }
/// <summary> /// Пополнение жизни персонажу /// </summary> /// <param name="character"></param> public void FillLife(Character character) { character.Player.Life = character.Player.MaxLife; }
/// <summary> /// Рассчет одного хода битвы /// В зависимости от того, у кого круче уровень, будет по разному рассчитаны коэффициенты атаки и защиты, /// соответственно и урона. /// Далее сравниваются атака и защита борющихся и в зависимости от этого опять же меняются коэффициенты. /// </summary> /// <param name="character"></param> /// <param name="beast"></param> /// <param name="charDices"></param> /// <param name="beastDices"></param> public void Turn(Character character, Beast beast, List<int> charDices, List<int> beastDices) { if (character.Level > beast.Level) { if (charAttack.Count >= beastAttack.Count) { for (var i = 0; i < charAttack.Count; i++) { if (charAttack[i].Power > beastAttack[i].Defence) { if (charDices.Count(j => j == 6) >= 1) { beast.Life -= charAttack[i].Power - (int) (beastAttack[i].Defence*0.4m); } else { if (charDices.Count(j => j == 5) >= 2) { beast.Life -= charAttack[i].Power - (int) (beastAttack[i].Defence*0.6m); } if (charDices.Count(j => j == 5) >= 1) { beast.Life -= charAttack[i].Power - (int) (beastAttack[i].Defence*0.8m); } } } if (charAttack[i].Power < beastAttack[i].Defence) { if (charDices.Count(j => j == 6) >= 2) { beast.Life -= charAttack[i].Power - (int) (beastAttack[i].Defence*0.5m); } else { if (charDices.Count(j => j == 5) <= 0) { character.Player.Life -= charAttack[i].Power - (int) (beastAttack[i].Defence*0.8m); } if (charDices.Count(j => j == 5) < 2) { beast.Life -= charAttack[i].Power - (int) (beastAttack[i].Defence*0.4m); } } } } } } if (beast.Life <= 0) { new ExpierenceService().AddXp(character, beast); } }
/// <summary> /// Игрок получает новый уровень. Задается количество очков для увеличения /// характеристик. Жизнь и выносливость растут согласно коэффициентам /// класса персонажа /// </summary> /// <param name="character"></param> /// <param name="form1"></param> public void LevelUp(Character character, Form1 form1) { character.Player.LevelPoints = 5; character.Player.Life = character.Player.Life + character.Player.Life*(int) character.Player.life[character.Player.Class][0]; character.Player.Stamina = character.Player.Stamina + character.Player.Life*(int) character.Player.life[character.Player.Class][1]; form1.NewLevel(); }
/// <summary> /// Битва между персонажем и чудовищем /// </summary> /// <param name="character"></param> /// <param name="beast"></param> public void Fight(Character character, Beast beast) { charAttack = character.GetAttacks(); beastAttack = beast.GetAttacks(); }