Inflearn Community Q&A
textrpg 두번째버전을 계속 실패합니다
Written on
·
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이라는 오류가 떴고 지금 코드를 첨부한 두번째 시도는 이렇게 나오는데 혼자 며칠 고민해봐도
강의를 반복해서 봐도 어디서 실수를 했는지 도저히 찾지를 못하겠어서 도움을 요청드립니다
C#
Answer 3
0
Rookiss
Instructor
진행이 안 되는 버그는
일시 정지 버튼을 누르면 현재 코드가 멈추는데 어디서 헤매고 있는지를 찾아보면 됩니다.
콜스택을 보면 위와 같네요.
즉 위 함수에서 계속 뺑뻉이를 돌고 있는데, 왜 죽지 않을까? 살펴보면
죽는 조건이 hp < 0입니다.
즉 hp 가 0이 되어도 죽은 상태가 아니라는 것이죠.
<=0 으로 수정이 필요합니다.






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