게임 개발_HISTORY
내배캠_TIL251016 [팀 프로젝트 TextRPG 도전과제 구현(1)] 본문
내배캠_TIL251016 [팀 프로젝트 TextRPG 도전과제 구현(1)]
EVANJ 2025. 10. 16. 12:34⏰ 일정
- 종일 팀 프로젝트 제작
📝 학습 요약
- 레벨 업, 성장 및 보상 시스템 구현
- 전투씬 매끄럽게 자동 넘기기 구현
- Scene Images 구현
- PPT 기본틀 구성하기
🧩 활동 내용
✔️ LEVEL UP, 성장 및 보상 시스템 구현
이미 다른 팀원들이 기본적인 요소들을 모두 구현해 놓아서 보상 시스템을 구현하기 수월했다.
Monster 클래스에 경험치와 골드 필드를 추가했다.
public Monster(Monster monster)
{
this.ExpReward = monster.ExpReward;
this.GoldReward = monster.GoldReward;
}
그리고 몬스터 List에 각 몬스터로부터 얻을 수 있는 경험치와 골드의 양을 상수로 입력했다.
public static Monster[] monsters = new Monster[]
{
new Monster(2,"미니언",15,10,2,20,0.8),
new Monster(5,"대포 미니언",25,15,5,50, 0.7),
new Monster(3,"공허충",10,8,3,30,0.6),
new Monster(7,"드래곤",30,18,7,70, 0.5)
};
이미 구현되어 있는 expTable을 이용하여 경험치를 특정 값가지 오르면 레벨이 증가하는 시스템을 구현했다.
public int GetNextLevelExp()
{
int[] expTable = { 10, 35, 65, 100 };
// 최고 레벨이면 0 반환
if (Level - 1 >= expTable.Length)
return 0;
return expTable[Level - 1];
}
✔️ 전투 씬 매끄럽게 자동 넘기기 구현
Console.WriteLine($"{PlayerRef.Name} 의 공격!");
var critTxt = r.IsCritical ? "-치명타!!" : "";
Console.WriteLine($"Lv.{r.MonsterLevel} {r.MonsterName} 을(를) 맞췄습니다. [데미지 : {r.Damage}]{critTxt}");
Console.WriteLine();
Console.WriteLine($"Lv.{r.MonsterLevel} {r.MonsterName}");
string right = r.HpAfter > 0 ? $"{r.HpAfter}" : "Dead";
Console.WriteLine($"HP {r.HpBefore} -> {right}");
System.Threading.Thread.Sleep(2000);
전투 씬에서 전투 중 공격을 하고 공격을 받는 과정에서
TimeNext();
코드가 흐름을 멈춰 자연스러운 진행이 되지 않아
System.Threading.Thread.Sleep(2000);
코드를 사용해서 2초 정도 정보를 노출 후 자동으로 넘어가는 구조를 구현했다.
✔️ Scene Images 해상도 높이기
이미지를 생성하기 까지는 성공하였지만 이미지 크기고 원하는 만큼 작게해서 UI 사이즈로는 구현할 수 없었다.
해당 코드의 구조처럼 픽셀이 4개까지만 쪼개져 표현이 되는 구조였기 때문이다.
static char QuadCharFromMask(int m)
{
// 비트: 1=UL, 2=UR, 4=LL, 8=LR
// 매핑 표(대표 조합)
return m switch
{
0 => ' ', // none
1 => '▘', // UL
2 => '▝', // UR
3 => '▀', // UL+UR
4 => '▖', // LL
5 => '▌', // UL+LL
6 => '▞', // UR+LL
7 => '▛', // UL+UR+LL
8 => '▗', // LR
9 => '▚', // UL+LR
10 => '▐', // UR+LR
11 => '▜', // UL+UR+LR
12 => '▄', // LL+LR
13 => '▙', // UL+LL+LR
14 => '▟', // UR+LL+LR
15 => '█', // all
_ => ' '
};
}
이미지를 작게하면 해상도의 한계로 너무 많이 깨져 형체를 알아보기 힘들었고, 해상도를 높이려면 이미지 크기를 키울 수 밖에 없었는데 텍스트에 비해 과도하게 커서 UI 기능으로는 과한 크기였다.
C# 콘솔에서 이미지를 구현하는 방법들이 있는데 다음과 같다.
- Draw (일반 ASCII 매핑, 1×1)
- DrawHiRes (상·하 반블록 ▀/▄ 등, 1×2)
- DrawQuad (사분면 블록 U+2596~259F, 2×2) ≈ DrawPixelArtQuad (동일한 2×2 해상도, 픽셀아트 보존용 튜닝)
- DrawBraille(점) (점자 패턴 U+2800~, 2×4)
즉, Draw < DrawHiRes < DrawQuad ≈ DrawPixelArtQuad < DrawBraille 가 해상도 순이다.
여기서 나는 DrawQuad 방식이 가장 적합하다고 판단했다.
이유는 DrawBraile는 점자 방식이라 약간 지저분한 느낌이 있었고 전체적으로 분위기가 어두워지고 적합한 아트 스타일은 아니였다. DrawPixelArtQuad 는 이미지를 작게 사이즈를 줄이면 아래와 같이 이미지가 짤리는 이슈가 생겨 사용할 수 없었다.
이 중 가장 해상도가 높고 사이즈 조절이 그나마 자유로운 DrawQuad여서 선택하게 되었다.

