1. InnerUserDataType
class Player
{
//그 클래스가 자기만 쓰는 경우 안에 넣어둘 수도 있다.
public enum PLAYERJOB
{
NOVICE,
KNIGHT,
FIGHTER,
BERSERKER,
FIREMAGE,
}
PLAYERJOB job= PLAYERJOB.NOVICE;
//직업과 관련된 멤버변수도 있어야 할 것
void ClassChange()
{
}
}
class Inven
{
private int SelectIndex = 0;
public void InnerClassTest()
{
InvenSlot NewInvenSlot = new InvenSlot();
NewInvenSlot.Select(this);
}
public class InvenSlot
{
int Index;
public void Select(Inven _inven)
{
_inven.SelectIndex = 100;
//자신을 가지고, 클래스의 멤버변수를 마치 public처럼 사용할 수 있다.
selectIndex = 100;
//자기 클래스 내부에 있다고 해서 쓸 수 없음.
//자기 클래스 내부에 있는 다른 클래스 일 뿐/
}
}
//클래스 안에 넣어 놓는 장점
//이름겹침에서 자유롭다.
//하나의 클래스가 자신의 내부에서 모든걸 처리하려면 자신과 밀접히 관련된 것들은
//자신 내부에 두는 것이 좋다.
public enum INVENIR
{
ID_LEFT,
ID_RIGHT,
ID_UP,
ID_DOWN,
}
void selectMove()//방향을 의미할 만한 인자값
{
}
}
namespace _35InnerUserDataType
{
internal class Program
{
static void Main(string[] args)
{
Player NewPlayer = new Player();
Inven NewInven = new Inven();
Inven.INVENIR IDIR = Inven.INVENIR.ID_LEFT;
}
}
}
2. Generic
//제네릭 함수->멤버함수에도 통용
//자료형을 변수처럼 사용하고 싶을 때
//함수의 식별자에 <다양한 자료형을 대표할 이름>
public static class GTest
{
public static T ConsolePrint<T>(T _Value)
{
Console.WriteLine(_Value);
return _Value;
}
public static T ConsolePrint<T, U>(T _Value, U _Value2)
{
Console.WriteLine(_Value);
Console.WriteLine(_Value2);
return _Value;
}
public static void ConsolePrint(string _Text)
{
Console.WriteLine(_Text);
}
public static void Test(int _number)
{
}
}
class CashItem
{
}
class GameItem
{
}
class Inven<T>
{
T[] ArrInvenItem;
public void ItemIn(T _item)
{
}
}
namespace _36Generic00
{
internal class Program
{
static void Main(string[] args)
{
GTest.ConsolePrint(1000);//정수
GTest.ConsolePrint(1.3265232);//실수
GTest.ConsolePrint("하하하");//문자
GTest.ConsolePrint("zzzz", 1234);
//얘는 무조건 명시적으로<> 적어줘야함.
Inven<GameItem> NewGameItemInven = new Inven<GameItem>();
GameItem NewItem = new GameItem();
NewGameItemInven.ItemIn(NewItem);
//게임 아이템을 넣어주는 인벤
Inven<CashItem> NewCashItemInven = new Inven<CashItem>();
CashItem NewCashItem = new CashItem();
NewCashItemInven.ItemIn(NewCashItem);
//캐시아이템을 넣어주는 인벤
}
}
}
3. Referance
class Player
{
public int HP = 100;
public int AT = 10;
public bool IsDeath()
{
Console.WriteLine("플레이어 죽음");
return HP <= 0;
}
public void TestFunc(Player _Player)
{
TestFuncPart1(_Player);
}
public void TestFuncPart1(Player _Player)
{
TestFuncPart2(_Player);
}
public void TestFuncPart2(Player _Player)
{
_Player.AT = 20;
}
}
namespace _37Referance01
{
internal class Program
{
static void ArrTest(int[] _ArrTest)
{
_ArrTest[0] = 9999;
}
static void ClassTest(Player _Test)
{
Console.WriteLine("공격력 테스트를 해볼까요");
_Test.AT = 10000;
}
static void Main(string[] args)
{
//Player NewPlayer는 어떤 녀석을 가리키는 일 밖에 하지 못한다.
//new Player();
Player NewPlayer = new Player();
NewPlayer.AT = 50;
NewPlayer.TestFunc(null);
NewPlayer = new Player();//NewPlayer의 AT는? ->10
//새로 만들어지면 그 전의 녀석은 지워짐
Player NewPlayer2 = NewPlayer;
//NewPlayer2를 수정하면 new Player();가 수정됨
//같은애를 가리키고 있느냐 아니냐로 달라지는것. 이름이 다르다고 다른것이 아님.
NewPlayer2.AT = 999;
//NewPlayer2의 AT를 999로 마꾸면 NewPlayer의 AT도 999로 바뀜
ClassTest(NewPlayer);//AT는 10000이 되어서 나옴
int[] ArrNumber = new int[10] {0, 1, 2, 3, 4, 5, 6, 7, 8 ,9 };
ArrTest(ArrNumber);//int[0]의 값은 9999
//레퍼런스형이다.
Player NewPlayer3 = null;
NewPlayer3.IsDeath();
//null인 녀석은 함수를 불러올 수 없는것을 디버깅을 통해 알아낼 것
}
}
}
++디버깅
4. List
class Item
{
}
class MyList<T>
{
int[] Arr = new int[0];
int Capa = 0;
int Count = 0;
public void Add(T _Add)
{
if (Count + 1 >= Capa)
{
}
}
}
namespace List
{
internal class Program
{
static void Main(string[] args)
{
//내가 관리해달라고 요청하는것이 매번 바귀는것
//그러므로 제네릭 클래스여야 한다.
List<Item> NewList = new List<Item>();
List<int> NewList2 = new List<int>();
NewList2.Add(1000);
//자료 : 넣어준 int
for(int i = 0; i < NewList2.Count; i++)
{
Console.WriteLine((NewList2.Count + 1).ToString() + " Add");
Console.WriteLine("Capacity : " + NewList2.Capacity);//배열의 크기
Console.WriteLine("Count : " + NewList2.Count);//자료의 크기
NewList2.Add(i);
}
//인덱스로 표현할 수 있다면 가장 유리한 자료구조.
//탐색에는 유리하지 않다.
//내부에 자료가 있는지 없는지
if (NewList2.Contains(8))
{
Console.WriteLine("내부에 8이 있습니다.");
}
if (NewList2.Contains(999999))
{
Console.WriteLine("내부에 8이 있습니다.");
}
else
{
Console.WriteLine("999999이 없습니다.");
}
//인덱서 혹은 연산자, 겹지정
Console.WriteLine(NewList2[5]);
Console.WriteLine(NewList2[999]);
//OutofRange
//자료의 개수로 판단하지 배열의 크기는 중요하지 않다.
int[] Arr = NewList2.ToArray();
NewList2.Remove(10);//10이 있다면 지운다.
NewList2.RemoveAt(1);//1을 지운다.
//NewList2.RemoveAll ->다른 리스트 혹은 배열을 넣어줬을 때 비교해서 중복되면 지운다.
NewList2.RemoveRange(1, 10);//1번재부터 10개 지워라.
}
}
}
5. Node
class Zone
{
public string Name = "None";
public List<Zone> LinkZone = new List<Zone>();
public Zone Update()
{
while (true)
{
Console.Clear();
Console.WriteLine("이곳은 " + Name + "입니다.");
Console.WriteLine("이동할 수 있는 장소 리스트.");
for(int i= 0; i<LinkZone.Count; i++)
{
Console.WriteLine((i + 1).ToString() + ". " + LinkZone[i].Name);
}
int number = (int)Console.ReadKey().Key;
number -= 49;
return LinkZone[number];
}
}
public Zone(string _Name)
{
Name = _Name;
}
}
namespace NodeEX
{
internal class Program
{
static void Main(string[] args)
{
Zone NewZone0 = new Zone("태초마을");
Zone NewZone1 = new Zone("초보사냥터");
Zone NewZone2 = new Zone("중급사냥터");
Zone NewZone3 = new Zone("중급마을");
Zone NewZone4 = new Zone("고급사냥터");
NewZone0.LinkZone.Add(NewZone1);
NewZone0.LinkZone.Add(NewZone2);
NewZone1.LinkZone.Add(NewZone3);
NewZone1.LinkZone.Add(NewZone0);
NewZone2.LinkZone.Add(NewZone3);
NewZone3.LinkZone.Add(NewZone4);
Zone startZone = NewZone0;
while (true)
{
startZone = startZone.Update();
}
}
}
}
'개발자_뉴비일지' 카테고리의 다른 글
내일배움캠프 Unity 45일차 TIL - START TeamProject04 (0) | 2024.02.28 |
---|---|
내일배움캠프 Unity 43일차 TIL - null (0) | 2024.02.26 |
내일배움캠프 Unity 41일차 TIL - Stack (0) | 2024.02.21 |
내일배움캠프 Unity 35일차 TIL - START TeamProject03 (0) | 2024.02.14 |
내일배움캠프 Unity 33일차 TIL - 배움의 즐거움 (1) | 2024.02.07 |