EasyCastleUNITY

대리자 연습 문제 (1,2,3,4) 본문

C#프로그래밍

대리자 연습 문제 (1,2,3,4)

EasyCastleT 2023. 7. 27. 14:27

1.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class Hero
    {
        int maxHp;
        int hp;
        //생성자
        public Hero()
        {
            Console.WriteLine("영웅이 생성되었습니다");
        }

        public void Move(Action callback)
        {
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동완료");
            callback();
        }

        public void HitDamage(int damage, Action<int, int> callback)
        {
            maxHp = 8;
            hp = maxHp - damage;
            callback(maxHp - damage, maxHp);
        }
    }
}

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
//using 지시문을 사용하면 네임스페이스에 정의된 형식을 해당 형식의 정규화된 네임스페이스를 지정하지 않고도 사용할 수 있습니다.
namespace LearnDotnet
{
    //형식 정의
    public class App
    {
      
        
        public App()
        {
            Hero hero = new Hero();
            hero.HitDamage(3, (hp, maxHp) =>
            {
                Console.WriteLine("{0}/{1}" , hp, maxHp);
            });
        }

        
    }
    
}

2.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class Hero
    {
        //멤버 변수
        int maxHp;
        int hp;
        public Action isDie;
        //생성자
        public Hero()
        {
            this.maxHp = 3;
            Console.WriteLine("영웅이 생성되었습니다");
        }

        public Hero(int maxHp)
        {
            this.maxHp = maxHp;
            Console.WriteLine("영웅이 생성되었습니다");
        }

        public void Move(Action callback)
        {
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동완료");
            callback();
        }

        public void HitDamage(int damage, Action<bool> callback)
        {
           // maxHp = 8;
            hp = maxHp - damage;
            callback(this.hp<=0);
        }
        
    }
}

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
//using 지시문을 사용하면 네임스페이스에 정의된 형식을 해당 형식의 정규화된 네임스페이스를 지정하지 않고도 사용할 수 있습니다.
namespace LearnDotnet
{
    //형식 정의
    public class App
    {
      
        
        public App()
        {
            Hero hero = new Hero();
            Hero hero1 = new Hero(8);
            hero.HitDamage(3, (IsDie) =>
            {
                Console.WriteLine("Hero IsDie: {0}" , IsDie);
            });
            hero1.HitDamage(3, (IsDie) =>
            {
                Console.WriteLine("Hero1 IsDie: {0}", IsDie);
            });
        }

        
    }
    
}

3.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class Item
    {
        public string name;
        public Item()
        {
            this.name = "장검";
        }
        public Item(string name)
        {
            this.name = name;
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class ItemFactory
    {
        public ItemFactory()
        {

        }

        public void CreateItem(Action <Item> callback)
        {
            Console.WriteLine("아이템을 만들었습니다");
            callback(new Item());
        }
    }
}

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
//using 지시문을 사용하면 네임스페이스에 정의된 형식을 해당 형식의 정규화된 네임스페이스를 지정하지 않고도 사용할 수 있습니다.
namespace LearnDotnet
{
    //형식 정의
    public class App
    {
      
        
        public App()
        {
            
            ItemFactory factory = new ItemFactory();

            factory.CreateItem((item) => {

                Console.WriteLine("{0}이 생성되었습니다.", item.name);
            });
        }

        
    }
    
}

4.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class SkillData
    {
        //멤버 변수
        public int skillId;
        public string skillName;
        //생성자
        public SkillData()
        {
            this.skillId = 0;
        }
        public SkillData(int skillId,string skillName)
        {
            this.skillId=skillId;
            this.skillName=skillName;
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class Skill
    {
        //멤버 변수
        public SkillData data;
        //생성자
        public Skill()
        {

        }

        public Skill(SkillData data)
        {
            this.data = data;
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class DataManager
    {
        //멤버 변수 
        //public Action loadComplete;
        public static readonly DataManager instance = new DataManager();
        Dictionary<int, SkillData> skillDic = new Dictionary<int, SkillData>(); 
        //생성자
        private DataManager()
        {

        }

        public SkillData LoadDatas(int id)
        {
            skillDic.Add(100, new SkillData(100, "파이어볼"));
            return skillDic[id];
            //this.loadComplete();
           // callback();
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class Hero
    {
        //멤버 변수
        int maxHp;
        int hp;
        public Action isDie;
        //생성자
        public Hero()
        {
            this.maxHp = 3;
            Console.WriteLine("영웅이 생성되었습니다");
        }

        public Hero(int maxHp)
        {
            this.maxHp = maxHp;
            Console.WriteLine("영웅이 생성되었습니다");
        }

        public void Move(Action callback)
        {
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동중.....");
            Console.WriteLine("이동완료");
            callback();
        }

        public void HitDamage(int damage, Action<bool> callback)
        {
           // maxHp = 8;
            hp = maxHp - damage;
            callback(this.hp<=0);
        }

        public Action GetSkillAction(int skillId)
        {
            Skill skill = new Skill(DataManager.instance.LoadDatas(skillId));
            Action actionSkill = () =>
            {
                Console.WriteLine("{0}번에 해당하는 스킬을 시전합니다", skill.data.skillId);

            };
            return actionSkill;
            
        }
        
    }
}

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
//using 지시문을 사용하면 네임스페이스에 정의된 형식을 해당 형식의 정규화된 네임스페이스를 지정하지 않고도 사용할 수 있습니다.
namespace LearnDotnet
{
    //형식 정의
    public class App
    {
      
        
        public App()
        {

            Hero hero = new Hero();
            Action action = hero.GetSkillAction(100); //skillId:100
            action();
        }

        
    }
    
}