DrawQuad을 사용해서 살짝 선명도와 또렷하게 출력되도록 하는 코드를 찾아서 작성했다.
img.Mutate(x => x.Resize(w, h, KnownResamplers.Lanczos3).GaussianSharpen(0.6f));

해상도가 아쉽지만 그래도 시도한 이미지들 중에서 가장 퀄리티가 좋은것 같다.
이제 필요한 부분들을 찾아 이미지를 추가하면 된다.
✔️ PPT 기본 구성 계획하기
우선적으로 기본 구성을 계획을 팀원들과 논의하며 정했다.
1. 우선적으로 TextRPG의 구성요소들을 나열 및 소개한다.
2. 각 팀원들의 작업 분배 및 역할을 소개하고 작업 과정을 소개한다.
3. 미리 촬영 및 편집한 플레이 영상을 공개한다.
4. 필수기능 및 도전 기능을 짧게 구현 내용 소개를 한다.
5. 추가적으로 우리 팀만의 특별한 기능을 소개한다.
6. 작업을 진행하며 모든 팀원들의 대표적인 트러블 슈팅 사례들을 공유한다.
이런 구성으로 짜보았고 각 팀원들이 공유한 트러블 슈팅 내용을 선별해
PPT에 포함할 것을 의논해 볼 계획이다.
✔️ Pull Request 에 대해서
pull request는 깃허브 협업의 핵심 기능이며, 변경 사항을 메인 코드에 바로 적용하는 대신, 별도의 브랜치에서 작업한 뒤 메인 브랜치에 병합(merge) 해달라고 요청하는 과정이다.
나는 Push해서 별도로 머지 하는 과정과 헷갈렸다.
| 개념 | 설명 | 주 사용 상황 |
| push | 내가 local에서 수정한 코드를 깃허브(remote) 저장소에 업로드 하는 명령 | 혼자 작업하거나, 내 브랜치에 내 코드를 올릴 때 |
| pull request (PR) | 내가 올린 코드를 다른 브랜치(보통 'main')에 병합(merge) 해달라고 요청하는 절차 | 협업 시 팀원에게 내 코드 리뷰하고 병합을 요청할 때 |
요약하자면, pull request는 메인코드에 병합하는 요청이며 리뷰, 토론, 승인 과정이 필요하다.
😭 구현 실패한 시도
아래의 코드로 콘솔창의 크기를 마음대로 조절하고 싶었다. 출력되는 코드에 비해 가로로 넓어서 빈 여백이 많아 코드 내용에 이목을 집중 시키기 어려웠다. 하지만 윈도우와 비주얼스튜디오 프로그램으로 크기 설정값이 고정되어 있는 듯 했다.
| Console.SetWindowSize(int width, int height) | 콘솔에 표시되는 실제 창의 크기를 설정 |
| Console.SetBufferSize(int width, int height) | 스크롤 가능한 내부 버퍼 크기를 설정 |
| Console.WindowWidth, Console.WindowHeight | 현재 콘솔창의 실제 크기를 가져옴 |
| Console.BufferWidth, Console.BufferHeight | 현재 버퍼의 크기를 가져옴 |
콘솔 창을 의도하는 크기에 맞도록 수정하려 많은 시도를 해보았으나
배웠던 학습내용 밖의 내용이며 방법을 찾으려면 계속 검색과 서칭을 해야하나 시간관계상 크게 중요한 부분은 아니라고 판단해 구현을 중단하게 되었다.
🚀 내일 할 일 (To-do)
- 팀프로젝트 추가적인 도전기능 구현
- C# 배치고사
'Development In Unity > 내일배움캠프_Unity 12기' 카테고리의 다른 글
| 내배캠_TIL251020 [팀 프로젝트 TextRPG 마무리] (0) | 2025.10.20 |
|---|---|
| 내배캠_TIL251017 [팀 프로젝트 TextRPG 도전과제 구현(2)] (0) | 2025.10.17 |
| 내배캠_TIL251015 [팀 프로젝트 TextRPG/콘솔에서 이미지 출력하기] (0) | 2025.10.15 |
| 내배캠_TIL251014 [Git 사용법 피드백,팀 프로젝트 TextRPG제작/기획] (0) | 2025.10.14 |
| 내배캠_TIL251013 [TextRPG도전과제 제출] (0) | 2025.10.13 |
