文字类小游戏

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值