C#事件(event)练习题

作业一:

 1.英雄:大招1000,防御力为300,当英雄对怪物进行攻击时,怪物会做出反应;

 2.怪物:攻击力500,防御力400,当怪物对英雄进行攻击时,英雄会做出反应;

 3..如果a攻击力大于b的防御力,那a攻击b时,b会受伤害,否则就是避开

 4.一个英雄对象,4只怪物,怪物编号不同;

class Hero
    {
        //声明委托
        public delegate void HeroHandler(int a);
        //攻击事件
        public static event HeroHandler Hhit;
        private string name;//英雄名字
        private int attack = 1000;//攻击力为1000
        private int defense = 300;//防御力为300

        public string Name
        {
            get
            {
                return name;
            }

            set
            {
                name = value;
            }
        }

        public int Attack
        {
            get
            {
                return attack;
            }

            set
            {
                attack = value;
            }
        }

        public int Defense
        {
            get
            {
                return defense;
            }

            set
            {
                defense = value;
            }
        }

        public Hero(string name ) {
            this.Name = name;
            Monster.Mhit += Reaction;//怪物攻击绑定反应事件
        }
        /// <summary>
        /// 攻击方法
        /// </summary>
        public void Att() {
           
            //如果事件不为空 英雄被怪物攻击做出反应
            if (Hhit!=null) {
                Hhit(this.Attack);
            }
        }
        /// <summary>
        /// 被攻击做出反应
        /// </summary>
        /// <param name="monattack"></param>
        public void Reaction(int monattack) {
            if (monattack > Defense)//如果接收到的怪物的攻击大自身防御做出反应
            {

                Console.WriteLine("英雄"+Name+"受到伤害");
            }
            else {
                Console.WriteLine("避开");
            }
        }

    }
    class Monster
    {
        public delegate void MonHandler(int a);
        public static event MonHandler Mhit;
        private int id;//怪物编号
        private int attack = 500;
        private int defense = 400;

        public int Id
        {
            get
            {
                return id;
            }

            set
            {
                id = value;
            }
        }

        public int Attack
        {
            get
            {
                return attack;
            }

            set
            {
                attack = value;
            }
        }

        public int Defense
        {
            get
            {
                return defense;
            }

            set
            {
                defense = value;
            }
        }

        public Monster(int id) {
            this.Id = id;
            Hero.Hhit += Reaction;
        }
        /// <summary>
        /// 攻击
        /// </summary>
        /// <param name="attack"></param>
        public void Att()
        {
            
            if (Mhit != null)
            {
                Mhit(this.Attack);
            }
        }
        /// <summary>
        /// 受到攻击做出的反应
        /// </summary>
        /// <param name="herattack"></param>
        public void Reaction(int herattack) {
            if (herattack > Defense)
            {
                Console.WriteLine("怪物"+Id+"受到伤害");
            }
            else {
                Console.WriteLine("避开");
            }
        }
    }

输出结果




作业二:热水器

 烧水器,显示器,警报器

扫描二维码关注公众号,回复: 2685973 查看本文章

1.烧水器:负责烧水,温度会发生改变

2.随着温度发生改变,显示器显示的内容就发生改变;

3.当温度到达100时,发出警报声,停止烧水;

 /// <summary>
    /// 烧水器类
    /// </summary>
    class Boiler
    {
        public Boiler() {
            //与警报器绑定烧水停止事件
            Alarm.callHandler += Stop;
        }
        public delegate void WaterBhandler(int a);
        public static WaterBhandler Wathandler;
        private int tem = 35;//温度

        public int Tem
        {
            get
            {
                return tem;
            }

            set
            {
                tem = value;
            }
        }

        /// <summary>
        /// 将水倒入开始烧水
        /// </summary>
        /// <param name="tem"></param>
        public void WaterB() {
            Console.WriteLine("倒入温度为{0}的水",Tem);
            Console.WriteLine("正在烧水...");
            Tem += 65;//加热65度
            //如果事件不为空 
            if (Wathandler!=null) {

                Wathandler(Tem);//将温度传递给显示器和警报器
            }
        }
        /// <summary>
        /// 停止烧水
        /// </summary>
        public void Stop() {
            
            if (Alarm.callHandler!=null) {
                Console.WriteLine("停止烧水");
            }
        }

    }
    /// <summary>
    /// 显示器类
    /// </summary>
    class Display
    {
        public Display() {
            //与烧水器绑定
            Boiler.Wathandler += Show;
        }
        /// <summary>
        /// 
        ///同步显示温度 </summary>
        /// <param name="tem"></param>
        public void Show(int tem) {
            Console.WriteLine("显示温度"+tem);
        }

    }
    /// <summary>
    /// 警报器类
    /// </summary>
    class Alarm
    {
        public delegate void CallHandler();
        public static CallHandler callHandler;
        public Alarm() {
            //与烧水器绑定
            Boiler.Wathandler += Call;
        }
        /// <summary>
        /// 当温度达到100时警报响起
        /// </summary>
        /// <param name="tem"></param>
        public void Call(int tem) {
            if (tem>=100) {
                Console.WriteLine("警报响起dilidili");
                callHandler();//警报响起后停止烧水

            }
        }

    }

输出结果

 



猜你喜欢

转载自blog.csdn.net/qq_42485607/article/details/81016719