using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _01_英雄对决案例
{
internal class Program
{
static void Main(string[] args)
{
Hero[] heroes = new Hero[] { new Hero() { Name = "德玛西亚", Blood = 200, Defense = 0.3, HitRate = 0.8, CriticalRate = 0.2, Dodge = 0.1, Hit = 20, Speed = 50 }, new Hero() { Name = "后羿", Speed = 80, Blood = 100, Defense = 0.1, HitRate = 0.9, CriticalRate = 0.3, Dodge = 0.2, Hit = 30 }, new Hero() { Name = "狄仁杰", Blood = 150, Defense = 0.2, HitRate = 0.7, CriticalRate = 0.1, Dodge = 0.3, Hit = 15, Speed = 60 }, new Hero() { Name = "神赵云", Blood = 120, Defense = 0.4, HitRate = 0.1, CriticalRate = 0.1, Dodge = 0.2, Hit = 100, Speed = 70 }, new Hero() { Name = "神曹操", Blood = 180, Defense = 0.1, HitRate = 0.5, CriticalRate = 0.1, Dodge = 0.2, Hit = 20, Speed = 40 } };
for (int i = 0; i < heroes.Length; i++)
{
Console.Write("名字"+heroes[i].Name + " ");
Console.Write("血量"+heroes[i].Blood + " ");
Console.Write("防御力"+heroes[i].Defense + " ");
Console.Write("命中率"+heroes[i].HitRate + " ");
Console.Write("暴击率"+heroes[i].CriticalRate + " ");
Console.Write("闪避率"+heroes[i].Dodge + " ");
Console.Write("攻击力"+heroes[i].Hit + " ");
Console.Write("速度"+heroes[i].Speed + " ");
Console.WriteLine();
}
Hero h1 = null;
Hero h2 = null;
Console.WriteLine("请选择你的英雄\n输入英雄名字即可");
string h11 = Console.ReadLine();
for (int i = 0; i < heroes.Length; i++)
{
if (h11==heroes[i].Name)
{
h1 = heroes[i];
break;
}
}
Console.WriteLine("请选择敌方英雄\n输入英雄名字即可");
string h22 = Console.ReadLine();
for (int i = 0; i < heroes.Length; i++)
{
if (h22 == heroes[i].Name)
{
h2 = heroes[i];
break;
}
}
Console.WriteLine("输入回车键开始游戏");
Console.ReadLine();
Console.Clear();
PK(h1, h2);
Console .ReadLine();
}
static Random random = new Random();
static public void PK(Hero hero1, Hero hero2)
{
int count = 1;
// 获取发动技能的英雄
Hero AttackHero = hero1 .Speed > hero2 .Speed ? hero1 : hero2 ;
// 获取技能伤害的英雄
Hero HitHero = hero1 .Speed >
hero2 .Speed ? hero2 : hero1;
// 输出获得先手的英雄
Console.WriteLine($"{AttackHero.Name}谁获得了先手");
while (hero1 .Blood > 0 && hero2 .Blood > 0)
{
Console.WriteLine($"第{count++}回合");
AttackHero.Attack(HitHero);
// 交换攻击方和受击方
Hero temp = AttackHero;
AttackHero = HitHero;
HitHero = temp;
}
Hero winner = HitHero.Blood > AttackHero.Blood ?HitHero: AttackHero;
Console.WriteLine($"{winner.Name}获胜");
}
}
class Hero
{
#region 英雄属性
public string Name { get; set; }
public int Id { get; }
public double Blood { get; set; }
public double Defense { get; set; }// 防御力
public double HitRate { get; set; }// 命中率
public double CriticalRate { get; set; }// 暴击率
public double Dodge { get; set; }// 闪避率
public double Hit { get; set; }// 攻击力
public double Speed { get; set; }// 速度
// 创建随机数对象
static Random random = new Random();
// 使用无参构造函数初始化Id
public Hero()
{
Id = random.Next();
}
#endregion
/// <summary>
/// 攻击其他英雄的方法
/// </summary>
/// <param name="hero">要攻击的英雄</param>
public void Attack(Hero hero)
{
// 计算命中率
// 命中率 = 攻击方的命中率 *(1- 对方的躲闪概率)
double hitRate = this.HitRate * (1 - hero .Dodge) * 10000;
// 随机命中的结果
double num = random.Next(10000);
if (num < hitRate)
{
// 命中
// 计算暴击率
double cnum = this.CriticalRate * 10000;
// 随机暴击的结果
double cnum1 = random.Next(10000);
// 判断是否暴击
if (cnum1 < cnum)
{
// 暴击
double hit = this .Hit * 2 * (1 - hero .Defense);
hero .Blood -= hit;
Console.WriteLine($"{this.Name}攻击了{hero .Name},{hero .Name}收到了暴击,{this.Name}造成了{hit}伤害, {hero .Name}剩余血量{hero .Blood}");
}
else
{
// 未暴击
double hit = this.Hit * (1 - hero .Defense);
hero .Blood -= hit;
Console.WriteLine($"{this.Name}攻击了{hero .Name},{hero .Name}收到了暴击,{this.Name}造成了{hit}伤害, {hero .Name}剩余血量{hero .Blood}");
}
}
else
{
Console.WriteLine($"{this.Name}攻击了{hero .Name},{hero .Name}躲避了攻击,{this .Name}造成了0伤害");
}
Console.WriteLine("按回车键进行攻击");
Console.ReadLine();
}
}
}
07-04
303

02-19
498
