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

輸出結果




作業二:熱水器

 燒水器,顯示器,警報器

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();//警報響起後停止燒水

            }
        }

    }

輸出結果

 



發佈了40 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章