ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내일배움캠프 11일차 TIL - 텍스트 기반 RPG 제작 팀 프로젝트 기초
    TIL/C# 2024. 4. 29. 20:34

     

    [학습목표]

    텍스트 기반 RPG 게임 제작을 주제로 새로운 팀 프로젝트를 시작한다. 그리고 C# 강의를 시청하여 박싱(Boxing)에 대해 학습한다. 

    [학습내용]

    이번 주차는 팀 프로젝트로 진행된다. 주제는 지난 주차의 개인 프로젝트와 비슷한 텍스트 기반 RPG 게임 제작이다. 그러나 이번 프로젝트는 팀으로 진행되는 것 외에도 게임에서 전투나 퀘스트, 캐릭터 커스텀 기능 등을 추가로 구현해야 한다.

    구현하게 될 기능들은 다음과 같다.

     

    필수 구현

    • 게임 시작 화면
    • 상태 보기
    • 전투 시작

    선택 구현

    • 캐릭터 생성
    • 직업 선택
    • 치명타
    • 회피
    • 스킬
    • 레벨업
    • 보상
    • 퀘스트
    • 콘솔 디자인
    • 몬스터 종류 추가
    • 아이템(인벤토리)
    • 회복 아이템
    • 스테이지
    • 게임 저장

     

    우선 프로젝트 이름을 정했다. 팀 이름이 Gambling 7|7|7 JackPot인 것을 고려하여 OceanStory로 지었다.

    그리고 깃허브에 팀 리포지터리를 만들었다.

    OceanStory 리포지터리

     

    그리고 목표를 정했다. 우선 필수 기능 3가지 구현을 최우선으로 하고, 시간적 여유가 된다면 선택 기능도 구현하기로 팀원들과 논의하였다.

     

    다음으로는 프로젝트를 진행하기 위해 기초공사를 했다. 지난 주 개인 과제와 겹치는 부분들이 있기 때문에 그것을 참고하여 씬 매니저, 시스템 메시지 등 필요한 기능을 가져와 우선 구현하였다.

    다만 다른 점은 이번 프로젝트에서는 프로퍼티를 사용할 것이다. 기존 개인과제에는 필드 변수를 사용했지만, 프로퍼티 사용을 연습해야 할 거 같단 생각이 들었다.

    internal class Character
    {
        public int Level { get; set; }
        public string Name { get; set; }
        public string Job { get; set; }
        public float Atk { get; set; }
        public float Def { get; set; }
        public int Hp { get; set; }
        public int Gold { get; set; }
        public Character(int level, string name, string job, float atk, float def, int hp, int gold)
        {
            Level = level;
            Name = name;
            Job = job;
            Atk = atk;
            Def = def;
            Hp = hp;
            Gold = gold;
        }
    }

     

    그리고 진행하면서 코드 컨벤션도 맞춰보았다. 아직 한 번에 모든 걸 정하고 가기엔 실력이 충분하지 않아서 필요할 때마다 즉각 논의를 거쳐 내용을 추가해가기로 결정하였다.

    계속 추가될 예정이다

     

    이번 프로젝트에서는 특히 인터페이스나 추상클래스의 상속이 많을 거 같아서 솔루션 안에 폴더를 만들어서 관리하기로 하였다. 그 과정에서 cs 파일 위치가 바뀌면 네임스페이스도 바뀐다는 사실을 새롭게 알게 되었다.

    폴더로 정리해보았다

     

    솔루션 내의 cs 파일의 위치가 바뀌면 네임스페이스도 바뀐다.

     

    프로젝트 진행은 여기까지 하고 개인 학습을 진행하였다. 이번 주차는 C# 강의 학습과 팀 프로젝트 진행을 병행하기 때문에 개인 학습 시간을 따로 분배하였다.

     

    값형과 참조형

    값형은 변수에 값을 직접 저장한다. int, float, double, bool 등의 기본형이 해당된다.
    다른 변수에 할당하거나 전달할 때에는 값이 복사된다.

     

    참조형은 데이터에 대한 참조를 저장한다. 클래스, 배열, 인터페이스 등이 해당된다.
    다른 변수에 할당하거나 전달할 때에는 참조가 복사된다.

     

    값형과 참조형에 대한 설명을 들었다. 다른 언어에서도 비슷한 게 있기 때문에 크게 어려운 부분은 없었다. 이걸 활용한 박싱과 언박싱에 대해서도 배웠다.

     

    박싱과 언박싱

    박싱(Boxing)은 값형을 참조형으로 변환하는 작업이다.
    값형 변수의 값을 메모리의 힙 영역에 할당된 객체로 래핑한다. 그러면 값형이 참조형의 특징을 갖게 되어 참조형 변수로 다뤄질 수 있다. 메모리 오버헤드가 발생할 수 있다.

     

    언박싱(Unboxing)은 박싱된 객체를 다시 값형으로 변환하는 작업이다.
    박싱된 객체에서 값을 추출하여 값형 변수에 할당한다. 명시적으로 타입 캐스팅을 해줄 필요가 있으며, 런타임 때 타입을 검사하기 때문에 잘못된 형식으로 변환하면 런타임 에러가 발생할 수 있다.

     

    박싱과 언박싱은 한두 번 들어본 적은 있는 단어다. 하지만 그 개념을 정확하게 알고 있지는 못했다. 이번 기회에 알게 되어서 좋았다. 일단 크게 어려운 개념은 아니었다. 예를 들면 int형과 bool형의 값을 Object 객체 안에 넣고 한 번에 처리한다. 박싱이다. 그런데 원하는 작업을 마친 뒤 다시 int형과 bool형으로 돌려놓는다. 이것이 언박싱이다. 단 이 때 명시적 형변환을 해줘야 한다. 생각만큼 어려운 개념은 아니다.

     

    [결과물]

    https://github.com/Gambling7l7l7JackPot/OceanStory

     

    GitHub - Gambling7l7l7JackPot/OceanStory

    Contribute to Gambling7l7l7JackPot/OceanStory development by creating an account on GitHub.

    github.com

    [회고]

    오늘은 발제부터 해서 체크리스트 특강도 있었고 깃허브 2차 특강도 있었다. 거기에 팀 프로젝트와 C# 강의를 병행해야 했다. 그래서 많은 진도를 빼지 못했다. 내일부터는 팀원과 합의하여 오전에 개인 학습을 진행하고 2시에 체크리스트 특강을 진행한 뒤 팀 프로젝트에 몰두하는 식으로 진행해봐야겠다.