textrpg 두번째버전을 계속 실패합니다
194
작성한 질문수 3
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
0
진행이 안 되는 버그는
일시 정지 버튼을 누르면 현재 코드가 멈추는데 어디서 헤매고 있는지를 찾아보면 됩니다.
콜스택을 보면 위와 같네요.
즉 위 함수에서 계속 뺑뻉이를 돌고 있는데, 왜 죽지 않을까? 살펴보면
죽는 조건이 hp < 0입니다.
즉 hp 가 0이 되어도 죽은 상태가 아니라는 것이죠.
<=0 으로 수정이 필요합니다.
0
크래시 난 부분에서 마우스를 갖다 대면 player가 null인 것을 알 수 있습니다.
player를 할당을 왜 안 해줬는지를 찾으면 되겠죠!
player = 대입하는 부분이 없네요.
이렇게 바꿔주시면 됩니다.
Generic에 대한 질문 있습니다.
0
113
2
2022 버전에 커뮤니티 버전이 없는데 2026 버전으로 해도 무관?
0
226
2
다형성 캐시 문제
0
136
3
.
0
77
1
프로퍼티 강의 질문 있습니다.
0
85
1
이후 커리 질문
0
92
1
static
0
103
2
강의에는 새로운 클래스 파일을 생성하면...
0
81
1
생성자의 이름 선언
0
70
1
9:03 Divide(10 , 3) 부분 질문입니다
0
93
1
깃허브 관련 질문 있습니다.
0
249
1
비쥬얼 스튜디오 업데이트가 된건가요..? 매개변수 오류 관련 질문
0
258
1
C# 시리즈 || C++ 시리즈 자료구조 강의에 대한 질문입니다!
0
311
2
Activator 질문있습니다
0
343
1
이넘 타임 선언 질문
0
359
1
Sort 오름차순, 내림차순
0
333
1
질문 있습니다.
0
254
1
팩토리얼 문제
0
277
1
Sort함수 질문있습니다.
0
272
1
다형성 함수 질문 있습니다.
0
231
1
질문이 있습니다.
0
236
1
섹션2 연습문제 질문입니다.
0
223
1
안녕하세요~서버에 대해 질문이 있습니다.
1
289
1
텍스트 색깔이 제 편집기와 달라서 수강에 어려움이 있습니다ㅜㅜ
0
401
1





