인프런 커뮤니티 질문&답변
textrpg 두번째버전을 계속 실패합니다
작성
·
190
0
using System;
using System.Collections.Generic;
using System.Text;
namespace trpg22
{
public enum GameMode
{
None,
Lobby,
Town,
Field
}
class Game
{
private GameMode mode = GameMode.Lobby;
private Player player = null;
private Monster monster = null;
private Random rand = new Random();
public void Process()
{
switch (mode)
{
case GameMode.Lobby:
ProcessLobby();
break;
case GameMode.Town:
ProcessTown();
break;
case GameMode.Field:
ProcessField();
break;
}
}
public void ProcessLobby()
{
Console.WriteLine("직업을 선택하세요");
Console.WriteLine("[1] 기사");
Console.WriteLine("[2] 궁수");
Console.WriteLine("[3] 법사");
string input = Console.ReadLine();
switch (input)
{
case "1":
player = new Knight();
mode = GameMode.Town;
break;
case "2":
player = new Archer();
mode = GameMode.Town;
break;
case "3":
player = new Mage();
mode = GameMode.Town;
break;
}
}
public void ProcessTown()
{
Console.WriteLine("마을에 입장했습니다!");
Console.WriteLine("[1] 필드로 가기");
Console.WriteLine("[2] 로비로 돌아가기");
string input = Console.ReadLine();
switch (input)
{
case "1":
mode = GameMode.Field;
break;
case "2":
mode = GameMode.Lobby;
break;
}
}
public void ProcessField()
{
Console.WriteLine("필드에 입장했습니다!");
Console.WriteLine("[1] 싸우기");
Console.WriteLine("[2] 일정 확률로 마을 돌아가기");
CreatRandomMonster();
string input = Console.ReadLine();
switch (input)
{
case "1":
ProcessFight();
break;
case "2":
TryEscape();
break;
}
}
private void TryEscape()
{
int randvalue = rand.Next(0, 101);
if (randvalue < 33)
{
mode = GameMode.Town;
}
else
{
ProcessFight();
}
}
private void ProcessFight()
{
while (true)
{
int damage = player.GetAttack();
monster.OnDamaged(damage);
if (monster.IsDead())
{
Console.WriteLine("승리했습니다");
Console.WriteLine($"남은체력{player.GetHp()}");
break;
}
damage = monster.GetAttack();
player.OnDamaged(damage);
if (player.IsDead())
{
Console.WriteLine("패배했습니다");
break;
}
}
}
private void CreatRandomMonster()
{
int randValue = rand.Next(0, 3);
switch (randValue)
{
case 0:
monster = new Slime();
Console.WriteLine("슬라임이 생성되었습니다");
break;
case 1:
monster = new Orc();
Console.WriteLine("오크가 생성되었습니다");
break;
case 2:
monster = new Skeleton();
Console.WriteLine("해골이 생성되었습니다");
break;
}
}
}
}
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
3번째 강의까지는 문제 없이 되는데 마무리 단계를 따라하고 나면 문제가 발생합니다. 거꾸로 영상을 다시보기도 하고 처음부터 다시만들어 봤는데 이번엔 또 같은곳에서 다른 이유로 안되네요...ㅠㅠ
맨처음 만들었던건 nullreferenceexception이라는 오류가 떴고 지금 코드를 첨부한 두번째 시도는 이렇게 나오는데 혼자 며칠 고민해봐도
강의를 반복해서 봐도 어디서 실수를 했는지 도저히 찾지를 못하겠어서 도움을 요청드립니다
답변 3
0
Rookiss
지식공유자
진행이 안 되는 버그는
일시 정지 버튼을 누르면 현재 코드가 멈추는데 어디서 헤매고 있는지를 찾아보면 됩니다.
콜스택을 보면 위와 같네요.
즉 위 함수에서 계속 뺑뻉이를 돌고 있는데, 왜 죽지 않을까? 살펴보면
죽는 조건이 hp < 0입니다.
즉 hp 가 0이 되어도 죽은 상태가 아니라는 것이죠.
<=0 으로 수정이 필요합니다.






너무감사합니다 ㅠㅠ
혼자할때는 이런게 왜이렇게 안보이는지..