팀 프로젝트 - 캐릭터 생성하기C#/텍스트 게임 "Shelter"2023. 11. 16. 16:15
Table of Contents
📌 팀 프로젝트
- 개인 과제를 마치고, 일주일 간 팀 프로젝트로 같이 협업하는 기간을 주었다
- 그런데 나는 다음주에 동원 훈련이 예정돼 있어, 3일에 시간안에 필수 기능을 구현해야 한다.
📌 캐릭터 생성
📄 CreateCharacterScene.cs
// 캐릭터 생성 씬
public class CreateCharacterScene : Scene
{
// 단계별 캐릭 생성
private enum CreateStep
{
Name,
Job,
Exit
}
private CreateStep currentStep = CreateStep.Name; // 현 단계
private string errorMessage = string.Empty; // 에러 메세지
private string createName = string.Empty; // 이름 생성
private Character selectedJob; // 선택된 직업
}
- CreateStep 열거형을 만들어 단계별로 생성 할 수 있는 기반을 만든다.
- 올바른 입력을 아닐 시 errorMessage 출력
- 지금 생성할 기능은 이름 짓기와 직업 선택
// 팀원이 만든 매서드 오버라이드
public override void EnterScene()
{
do
{
DrawStep();
}
while (ManageInput());
}
// 키 조작 관리
private bool ManageInput()
{
switch (currentStep)
{
// 이름 짓기 단계
case CreateStep.Name:
ReadName();
break;
// 직업 선택 단계
case CreateStep.Job:
ReadJob();
break;
default:
throw new ArgumentOutOfRangeException();
}
bool isExit = (currentStep != CreateStep.Exit);
return isExit;
}
- 처음 씬에 진입 시, do-while을 통해 currentStep에 따라서 DrawStep을 불러온다.
- ManageInput에서도 currentStep에 따라서 캐릭 생성에 필요한 Read 매서드를 불러온다.
- 그리고 현 단계가 CreateStep.Exit에 도달할 시, do-while문에서 탈출. 다음 씬으로 넘어간다.
// 올바른 이름을 입력했는지 체크하고, 이름을 변경합니다.
public void OnNameChanged(string? name)
{
if (string.IsNullOrEmpty(name))
{
errorMessage = "오류: 이름을 입력해 주세요.";
return;
}
if (Renderer.GetPrintingLength(name) > 10)
{
errorMessage = "오류: 이름이 너무 깁니다. 10글자 이내로 작성해 주세요.";
return;
}
// 이름 결정
createName = name;
NextStep();
}
// 올바른 직업을 선택했는지 체크하고, 직업을 선택합니다.
public void OnJobChanged(string? job)
{
if (string.IsNullOrEmpty(job))
{
errorMessage = "오류: 숫자를 입력해 주세요.";
return;
}
bool isInt = Int32.TryParse(job, out int idx);
if (!isInt)
{
errorMessage = "오류: 숫자가 아닌 문자를 입력했습니다. 다시 입력해 주세요.";
return;
}
if (idx < 0 || idx > 2)
{
errorMessage = "오류: 선택지 범위 내의 숫자를 입력해 주세요.";
return;
}
// 직업 결정
selectedJob = jobs[idx];
NextStep();
}
// 다음 단계로 넘어가기
private void NextStep()
{
errorMessage = string.Empty;
currentStep += 1;
// 끝 단계 도달 시 캐릭 생성
if (currentStep == CreateStep.Exit)
{
CreateCharacter();
}
}
- ReadName, ReadJob에서 입력한 문자에 따라 올바르게 입력했는지 OnNameChanged, OnJobChanged에서 확인
- 기본적으로 그냥 빈 문자열 입력시 예외 처리 하였고, 이름은 특정 길이 이상이면 제한을 두거나, 직업은 특정 숫자를 입력하지 않을 시 예외 처리를 두었다
- 올바르게 입력 시, 캐릭터 이름, 직업을 결정하고 NextStep으로 넘어간다.
- 기본적으로 열거형 멤버에 연결된 상수 값은 int 형식인걸 활용해 하나씩 더하여 단계를 올리고, 마지막 단계에 도달 시, 캐릭터를 생성한다.
💡 결과 화면
'C# > 텍스트 게임 "Shelter"' 카테고리의 다른 글
팀 프로젝트 - 여러가지 기능 구현 (0) | 2023.11.17 |
---|---|
7일차. 게임 마무리 (0) | 2023.11.13 |
6일차. 게임 화면 꾸미기 (1) | 2023.11.13 |
5일차. 상점 시스템 구현 (0) | 2023.11.10 |
4일차. 인벤토리 List 활용 & 스테이지 진행 (0) | 2023.11.09 |