유니티3D 프로그래밍

C# 2주차 3일 수업 내용 : 인터페이스, 상속, Dictionary(21.03.17) 본문

C#/수업내용

C# 2주차 3일 수업 내용 : 인터페이스, 상속, Dictionary(21.03.17)

tjdgus9955 2021. 3. 17. 09:54

string 배열 연습

 

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            //string 배열 변수 선언
            string[] arr;
            //string 배열 인스턴스 및 변수에 할당
            arr = new string[10];
            //string 배열의 요소에 값 할당
            for(int i = 0; i < arr.Length; i++)
            {
                arr[i] = i.ToString();
            }
            //string 배열의 요소 값 출력 (index : 0 ~ n-1)
            Console.WriteLine("{0}", arr[4]);

            //string 배열의 길이 출력
            Console.WriteLine("{0}", arr.Length);
            //for문과 foreach문을 사용해 string 배열의 요소 출력
            for(int i = 0; i < arr.Length; i++)
            {
                Console.Write("{0} ", arr[i]);
            }
            Console.WriteLine();
            foreach(string index in arr)
            {
                Console.Write("{0} ", index);
            }
            Console.WriteLine();
        }
    }
}

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            //List<string> 변수 선언 
            List<string> list;
            //List<string> 인스턴스 및 변수에 할당 
            list = new List<string>();
            //List<string> 요소에 값 추가 
            list.Add("사과");
            list.Add("딸기");
            list.Add("배");
            //List<string> 의 요소의 수 출력 
            Console.WriteLine(list.Count);
            //foreach문을 사용해 List<string>의 요소 출력
            foreach(string name in list)
            {
                Console.WriteLine("{0}", name);
            }
        }
    }
}

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            //Dictionary<int, string> 변수 선언 
            //ex) 
            //100, "장검"
            //101, "단검"
            //102, "활"
            Dictionary<int, string> dicItem;

            //Dictionary<int, string> 인스턴스 및 변수에 할당 
            dicItem = new Dictionary<int, string>();

            //Dictionary<int, string> 요소에 값 할당 (키와 값)
            dicItem.Add(100, "장검");
            dicItem.Add(101, "장검");
            dicItem.Add(102, "장검");

            //Dictionary<int, string>의 요소의 수 출력 
            Console.WriteLine("{0}", dicItem.Count);

            //Dictionary<int, string>의 요소 값 출력 (키로 찾아서, 여기서는 ID)
            string foundItem = dicItem[100];
            Console.WriteLine("Dictionary로 찾는 값 : {0}", foundItem);

            //foreach문을 사용해 Dictionary<int, string>의 요소 값 출력
            foreach(KeyValuePair<int, string> pair in dicItem)
            {
                Console.WriteLine("{0}:{1}", pair.Key, pair.Value);
            }

        }
    }
}

 

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            //Item 배열 변수 선언 
            Item[] item;

            //Item 배열 인스턴스 및 변수에 할당 
            item = new Item[3];

            //Item 배열의 요소에 값 할당 
            item[0] = new Item("장검");
            item[1] = new Item("단검");
            item[2] = new Item("활");

            //Item 배열의 길이 출력

            Console.WriteLine("{0}", item.Length);

            //Item 배열의 요소 값 출력 (index: 0 ~ n-1)
            Console.WriteLine("{0}", item[0].GetName());

            //for문과 foreach문을 사용해 Item 배열의 요소 출력 (아이템Id, 아이템이름)
            for (int i = 0; i < item.Length; i++)
            {
                Console.WriteLine("{0}. {1}", i, item[i].GetName());
            }

            foreach (Item itemName in item)
            {
                Console.WriteLine("{0}", itemName.GetName());
            }

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

namespace Study01
{
    public class Item
    {

        private string name;
        private int ID;
        //생성자
        public Item()
        { 

        }

        public Item(string name, int ID)
        {
            this.name = name;
            this.ID = ID;
        }
        public string GetName()
        {
            return this.name;
        }

        public int GetID()
        {
            return this.ID;
        }
    }
}

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            //List<Item> 변수 선언
            List<Item> items;

            //List<Item> 인스턴스 및 변수에 할당 
            items = new List<Item>();

            //List<Item> 요소에 값 추가 
            Item item = new Item("장검", 100);
            items.Add(item);
            item = new Item("단검", 101);
            items.Add(item);
            item = new Item("활", 102);
            items.Add(item);

            //List<Item> 의 요소의 수 출력 
            Console.WriteLine(items.Count);

            //foreach문을 사용해 List<Item>의 요소 출력 (아이템 ID, 아이템 이름)
            foreach(Item itemName in items)
            {
            	if(itemName != null)
                {
                    Console.WriteLine("{0}. {1}", itemName.GetID(), itemName.GetName());
                }  
            }

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

