스토리지

[3.15] 배열 복습 2 - 강화 & 합성 기능추가 본문

Unity/수업내용(C#)

[3.15] 배열 복습 2 - 강화 & 합성 기능추가

ljw4104 2021. 3. 15. 11:35
using System;

namespace Study05
{
    public class Item
    {
        enum eItemLevel
        {
            NORMAL,
            MAGIC,
            LEGEND
        }

        private string name;
        private int damage;
        private int itemLevel;
        private Random r;

        public Item()
        {
            Console.WriteLine("ITEM 생성됨");
            r = new Random();
        }

        public Item(string name, int damage, int itemLevel)
        {
            Console.WriteLine("ITEM 생성됨");
            this.name = name;
            this.damage = damage;
            this.itemLevel = itemLevel;
            r = new Random();
        }

        public void SetName(string name)
        {
            this.name = name;
        }

        public string GetName()
        {
            return this.name;
        }

        public void SetDamage(int damage)
        {
            this.damage = damage;
        }

        public int GetDamage()
        {
            return this.damage;
        }

        public void SetItemLevel(int itemLevel)
        {
            this.itemLevel = itemLevel;
        }

        public int GetItemLevel()
        {
            return itemLevel;
        }

        public void Print()
        {
            Console.WriteLine("{0}, {1}, {2}", this.name, this.damage, (eItemLevel)this.itemLevel);
        }

        public bool Reinforce()
        {
            //Console.WriteLine("강화를 시도합니다. (강화확률 : 50%)");
            //Console.WriteLine("성공시 공격력 + 4, 실패시 공격력 : 0");
            int prob = r.Next(1, 101);

            if(prob >= 50)
            {
                //Console.WriteLine("강화 성공");
                this.damage += 4;
                return true;
            }
            else
            {
                //Console.WriteLine("강화 실패");
                this.damage -= 4;
                return false;
            }
        }

        public static Item SyntheSizeItem(Item item1, Item item2)
        {
            Item resultItem = null;
            Random random = new Random();
            int prob = random.Next(1, 101);

            if(prob <= 45)
            {
                if((item1.GetName() == "단검" && item2.GetName() == "전설 도끼") ||
                    (item1.GetName() == "전설 도끼" && item2.GetName() == "단검"))
                {
                    int levelResult = item1.GetItemLevel() + item2.GetItemLevel();
                    if(levelResult >= 3)
                    {
                        levelResult = 2;
                    }
                    resultItem = new Item("둔기", item1.GetDamage() + item2.GetDamage(), levelResult);
                }

            }
            else
            {
                Console.WriteLine("강화 실패.");
                item1 = null;
                item2 = null;
            }


            return resultItem;
        }
    }
}
using System;

namespace Study05
{
    public class App
    {
        public App()
        {
            Item item1 = new Item("장검", 20, 0);
            Item item2 = new Item("단검", 32, 1);
            Item item3 = new Item();
            Item item4 = new Item();

            item3.SetName("활");
            item3.SetDamage(55);
            item3.SetItemLevel(0);

            item4.SetName("전설 도끼");
            item4.SetDamage(55);
            item4.SetItemLevel(2);

            item1.Print();
            item2.Print();
            item3.Print();
            item4.Print();

            Console.WriteLine("========================================");
            float count = 0;
            float successCount = 0;
            Console.WriteLine("아이템을 강화합니다. 확률 : 50%");
            Console.WriteLine("예제 : 장검을 공격력이 50될때까지 강화함.");
            while (item1.GetDamage() < 50)
            {

                if (item1.Reinforce())
                {
                    successCount++;
                }
                count++;
            }

            float successRate = successCount / count * 100;
            Console.WriteLine("성공 비율 {0}/{1} ({2}%)", successCount, count, successRate);

            Console.WriteLine("========================================");
            Console.WriteLine("도끼와 단검을 합성합니다. (결과물 : 둔기, 확률 : 45%)");

            Item blunt = Item.SyntheSizeItem(item2, item4);


            if(blunt != null && item2 != null && item4 != null)
            {
                blunt.Print();
            }
            else
            {
                Console.WriteLine("강화가 실패하여 아이템이 모두 파괴되었습니다.");
            }
        }
    }
}

운이 안좋으면 시도횟수가 10000번 이상 넘어갈 수가 있다.

Comments