Text RPG
- 프로젝트 명 : Text Maple RPG
- 프로젝트 소개 :
- Text RPG 라는 기본 틀에 우리에게 친숙한 온라인 게임인 Maple Story를 더하여 몰입감 있는 Text RPG 구현하기
- 기본적인 객체 지향 프로그래밍 준수하여 구현하기
- 코드 컨벤션, 깃 컨벤션 준수하여 협업하기
- 클래스 다이어 그램

- 와이어 프레임

오늘은 진도가 좀 팍팍 나가서 기능 구현이 거의 완료 되었다. 사실 기본 기능과 도전 기능을 나누지 않고 설계할 때 확장을 다 시켜놓고 구현을 시작했기 때문에 기본 기능과 도전 기능이 거의 동시에 완성되는 쾌거를 이루었다.
하루 종일 포션 출력에 애를 먹었다.
Console.WriteLine("\n[포션]\n");
var potions = from potion in player.Inventory.Potions
orderby potion.Name ascending
group potion by potion.Name into g
select new
{
Name = g.Key,
Count = g.Count(),
Text = g.First().Text,
Potion = g.First().PotionType
};
foreach (var potion in potions)
{
Console.WriteLine($"- {potion.Name,-18} | {potion.Text} | x{potion.Count}");
}
위 구문이 포션 출력 구문이다. 우리 팀은 포션을 포션 클래스에 포션 리스트를 만들어 포션을 관리했다.
또한 포션은 체력포션/마나포션으로 타입을 나누어 관리했기 때문에 출력을 리스트를 돌게 만드니 포션의 갯수만큼 출력이 되어 상당히 애를 먹었다. 내가 원했던건 hp x1 mp x3 처럼 1줄 출력에 카운트를 세주는 형식이었다.
처음에 어떻게 할 지 정말 막막하다가 결국 해결을 못하고 튜터님께 질문을 하였다.
정답은 Linq 구문이었는데
Linq는 C#에서 제공하는 기능 중 하나이며 데이터를 가공하여 처리 할 수 있는 문법이다.
배열형식이나 데이터 형식들을 가공할때 쿼리처럼 사용할 수 있어 직관적이고 편리하게 사용 할 수 있는 문법이라고 한다.
필터링, 매핑, 정렬등의 기능들을 활용하여 데이터들을 보다 쉽게 가공할 수 있습니다.
위의 구문은 일단 player.inventory.potions를 다 순회합니다. 그런 뒤 orderby 문을 통해 Name으로 오름차순(ascending)으로 정렬하며 potion을 potion.Name으로 그룹하여 그것을 g로 저장한다. g에 저장하는 내용은 Name, Count, Text, Potion이다.
그 뒤 foreach 문으로 potions를 순회하여 출력을 하는데 posions에는 이미 potion.Name이 같은 오브젝트(?)는 하나로 묶여(?) 있기 때문에 Hp포션, Mp포션 각 1개씩 카운트를 달아서 출력이 된다.
위 구문은 처음 실전에서 써봤는데 쓸 일이 많진 않아도 확실히 알아 놓으면 편한 기능인 것은 확실하다고 생각합니다.
'내일배움캠프 - TIL > 내일배움캠프 - TIL' 카테고리의 다른 글
| 내일배움캠프 14일차 - Flappy Plane 구현 해보기 (0) | 2025.04.29 |
|---|---|
| 내일배움캠프 13일차 - 팀 프로젝트 Text RPG 구현 완료 (0) | 2025.04.28 |
| 내일배움캠프 - TIL/내일배움캠프 - TIL내일배움캠프 10일차 (0) | 2025.04.23 |
| 내일배움캠프 9일차 코딩테스트 연습하기(타일 채우기 - 백준 15700, 모음의 개수 - 백준 1264) (0) | 2025.04.22 |
| 내일배움캠프 8일차 TextRPG 팀 과제 기초 (0) | 2025.04.21 |