내일배움캠프 2주차 3일차 TIL - 아이템

백흰범·2024년 4월 24일
0

오늘 한 일

  • 스파르타 코딩클럽 진도 나기기 (3-2 ~ 3-4)
  • 개인 프로젝트하기
  • 아이템을 보관하는 방법에 대해서 (오늘 내용)

학습과 프로젝트를 동시에 병행하잖느니 시간이 부족하다. 주말에는 TIL 쓰는데 여유를 가져도 좋지만, 평일 중에서 특히 학습과 개발을 병행해야 하는 시기에서는 이러고 있을 여유가 없다.

아이템 기능에 대한 구현

아이템 사전을 만들려면 무엇이 필요할까?

  • 식별자 - 특정 아이템에 접근하기 위해 임의로 작성한 코드
  • - 아이템의 특징을 나타내기 위해서 식별자에 맞춰 담은 코드

  • 특정 게임의 예시
  • 본 아이템은 아이작에 나오는 아이템으로 영어를 해석해주면
    아이템 ID : 182 	<- 이게 식별자에 해당하고
    이름 : 성스러운 심장	<- 여기부터 아래는 값에 해당한다. 
    부연 설명 : 유도 + 데미지 증가
    등급 : 4
    설명 : 눈물이 흰색이 되고, 많은 데미지를 가하고 유도 효과가 생긴다.
    체력 증가, 공격력 증가, 공속 감소, 발사 속도 증가, 빨간 체력 모두 회복, 세라핌으로 변신하기 위한 천사 아이템 갯수 3까지 1 증가
    타입 : 패시브 아이템, 눈물 변형
    아이템 분류 : 천사방		(번역이 정확하지 않을 수도 있습니다..)
    등등의 정보들이 담겨 있다.


아이템 시스템을 구현하기 위해 떠올린 2가지



아이템을 정보를 가지는 방법 (클래스 + 배열)

        class DimensionItems
        {
            int[,] weaponInt    { get; }
            string[,] weaponstr { get; }

            public DimensionItems()
            {
                weaponInt = new int[,]	
                {
                    { 2 , 3, 4, 5, 8 },			// 공격력
                    { 100, 200, 300, 400, 500 }	// 가격
                };

                weaponstr = new string[,]
                {
                    { "검", "창","도끼","활","석궁" },	// 이름
                    { "날카롭다", "길쭉하다", "야무지다", "탄력적이다", "간편하다" }	// 설명
                };

            }
            void GiveValue(ref int dPoint)
            {

            }
            void GiveValue(ref int a, ref int b, ref string c, ref string d)
            {

            }

            public void ShowDictionary()	// 보여주기 위한 임시 도구
            {
                for(int i = 0; i < weaponInt.GetLength(1); i++)
                {
                    for(int j = 0; j < weaponInt.GetLength(0); j++)
                    {
                        Console.Write(weaponstr[j, i]); Tab();
                        Console.Write(weaponInt[j, i]); Tab();
                    }
                    Console.WriteLine();
                }
            }

			public void ShowDictionary(int i)	// 보여주기 위한 임시 도구
            {
                for (int j = 0; j < weaponInt.GetLength(0); j++)
                {
                    Console.Write(weaponstr[j, i]); Tab();
                    Console.Write(weaponInt[j, i]); Tab();
                }
                    Console.WriteLine();
            }

            public void Tab()	// 코드 단축을 위한 잡기술이다. 
            {
                Console.Write("\t");
            }
        }
  • 위와 같이 구현한 이유
    처음에는 1차원 배열로 했더니 너무 난잡해서 다중 배열을 활용하는 게 깔끔할 거라 생각해서 바꿨다.
  • 위처럼 구현할 때 주의할 점
    아이템 식별을 인덱스에 의존한 형태이므로 타입 구별을 위해 다른 사전을 만들어둔 상태라면 그것을 구별하기 위한 식별 코드를 넣어줘야할 필요가 있다.

결과

  • 목록이 잘 나온다.
items.ShowDictionary(1); 	// 이걸로 호출 시도


// 인덱싱해보니 원하는 아이템이 잘 나온다




그 외에 알게된 점

아이템 기능을 구현할 때 도움되는 정리법

  • 이와 같이 정리해두면 인덱싱 할 때 매우 도움이 된다.

new arr[] {}의 생략 가능

  • 단순 배열은 생략 가능
int[] value;
value = [2, 4, 8, 15, 25, 40];	// 가능

Console.WriteLine($"value[0]의 값 : {value[0]}"); // 식별을 위한 코드 

  • 다중 배열은 1차원 배열이랑 다르게 new 생략 불능
string[,] sds = [["a", "b", "c"], ["e","f","g"]]; 	//error

  • 다중 배열 초기 할당의 정상적인 모습
  • 위와 같이 기입해줘야한다.



오늘 공부하면서 느낀점

오늘은 매우 바쁘다. 시간이 얼마나 남을 지 모르니 미리미리 학습을 빨리해줘야겠다. 이해하는 과정은 해야할 일을 완전히 했을 때 해주는 것이 좋을 것 같다. (우선순위에 유의)




내일 할 일

  • 개인 프로젝트 제출하기
profile
게임 개발 꿈나무

0개의 댓글