목적
- 메뉴 → 게임 실행 → 결과 / 재도전 → 메뉴 흐름을 표준화
- IGame 인터페이스를 만들고 새 게임을 제작할때 IGame 인터페이스를 상속하자
- 입력 / 예외 / 유지보스 구조를 연습하면서 객체지향 감각을 익히자
- 메인 메뉴를 작업하고 싶다
- 메인 메뉴가 이 프로젝트 작업에서 나에게는 생소한 작업이고 어려울 것 같아 먼저 시도해보자
- 이 메인 메뉴가 완성되면 앞으로 미니 게임을 추가할 때 더 수월해질 것 같다
세 파트로 나눠서 메인 메뉴를 제작해보려고 한다
- Interface : 모든 미니게임이 따라야 하는 규칙
- Input : 콘솔에서 입력받은 값을 판단 , 예외 처리
- GameManager : 프로그램 전체 실행을 담당하는 클래스
그나마 코드 작성이 빠를것 같은 Input 과 Interface 를 먼저 작업하자
▼Interface
namespace HoChanMiniGames
{
public interface IGame // 모든 미니게임이 따라야 하는 최소 규칙
{
string Id { get; }
string Title { get; }
void Run();
}
}
▼Input
// 콘솔 입력과 관련된 공통 기능
// 원하는 문자열이나 숫자 외에 다른 값이 들어왔을 때 예외처리
public static class Input
{
private static string ReadLineSafe()
{
string s = Console.ReadLine();
return s ?? string.Empty; // Null 병합 연산자
}
private static string Normalize(string s)
{
if (s == null)
{
return string.Empty;
}
s = s.Trim().ToLower();
return s;
}
public static int ReadIntRange(string prompt, int minN, int maxN)
{
while (true)
{
Console.Write(prompt);
string s = ReadLineSafe();
int n = 0;
// 예외 처리
if (int.TryParse(s, out n) && n >= minN && n <= maxN)
{
return n;
}
else
{
Console.WriteLine($"{minN} ~ {maxN} 사이의 숫자로 다시 입력해주세요.");
}
}
}
public static int ReadInt(string prompt)
{
while (true)
{
Console.Write(prompt);
string s = ReadLineSafe();
int n = 0;
if (int.TryParse(s , out n))
{
return n;
}
else
{
Console.WriteLine("숫자로 다시 입력해주세요.");
}
}
}
//▼ 예 / 아니오 로 확인 입력받기 y/yes , n/no 를 소문자로 통일하여 처리
public static bool Confirm(string prompt)
{
Console.WriteLine($"{prompt} ( y/n ): ");
while (true)
{
string s = Normalize(ReadLineSafe());
if (s == "y" || s == "yes")
{
return true;
}
if (s == "n" || s == "no")
{
return false;
}
Console.WriteLine("y 또는 n로 다시 입력해주세요.: ");
}
}
public static string ReadString(string prompt, bool isSpace)
{
while(true)
{
Console.Write(prompt);
string s = ReadLineSafe();
if (!isSpace && s.Trim().Length == 0)
{
Console.WriteLine("빈 입력은 허용하지 않습니다. 다시 입력해주세요.");
continue;
}
return s.Trim();
}
}
}
발생한 문제와 해결
주로 컴파일 오류가 많이 나왔다
1. string nullable
string? s = Console.ReadLine();

▲이와 같이 작성하려고 했는데 8.0 이하 구버전에서는 사용 불가

▲결국 if문으로 예외처리를 작성했다.
2. 세이브는 정말 정말 자주 하는 습관을 기르자

그동안 한번도 VS 가 팅겨본 적이 없었는데 콘솔 프로젝트 작성하면서 무려 4번이나 코드를 날려먹었다.
앞으로는 정말정말 자주 저장하는 습관을 길러야겠다.
3. 한참을 헤맸던 중괄호

▲엥? 분명 짝이 있는데? 왜 중괄호가 필요?
해결하기 위해 코드 한줄마다 주석을 치면서 확인
메서드 안에서 메서드를 작성해서 생기는 에러로 판별
작성 중이던 메서드를 메서드 밖으로 꺼내는 방법으로 해결했다.
새로 써보는 키워드
이론은 알고 있는데 실제로 작성해보려니 많이 막막했다
?? 연산자
readonly
걱정되는 부분
static을 남발하지 말라고 배웠는데 요번에 너무 많이 사용한게 아닐까
변수명 짓기가 너무 어렵다
'📖TIL > 🔥Projects' 카테고리의 다른 글
| 프로젝트 진행과정 003 (0) | 2025.10.02 |
|---|---|
| 프로젝트 진행과정 002 (0) | 2025.10.02 |
| 콘솔 프로젝트 기획 초안 (0) | 2025.10.01 |
| 모의 발표 준비 가이드 (0) | 2025.10.01 |
| 버프와 지속 시간 구현 (0) | 2025.10.01 |