namespace Study01
{
    public class Item
    {

        private string name;
        private int ID;
        //생성자
        public Item()
        { 

        }

        public Item(string name, int ID)
        {
            this.name = name;
            this.ID = ID;
        }
        public string GetName()
        {
            return this.name;
        }

        public int GetID()
        {
            return this.ID;
        }
    }
}

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            //Dictionary<int, Item> 변수 선언
            Dictionary<int, Item> dicItems;

            //Dictionary<int, Item> 인스턴스 및 변수에 할당 
            dicItems = new Dictionary<int, Item>();

            //Dictionary<int, Item> 요소에 값 할당 (키와 값)
            Item item = new Item("장검", 100);
            dicItems.Add(100, item);
            item = new Item("단검", 101);
            dicItems.Add(101, item);
            item = new Item("활", 102);
            dicItems.Add(102, item);
            //Dictionary<int, Item>의 요소의 수 출력 
            Console.WriteLine(dicItems.Count);

            //Dictionary<int, Item>의 요소 값 출력 (키로 찾아서, 여기서는 ID)
            string itemName = dicItems[100].GetName();
            Console.WriteLine("Dictionary로 찾는 값 : {0}",itemName);

            //foreach문을 사용해 Dictionary<int, Item>의 요소 값 출력 (아이템 ID, 아이템이름)
            foreach(KeyValuePair<int, Item> pair in dicItems)
            {
                Item items = pair.Value;
                if(items != null)
                {
                    Console.WriteLine("{0}:{1}", items.GetID(), items.GetName());
                }
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Item
    {

        private string name;
        private int ID;
        //생성자
        public Item()
        { 

        }

        public Item(string name, int ID)
        {
            this.name = name;
            this.ID = ID;
        }
        public string GetName()
        {
            return this.name;
        }

        public int GetID()
        {
            return this.ID;
        }
    }
}

인터페이스 연습

 

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            Lurker lurker = new Lurker();
            lurker.Burrow();
            lurker.Attack();
            Console.WriteLine();

            Ultralisk ultralisk = new Ultralisk();
            ultralisk.Attack();
            Console.WriteLine();

            Valkyrie valkyrie = new Valkyrie();
            valkyrie.Attack();
            Console.WriteLine();

            Wraith wraith = new Wraith();
            wraith.Attack();
            wraith.Cloaking();
            Console.WriteLine();

            Zealot zealot = new Zealot();
            zealot.Move();
            Console.WriteLine();

            DarkTemplar darkTemplar = new DarkTemplar();
            darkTemplar.DoTransparent();
            darkTemplar.Move();
            Console.WriteLine();

            Observer observer = new Observer();
            observer.DoTransparent();
            observer.Fly();
            observer.Move();

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

namespace Study01
{
    public class ZergUnit
    {
        //생성자
        public ZergUnit()
        {
            Console.WriteLine("ZergUnit");
        }

