포스트

[TIL]2025-07-17 TextRPG 팀 프로젝트 구현 4일차

[TIL]2025-07-17 TextRPG 팀 프로젝트 구현 4일차

🗓️ TIL - 메인 : 팀 프로젝트로 만드는 TextRPG 4편.

부제 : 오 슬슬 뭔가 보인다.

✅ 오늘 한 일

  • C# 배치고사
  • C#에 음악파일 넣기
  • UI틀 맞추기
  • 턴 알고리즘 최적화

C# 배치고사(흐어어)

C# 배치고사를 봤는데 대부분의 내용이 체크리스트 강의 한번씩은 봤던 내용위주였다.
가벼운 문법부터 주어진 문제에 대해서 코드를 직접 구현하는 문제도있었다.
어려운 문제가 있다기보단 이정도는 할수있어? 라고 물어보는듯한 문제였다.
다만 기억나는 마지막 문제가 정렬 알고리즘이였는데, 우연히도 어제 푼 알고리즘이
정렬문제여서 풀수있었다.
거기에 그동안 프로젝트 하면서 쌓여진 아주 작은(?)내공덕분에 나쁘지는않았다.
알고리즘은 역시 꾸준히 풀어야겠다싶다.

C#에 음악파일 넣기

이건 내가 구현해볼려다가 GPT의 힘을 빌어 코드를 완성했다.
다만, 여기서도 몇가지 배울수있는 점은 있었다.
구현하려고 하는 부분이 외부의 어떤 입출력이 필요한가?

1
2
3
using NAudio.Wave;
using System;
using System.IO;

커서를 갖다 대면 오류 메시지 : xx네임 스페이스가 필요합니다 이렇게 뜬다.
이런 경우 일단 빠르게 구글링하거나 GPT 문의하는게 빠를수도있겠다 싶다.

근데파일 경로는 내 로컬의 Path로 했는데 이러면 다른 팀원도 음악 재생이 가능할까?

  • 결론적으로 불가능하다.
  • 웹/앱 경로는 가능한가? -> 역시 불가능했다.
  • .exe 파일을 전달하거나 파일을 미리 전달해서 배포하는 수밖엔 없다.ㅜ
1
public static string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\") + "\\Jsons";

팀원중에 한분이 도와주셨는데 이 함수로 어느정도 보완할수있다.
......\ -> 이걸로 로컬의 경로를 찾아가는거같은데 음… 역시 .exe가 좋아보인다

UI틀 맞추기

UI.jpg 오늘 하루종일 시도했는데 맞추지 못했다.
뭐가 문제일까…

1
2
3
4
5
            Console.WriteLine("╔══════════════════════╗");
            Console.SetCursorPosition(2, y++);
            Console.WriteLine("║ 행동을 선택하세요:       ║");
            Console.SetCursorPosition(2, y++);
            Console.WriteLine("╚══════════════════════╝");

이런식으로 좀 노가다성이 있지만 하나씩 맞춰보려고했는데 어렵네…
일단 실패한 내용을 정리해보자.

  • 기본적인 고정 너비 출력 : 몬스터 객체 이름 길이에 따라 자주 깨짐.
  • SetCursorPosition 함수 : 실패, 문자열이 없으면 컨트롤이 어려움.
  • ’|’,’=’ 등 다른 문자열 마다 노가다 : 그나마 가장 멀쩡하게됨. 내일 오전까지 도전해보고 안되면 튜텨님 찬스 써야겠다.

턴 알고리즘 최적화

기존의 구현했던 코드로는 플레이어 턴 진행. 약간 자동으로 에너미의 고정 턴 진행.
이렇게 진행되었다. 플레이어 턴 : 문제없음
에너미 턴 : 에너미 마다 턴을 쓰는게 아니라 한번에 턴이 진행됨.
이렇게 되면 턴제라는 느낌이좀 약하단 말이지…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    private void EnemyTurn()
    {
        for (int i = 0; i < enemies.Count; i++)
        {
            Enemy enemyUnit = enemies[i];
            if (!enemyUnit.IsAlive)
                continue;

            int rawDamage = (int)enemyUnit.Attack - (int)player.Defense;
            int damage = Math.Max(rawDamage, 1);
            player.TakeDamage((uint)damage);

            BattleLog.EnemyAttack(enemyUnit.Name, player.Name, damage);
        }
    }

그래서 그냥 에너미 객체를 배열에 넣고 거기서 for문 받아서 턴 쓰도록했다.
꽤 쉽게 해결이됬네.

오늘을 보내며

하루에 12시간을 앉아서 코드만보다보니 하루가 다르게 코드의 흐름과 문법에 익숙해진다.
GPT한테도 답을 알려줘가 아니라 어떻게 답을 찾아가야하는지 방식을 묻곤했는데
꽤 많이 유효했던거같다.
배치 고사도 한문제도 못 풀면 어떡하지…라고 걱정했었는데 생각보다 많이 풀기도했고
이래저래 보람찬거같다.
초반에는 TIL도 대충대충 그냥 썼는데 이제는 뭐랄까… 참 도움이 많이 된다 싶다.

내일은?

내일은 반드시…전투 보상 화면…UI 개선 어떻게든 해결하고싶다.
RPG의 핵심은 전투인데 전투가 이렇게 허접하면 안돼!!!!!!!!!!!!!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.