콘솔 프로젝트 진행과정 001

2025. 10. 2. 00:52·📖TIL/🔥Projects

목적

  1. 메뉴 → 게임 실행 → 결과 / 재도전 → 메뉴 흐름을 표준화
  2. IGame 인터페이스를 만들고 새 게임을 제작할때 IGame 인터페이스를 상속하자
  3. 입력 / 예외 / 유지보스 구조를 연습하면서 객체지향 감각을 익히자

 

 

  • 메인 메뉴를 작업하고 싶다
  • 메인 메뉴가 이 프로젝트 작업에서 나에게는 생소한 작업이고 어려울 것 같아 먼저 시도해보자
  • 이 메인 메뉴가 완성되면 앞으로 미니 게임을 추가할 때 더 수월해질 것 같다

 

 

세 파트로 나눠서 메인 메뉴를 제작해보려고 한다

  1. Interface : 모든 미니게임이 따라야 하는 규칙
  2. Input : 콘솔에서 입력받은 값을 판단 , 예외 처리
  3. 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
'📖TIL/🔥Projects' 카테고리의 다른 글
  • 프로젝트 진행과정 003
  • 프로젝트 진행과정 002
  • 콘솔 프로젝트 기획 초안
  • 모의 발표 준비 가이드
DevHoChan
DevHoChan
맨땅에서 시작하는 코딩 도전
  • DevHoChan
    Debugging Life
    DevHoChan
  • 전체
    오늘
    어제
    • 분류 전체보기 (374)
      • 🕹️Game Life (1)
      • 🖥️Computer Science (5)
      • 📖TIL (141)
        • 🔥Projects (16)
        • 💡DevTips (5)
        • 🤔발생한 문제와 해결 (5)
        • 🔮Unity Graphics (5)
        • 🎤Interview (3)
        • ✅CodingTest (9)
      • 🚀Game Release (4)
      • 🧊Unity Basic (58)
        • 📌용어 사전 (1)
        • 에디터&인터페이스 (3)
        • 디버그 (1)
        • 라이프사이클 (4)
        • 게임오브젝트 (4)
        • 프리팹 (1)
        • 오브젝트풀링 (4)
        • 애트리뷰트 (2)
        • 트랜스폼 (4)
        • 물리&충돌 (1)
        • 프레임&델타타임 (4)
        • 코루틴&이벤트 (7)
        • 수학&보정함수 (3)
        • 디자인패턴 (9)
        • UGUI (3)
        • 벡터 ( Vector ) (3)
        • 씬 ( Scene ) (2)
        • 데이터 관리 (2)
      • ⭐C Sharp (99)
        • 📌용어 사전 (1)
        • 📌문법 사전 (6)
        • 메모리 관리 (3)
        • 00. 문법 (17)
        • 01. 변수 (3)
        • 02. 자료형 (2)
        • 03. 연산자 (6)
        • 04. 조건문 (2)
        • 05. 반복문 (2)
        • 06. 배열 (3)
        • 07. 메서드(함수) (7)
        • 08. 열거형 (3)
        • 09. 구조체 (2)
        • 10. 참조 (2)
        • 11. 객체 지향 (11)
        • 12. 델리게이트 (3)
        • 13. 디자인 패턴 (7)
        • 14. LINQ (1)
        • 📂▼자료구조 (2)
        • 15-1. 제네릭 (3)
        • 15-2. 배열 (4)
        • 15-3. 리스트 (2)
        • 15-4. 스택과 큐 (2)
        • 15-5. 딕셔너리 해시테이블 (2)
        • 15-6. 트리와 그래프 (3)
      • 📊Algorithm (16)
        • BigO (2)
        • 정렬 (4)
        • 셔플 (2)
        • 탐색 (6)
        • 최적화 (1)
      • 📝Game Design (16)
      • 🤖​AI Tools (12)
        • AI 리뷰 분석 (6)
        • Player2 (0)
        • 3D 모델링 (1)
        • 2D 스프라이트 (0)
        • 이미지 (2)
        • 사운드 (1)
        • 동영상 (1)
        • 문서 (1)
      • 🌍Network (6)
      • 🌱Github (11)
        • 기본 개념 (7)
        • 명령어 (1)
        • 도구 활용 (1)
      • ⚙️Visual Studio (5)
        • 🔧설치 및 환경설정 (2)
        • ⌨️HotKey (1)
        • 🚨디버깅 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    게임기획
    게임디자인
    unity
    객체지향
    디자인패턴
    gamedesign
    c#
    OOP
    csharp
    CodingTest
    자료형
    algorithm
    부트캠프
    유니티
    GitHub
    자료구조
    메모리관리
    기획
    til
    문법
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
DevHoChan
콘솔 프로젝트 진행과정 001
상단으로

티스토리툴바