        public virtual void Attack()
        {
            Console.WriteLine("Attack");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Lurker : ZergUnit, IBurrow
    {
        //생성자
        public Lurker()
        {
            Console.WriteLine("Lurker");
        }

        public override void Attack()
        {
            Console.WriteLine("까시로 공격");
        }

        public void Burrow()
        {
            Console.WriteLine("버로우 했습니다.");
        }
    }
}
namespace Study01
{
    interface IBurrow
    {
        void Burrow();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Ultralisk : ZergUnit
    {
        //생성자
        public Ultralisk()
        {
            Console.WriteLine("Ultralisk");
        }

        public override void Attack()
        {
            Console.WriteLine("뿔로 공격했습니다.");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class TerranUnit
    {
        //생성자
        public TerranUnit()
        {
            Console.WriteLine("TerranUnit");
        }

        public virtual void Attack()
        {
            Console.WriteLine("Attack");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Valkyrie : TerranUnit
    {
        //생성자
        public Valkyrie()
        {
            Console.WriteLine("Valkyrie");
        }

        public override void Attack()
        {
            Console.WriteLine("스플래쉬 어택");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Wraith : TerranUnit, ICloaking
    {
        //생성자
        public Wraith()
        {
            Console.WriteLine("Wraith");
        }

        public override void Attack()
        {
            Console.WriteLine("미사일 또는 레이저 발사");
        }

        public void Cloaking()
        {
            Console.WriteLine("투명해지다");
        }
    }
}
namespace Study01
{
    interface ICloaking
    {
        void Cloaking();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class ProtossUnit
    {
        //생성자
        public ProtossUnit()
        {
            Console.WriteLine("ProtossUnit");
        }
        
        public virtual void Move()
        {
            Console.WriteLine("이동하다.");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Zealot : ProtossUnit
    {
        //생성자
        public Zealot()
        {
            Console.WriteLine("Zealot");
        }

        public override void Move()
        {
            Console.WriteLine("빠른 속도로 이동하다.");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class DarkTemplar : ProtossUnit, ITransparent
    {
        //생성자
        public DarkTemplar()
        {
            Console.WriteLine("DarkTemplar");
        }

        public override void Move()
        {
            base.Move();
        }

        public void DoTransparent()
        {
            Console.WriteLine("투명해지다");
        }
    }
}
namespace Study01
{
    interface ITransparent
    {
        void DoTransparent();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Observer : ProtossUnit, ITransparent, IFly
    {
        public Observer()
        {
            Console.WriteLine("Observer");
        }

        public void DoTransparent()
        {
            Console.WriteLine("투명해지다.");
        }

        public override void Move()
        {
            Console.WriteLine("공중에서 이동하다.");
        }

        public void Fly()
        {
            Console.WriteLine("날다");
        }
    }
}
namespace Study01
{
    interface IFly
    {
        void Fly();
    }
}

 

 

 

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            Valture valture = new Valture();
            valture.Move();
            valture.MineInstall();
            Mine mine = new Mine();
            mine.Move();
            mine.Attack();

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

namespace Study01
{
    public class TerranUnit
    {
        //생성자
        public TerranUnit()
        {
            Console.WriteLine("TerranUnit");
        }

        public virtual void Attack()
        {
            Console.WriteLine("Attack");
        }

        public virtual void Move()
        {
            Console.WriteLine("Move");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Valture : TerranUnit, IMineInstall
    {
        public Valture()
        {
            Console.WriteLine("Valture");
        }

        public override void Attack()
        {
            Console.WriteLine("원거리 공격을 한다.");
        }

        public override void Move()
        {
            Console.WriteLine("이동한다.");
        }
        public void MineInstall()
        {
            Console.WriteLine("마인을 설치합니다.");
        }
    }
}
namespace Study01
{
    interface IMineInstall
    {
        void MineInstall();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Mine : Valture
    {
        public Mine()
        {
            Console.WriteLine("Mine");
        }

        public override void Attack()
        {
            Console.WriteLine("적에게 근접해서 폭발한다.");
        }

        public override void Move()
        {
            Console.WriteLine("적이 근처에 오면 움직인다.");
        }
    }
}

 

abstract 연습

 

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            Zergling zergling = new Zergling();
            zergling.Attack();
            zergling.Burrow();

            Console.WriteLine();

            Lurker lurker = new Lurker();
            lurker.Attack();
            lurker.Burrow();
            lurker.Attack();
            lurker.UnBurrow();

            Console.WriteLine();

            Wraith wraith = new Wraith();
            wraith.Attack();
            wraith.Cloak();
            wraith.UnCloak();

            Console.WriteLine();

            Ghost ghost = new Ghost();
            ghost.Attack();
            ghost.Cloak();
            ghost.UnCloak();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public abstract class ZergUnit : IBurrow
    {
        public abstract void Attack();

        public abstract void Burrow();
        public abstract void UnBurrow();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Zergling : ZergUnit
    {
        public override void Attack()
        {
            Console.WriteLine("저글링이 발톱으로 공격합니다");
        }

        public override void Burrow()
        {
            Console.WriteLine("저글링이 땅속으로 들어갑니다.");
        }

        public override void UnBurrow()
        {
            Console.WriteLine("저글링이 땅속에서 나옵니다.");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Lurker : ZergUnit
    {
        private bool isBurrow;

        public override void Attack()
        {
            if(this.isBurrow)
            {
                Console.WriteLine("럴커가 가시로 공격합니다.");
            }
            else
            {
                Console.WriteLine("럴커는 Burrow 상태일때만 공격 할 수 있습니다.");
            }
        }
            

        public override void Burrow()
        {
            Console.WriteLine("럴커가 땅속으로 들어갑니다.");
            this.isBurrow = true;
        }

        public override void UnBurrow()
        {
            Console.WriteLine("럴커가 땅속에서 나옵니다.");
            this.isBurrow = false;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    interface IBurrow
    {
        void Burrow();
        void UnBurrow();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public abstract class TerranUnit : Cloaking
    {
        public abstract void Cloak();

        public abstract void UnCloak();

        public abstract void Attack();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    interface Cloaking
    {
        void Cloak();
        void UnCloak();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Wraith : TerranUnit
    {
        public Wraith()
        {
            Console.WriteLine("Wraith");
        }
        public override void Attack()
        {
            Console.WriteLine("레이저나 미사일을 발사합니다.");
        }

        public override void Cloak()
        {
            Console.WriteLine("클로킹을 실행합니다.");
        }

        public override void UnCloak()
        {
            Console.WriteLine("클로킹을 해제합니다.");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Ghost : TerranUnit
    {
        //생성자
        public Ghost()
        {
            Console.WriteLine("Ghost");
        }

        public override void Attack()
        {
            Console.WriteLine("총을 발사합니다.");
        }

        public override void Cloak()
        {
            Console.WriteLine("클로킹을 실행합니다.");
        }

        public override void UnCloak()
        {
            Console.WriteLine("클로킹을 해제합니다.");
        }
    }
}

 

stack 연습

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            //Stack<Item> 변수 선언 
            Stack<Item> items;

            //Stack<Item> 인스턴스 생성후 변수 할당 
            items = new Stack<Item>();

            //Item 객체 생성 
            Item item = new Item("활");
            Item item1 = new Item("대검");
            Item item2 = new Item("장검");


            //Stack에 값 추가 Push
            items.Push(item);
            items.Push(item1);
            items.Push(item2);


            //Stack의 요소 출력 (foreach)
            foreach(Item name in items)
            {
                Console.WriteLine(name.GetItemName());
            }

            Console.WriteLine("--------- pop ----------");
            //Stack에서 값 꺼내오기  Pop (출력 : 아이템의 이름)
            string itemName = items.Pop().GetItemName();
            Console.WriteLine(itemName);
            //Stack의 요소의 수 출력 
            Console.WriteLine(items.Count);

            Console.WriteLine("--------- peek ----------");
            //Stack의 요소 보기 Peek (출력: 아이템 이름)
            itemName = items.Peek().GetItemName();
            Console.WriteLine(itemName);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Item
    {
        private string name;
        public Item(string name)
        {
            this.name = name;
        }

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

 

Queue 연습

using System;
using System.Collections;
using System.Collections.Generic;

namespace Study01
{
    class App
    {
        //생성자
        public App()
        {
            Console.WriteLine("App");

            //Queue<Unit> 변수 선언 
            Queue<Unit> units;

            //Queue 객체 생성하고 변수에 할당 
            units = new Queue<Unit>();

            //Unit객체 생성 
            Unit unit = new Unit("마린1");
            Unit unit1 = new Unit("마린2");
            Unit unit2 = new Unit("마린3");
            Unit unit3 = new Unit("마린4");

            //Enqueue
            units.Enqueue(unit);
            units.Enqueue(unit1);
            units.Enqueue(unit2);
            units.Enqueue(unit3);

            //요소 수 출력
            Console.WriteLine("요소 수 출력 : {0}", units.Count);

            //요소 출력 (유닛의 이름)
            foreach(Unit name in units)
            {
                Console.WriteLine(name.GetName());
            }

            Console.WriteLine("***** Dequeue *****");

            //Dequeue 
            Unit dequeueUnit = units.Dequeue();
            Console.WriteLine("Dequeue한 유닛 이름 : {0}", dequeueUnit.GetName());

            //요소 수 출력 
            Console.WriteLine("요소 수 출력 : {0}", units.Count);

            Console.WriteLine("***** Peek *****");

            //보기 (유닛의 이름)
            Unit peekUnit = units.Peek();
            Console.WriteLine("Peek한 유닛 이름 : {0}", peekUnit.GetName());

            //요소 수 출력 
            Console.WriteLine("요소 수 출력 : {0}", units.Count);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study01
{
    public class Unit
    {
        private string name;
        public Unit(string name)
        {
            this.name = name;
        }

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