[부트 캠프] 팀 프로젝트 5일차

고현규·2023년 11월 21일
post-thumbnail

오늘 학습 내용

1. .gitignore 작성법
2. 휴식 Scene 구현

1. .gitignore 사용법

오늘 .gitignore를 직접 적어야 되는 경우가 생겼다.
Json파일로 SaveData를 저장했는데 Visual studio 버전에는 미포함이었다.
내부 구조를 천천히 뜯어보는 건 처음이라 작성법을 찾아보았다.

  1. # : 주석처리
  2. /docs : /폴더명
  3. Test.txt : 파일명. 확장자
  4. /docs/test.txt : 폴더명/파일명.확장자
  5. /docs/*.text : 폴더 안 특정 확장자 파일 전부
  6. /docs/ ** /*.txt : 폴더 하위 모든 특정 확장자 파일 전부

SaveData.json.gitignore에 넣어두니
Changes에 SaveData.json의 변경사항이 나타나지 않았다.

단! 주의 사항

이미 깃에 해당 제외된 파일이 이미 올라가 있을 땐,
변경사항이 계속해서 Changes에 나타난다.

이럴 경우에는 올라간 파일을 삭제하면 더이상 나오지 않는다.


2. 휴식 Scene 구현

팀원들이 작성해 놓은 메서드를 이용해서 회복 씬을 구현했다.

// SceneManager.cs
private void UseInn()
{
    if (Game.Player.Hp == Game.Player.HpMax)        
        Renderer.Print(10, "이미 체력이 최대입니다.");
    
    else if (Game.Player.Gold <= 100)        
        Renderer.Print(10, "돈이 부족합니다.");
    else
    {            
        Renderer.Print(10, "회 복 중 입 니 다 . . . ", false, 2000, 2);
        Game.Player.Hp = Game.Player.HpMax;
        Game.Player.ChangeGold(-100);
        Renderer.Print(5, $"당신의 체력 : {Game.Player.Hp} / {Game.Player.DefaultHpMax}");
        Renderer.Print(7, $"보유 골드 : {Game.Player.Gold} G");
        Renderer.Print(10, "체력이 모두 회복되었습니다!");
    }        
}
// RestScene.cs
public class RestScene : Scene {
    public override string Title { get; protected set; } = "마 을 여 관";

    public override void EnterScene()
    {
        // #1. 선택지 설정.
        Options.Clear();
        Options.Add(Managers.Scene.GetOption("UseInn"));
        Options.Add(Managers.Scene.GetOption("Back"));
        DrawScene();
    }

    public override void NextScene()
    {
        do
        {
            Renderer.PrintOptions(13, Options, true, selectionIdx);
        }
        while (ManageInput());
    }
    protected override void DrawScene()
    {
        Renderer.DrawBorder(Title);
        Renderer.Print(3, "여관에서 휴식하시겠습니까?");
                
        Renderer.Print(5, $"당신의 체력 : {Game.Player.Hp} / {Game.Player.DefaultHpMax}");
        Renderer.Print(7, $"보유 골드 : {Game.Player.Gold} G");
        Renderer.Print(8, "이용 골드 : 100 G");

        Renderer.PrintKeyGuide("[ESC : 뒤로가기]");
    }

    private int selectionIdx = 0;

    public bool ManageInput()
    {
        var key = Console.ReadKey(true);

        var commands = key.Key switch
        {
            ConsoleKey.UpArrow => Command.MoveTop,
            ConsoleKey.DownArrow => Command.MoveBottom,
            ConsoleKey.Enter => Command.Interact,
            ConsoleKey.Escape => Command.Exit,
            _ => Command.Nothing
        };

        OnCommand(commands);

        if (commands == Command.Exit)
        {
            Options[1].Execute();

            return true;
        }

        return true;
    }
    private void OnCommand(Command cmd)
    {
        switch (cmd)
        {
            case Command.MoveTop:
                if (selectionIdx > 0)
                    selectionIdx--;
                break;
            case Command.MoveBottom:
                if (selectionIdx < Options.Count - 1)
                    selectionIdx++;
                break;
            case Command.Interact:
                Options[selectionIdx].Execute();
                break;
        }
    }

확실히 물어보니 메서드 사용법을 바로 알려주시고
잘 활용하는 법을 알려주기도 하니 간편하게 작성했다.

사용 하게 쉽게 만든 여러 기능들을 합쳐놓으니 그럴 듯한 결과가 나타났다.

그래도 하나의 씬을 구성하고 프로젝트에 기여할 수 있어서 정말 다행이다.

profile
게임 개발과 기획

0개의 댓글