[TIL]2025-07-16 TextRPG 팀 프로젝트 구현
🗓️ TIL - 메인 : 팀 프로젝트로 만드는 TextRPG 3편.
부제 : 늘 조심하자.
✅ 오늘 한 일
- 깃 폭파 위기
- 적 선택 알고리즘 구현
- 언더플로우 발생
- 전투 인트로씬 구현
- 84번 알고리즘 풀이
깃허브의 내 작업파일은 어디로…?
9시에 출석 도장 찍고 프로젝트 시작하기 위해 깃 최신화를 했다.
그런데 이게 왠일…? 어제 작업 했던 파일이 통쨰로 날아갔다.
일단 조원들한테 죄송하다고하고 어떻게든 복구하려고 시도했지만
시도할때마다 자꾸 오류 메세지가 나오니 멘붕해서 그냥 내껀 갈아엎고
다시 할려고 마음 먹은 찰나.
하늘이시여 감사합니다…히스토리에 남아있구나…
https://beandeveloper.tistory.com/39
위의 블로그를 참고하여 복구에 성공했다. 큰일날뻔했다.조심하자
1.작업 하기전 마스터에서 먼저 작업 동기화 하기
2.내가 작업한 내역이 있으면 해당 브랜치에 커밋하기
3.1번과 2번을 잊지않기
적 선택 알고리즘 구현
적을 만들기위해서는 클래스 -> 객체 생성 구조로 만들거같은데
어차피 여러개 만들어야하니까 리스트로 만들 생각이다.
문제는 내가 공격할때 적을 어떻게 선택해서 공격하는 알고리즘을 만드냐인데..
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i < enemies.Count; i++)
{
Console.WriteLine($"{i + 1}. {enemies[i].Name} (HP: {enemies[i].HP})");
}
Console.Write(">> ");
string input = Console.ReadLine();
if (int.TryParse(input, out int index) && index >= 1 && index <= enemies.Count)
{
Enemy target = enemies[index - 1];
uint playerDamage = player.Attack;
처음 코드 생성당시에는 적을 선택한 숫자보다 1이 낮게 인식되었다.
이부분은 [index -1]로 수정하니까 해결됬다. 굿
언더플로우 수정
적 선택 알고리즘을 구현하고 나서 테스트 중 이상한 현상이 발생했다.
일반 공격으로 적을 죽이면 HP -> 0 (사망) 처리되는 로직이였는데,
이상하게도 스킬로 적을 죽이면 언더플로우가 발생해서 HP가 420000000이렇게 됬다.
1
2
3
4
5
6
7
8
9
10
11
12
public void Damaged(uint damage)
{
if (HP <= damage)
{
HP = 0;
IsAlive = false;
}
else
{
HP -= damage;
}
}
코드를 보니까 첫번째 원인은 uint, 조원들과 프로젝트 회의 당시
음수로 표기,처리할일이없기떄문에 uint로 하자고 했었다.
두번째 원인은 사망 로직의 else문 부재였다.
기존은 if (HP < damage)로 사망하게끔 로직이 되어있었는데 이게 왜 오류로 이어졌을까..
Chat GPT로 물어봐도 알수가없네.
이건 내일 튜텨님 찾아뵈야겠다.
전투 인트로씬 구현
아스키 코드 디자인 : ASCII코드만을 이용해서 그림처럼 꾸밈.
내가 원하는것 : 캐릭터가 움직이거나, 화면 흔들리는 효과.
1
2
3
4
5
6
7
for (int i = 0; i < step; i++)
Console.WriteLine();
foreach (var line in stickman)
Console.WriteLine(" " + line);
Thread.Sleep(180);
Thread클래스가 독립적으로 코드 실행을 위해 할수있다고한다.
막상 구현해도 좌표 맞추는게…잘 안됬다..어떻게 고치지였나싶었다.
근데 어제인가 체크리스트 문자열 강의할때 trim()같은 문자열 공백 조정하는
클래스들이 있어서 활용하니까 여차저차 깔끔하진않지만 많이 조정됬다.
디테일만 부분은…내일 프젝하면서 더 고민해봐야겠다.
84번 알고리즘 풀이 과정
문제:막대기 높이가 주어졌을때 가장 큰 직사각형의 면적을 구해라.
허허…첨엔 별거 아닌데 싶었다.
heights 배열에 for문으로 순회하면서 큰거 저장시키고 면적 곱하면 되는거아닌가.
1
2
3
for (int i = 0; i <= n; i++)
{
int h = (i == n) ? 0 : heights[i];
마지막까지 남은 막대를 정리하기 위해 i<=n으로 순회 시켰다.
근데 면적 계산을 어떻게… 하더라
5,6의 heights를 가진 사각형이 있으면 6의 heights에서 -1을 해야되서 10 출력이 되야하는데…
1
2
3
int height = heights[stack[top]];
stack.RemoveAt(top);
top--;
이쯤되서 머리 터질뻔하다가 Stack 클래스를 알게되고 그냥 top에서 –처리했다.(이게되네?)
왜 되는거지 싶어서 GPT한테 물어보니까
[GPT 답변]
현재 높이 h가 스택 안에 있던 top보다 작아졌다면, -> 그 동안 쌓아둔 막대들을 꺼내면서 넓이 계산을 해야 함. -> stack[top] 인덱스를 꺼내서 해당 막대 높이를 저장
오늘을 보내며…
코드 설계할때 문법적으로도 미숙함이 많아서 해매는데 구현한다는건 보통일은 아니다 싶다.
뭐 하다보면 오류나고 어떻게 접근할지 몰라 리갈패드 꺼내서 되는대로 끄적끄적하고…
그러다보면 한두개씩 풀려있는건 참 신기하긴하다.
아 근데 코드에 디자인 패턴을 적용하고싶은데 좀만 더 시간이 있었으면 좋겠다.
오류에 막히다보면 그냥 public 선언해버리는데 이런 경우가 참 뭐랄까
양심에 찔릴일은 아닌데 양심에 살짝 찔린다.
이번 프로젝트는 일단 최소한 1인분하는것에 집중하고 혼자 좀 보강해야지
내일은 뭐하지 왠만한 알고리즘은 다 구현됬고…이제부터가 진짜 개발의 시작이지
최대한 인트로씬 멋지게 구상해봐야겠다.
요즘 수영배우는데 시원한 물속에서 운동하니까 너무 재밌다ㅋ
낼은 자유형 잘됬으면 좋겠네