프로젝트 진행과정 002

2025. 10. 2. 15:39·📖TIL/🔥Projects

분리해서 관리할 클래스 정리

  • IGame ( 인터페이스 )
  • Input ( 콘솔에서 받아올 입력 값 , 처리 , 예외 )
  • GameManager ( 게임 전체 흐름 / 메인 메뉴 / 루프 담당 )
  • 그리고 각 미니게임들..

 

 

어제는 GameManager 를 조금 작성했었는데 오늘은 최대한 마무리할수 있게 작성해보자

MainMenu 나 RunGameLoop 는 같은 메서드는 GameManager 에서 작성하는게 좋을것 같다

 

 

GameManager 의 역할

크게 세가지로 나눠 작업

  1. 게임 등록 관리 ( ID 중복 되면 안됨 )
  2. 메인 메뉴 표시 , 사용자 선택 처리 ( 미니 게임 선택 , 종료 )
  3. 선택된 게임의 실행 루프 관리 ( 재도전 / 메인메뉴로 복귀 )

 

public class GameManager
{
    private readonly List<IGame> games = new List<IGame>(); // 등록된 게임 목록

    private bool running = true; // 프로그램 메인메뉴 루프

    public void Register(IGame game) // 게임 등록
    {
        games.Add(game);

        /*foreach (IGame g in games)
        {
            if (g.Id == game.Id)
            {
                return; // 등록된 게임은 패스
            }
        }*/
    }

▲Register 에서 중복된 게임 ID 체크 예외 처리를 작성하려다가 말았다.

어차피 협업도 아니고 미니게임을 넣을때 나만 알고 있으면 될것 같아서 일단은 이정도만 작성.

필요하면 주석 없애고 다시 작성해야겠다.

 

 

private void MainMenu() // 메인화면
{
    Console.Clear();
    Console.WriteLine("==============================");
    Console.WriteLine("       HoChan MiniGames       ");
    Console.WriteLine("==============================");
    Console.WriteLine("[0] 종료");

    for ( int i = 0; i < games.Count; i++ )
    {
        Console.WriteLine($"[{i+1}] - {games[i].Title}");
    }
    Console.WriteLine();
}
=====

게임

=====

[1] - 숫자야구

[2] - UP & DOWn

 

▲메인메뉴에 아스키 아트를 넣어보려고 했는데 폰트가 안맞는지 깨져서 나왔다.

일단은 간단하게 작성하고 꾸미는건 나중에 해야겠다.

 

 

public void Run() // 프로그램의 메인 루프를 담당
{
    Console.Title = "HoChan Mini Games"; // 콘솔 창 제목 설정
    while ( running )
    {
        MainMenu();
        int choice = Input.ReadIntRange("선택: ", 0, games.Count); 

        if ( choice == 0 ) // 0 입력시 종료
        {
            running = false; // running 루프 탈출
            break;
        }

        var select = games[choice]; // <<<<<<< 여기 인덱스 나중에 수정해야함
        RunGameLoop(select); // 이것도 수정 필요
    }
    Console.WriteLine("프로그램을 종료합니다.");
}

▲미니게임 만들고 나서 인덱스를 내가 지정해줄지는 아직 고민중이라 일단 보류

 

한 게임에 대한 재도전 / 메인메뉴 복귀 루프를 관리할 메서드가 필요하다

미니게임에서 종료후 메인메뉴를 이동하도록 각각 넣어줘야하나?

아니면 메서드 하나에서 관리하는게 좋으려나?

RunGameLoop 메서드를 하나 만들어서 관리하는게 좋으려나?

 

private void RunGameLoop(IGame game)
{
    bool retry = true;

    while (retry)
    {
        Console.Clear();
        Console.WriteLine($"{game.Title} 시작");
        Console.WriteLine("-----");

        game.Run();

        Console.WriteLine("-----");
        Console.WriteLine($"{game.Title} 종료");
        Console.WriteLine();

        // 한 판이 끝날 때마다 사용자의 행동 묻기
        Console.WriteLine("[1] 재도전   [2] 메뉴로 돌아가기");
        int r = Input.ReadIntRange("선택: ", 1, 2);

        retry = (r == 1); // 1입력 받을 경우 재시도
    }
}

메인메뉴의 틀은 갖춰졌다

미니게임을 하나씩 작성해야겠다.

 

 

발생한 문제와 해결

1. 람다식의 사용법

public string Id = "UP & DOWN";
public string Id => "UP & DOWN";

작성하면서 문득 든 생각이다

위랑 아래랑 둘다 같지 않나? 어떤 점이 다르지?

물어보기도 하고 검색도 해봤다.

public string Id => "game";

람다식은 그 쓰임새에 따라 여러가지로 해석이 가능한데

위의 코드의 경우는 이렇게 해석할 수 있다.

  • public sting Id => "game"
    └ public string Id( get { return "game" } );
    └ 항상 "game"을 반환 - 절대 값이 바뀌지 않는다는 의미

오늘 다시 알게된 람다식 사용법은 블로그에 다시 정리해야겠다.

 

 

2. 인덱스는 0 부터 시작한다

라고 주석을 달아놓고 까먹고 있었다

 

 

3. 오늘도 코드를 날려먹었다

 

 

 

새로 써보는 키워드

Up&Down 미니게임 중 일부

 

▼예전에 작업한 코드

if ( guess < target ) { " UP! " }
if ( target < guess ) { " DOWN! " }

 

 

▼수정한 코드

Console.WriteLine( n < cpuChoose ? "UP!" : "DOWN!");

 

삼항연산자를 쓰면 편하구나

 

 

문법

조건식 ? 값 1 : 값 2

조건식이 true 이면 값 1 실행

조건식이 false 이면 값 2 실행

'📖TIL > 🔥Projects' 카테고리의 다른 글

프로젝트 진행과정 004  (0) 2025.10.03
프로젝트 진행과정 003  (0) 2025.10.02
콘솔 프로젝트 진행과정 001  (0) 2025.10.02
콘솔 프로젝트 기획 초안  (0) 2025.10.01
모의 발표 준비 가이드  (0) 2025.10.01
'📖TIL/🔥Projects' 카테고리의 다른 글
  • 프로젝트 진행과정 004
  • 프로젝트 진행과정 003
  • 콘솔 프로젝트 진행과정 001
  • 콘솔 프로젝트 기획 초안
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
    c#
    객체지향
    메모리관리
    게임기획
    게임디자인
    algorithm
    디자인패턴
    gamedesign
    OOP
    자료구조
    GitHub
    CodingTest
    자료형
    til
    csharp
    기획
  • 최근 댓글

  • 최근 글

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

티스토리툴바