본문 바로가기
제출용/TIL

내일배움캠프 12일차 TIL + 시작화면, 상태보기, 오류대수정

by 유린테 2024. 4. 30.

어제 내내 깃허브 연결만 한참 걸리다가 드디어 오늘부터 제대로 코드를 짜기 시작했다.

나는 시작화면과 캐릭터 상태보기를 담당했음.

 

 

internal class Start
{
    public static void startScene()
    {

        Console.Clear(); //화면정리

        //게임입장 시 멘트
        Console.WriteLine("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");
        Console.WriteLine("스파르타 던전에 오신 여러분 환영합니다.");
        Console.WriteLine("캐릭터를 생성하려면 이름을 입력하세요");
        Console.WriteLine("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■");

        Console.WriteLine();
        Console.Write(">>");

        string name = Console.ReadLine();
        Console.WriteLine("당신의 이름은 <" + name + "> 입니다.");


        Console.WriteLine();

        Console.WriteLine("직업을 선택하세요 (전사, 마법사, 도적): ");
        string job = Console.ReadLine();

        Player player = new Player(name, job);

        Console.WriteLine("당신의 이름은 <" + job + "> 입니다.");

        

    }

}

시작화면.

시작화면에서 메인화면으로 넘어가는건 아직 구현을 하지 않았고, 

우리 조는 선택구현이었던 캐릭터 만들기와 직업 정하기를 그냥 기본기능으로 치고 만들기 시작했다.

 

혼자 한 스크립트에 짤 때는 몰랐는데, 스크립트를 나누고 다른 사람들과 협업해서 하다 보니

내가 사용한 코드들이 다른 사람들의 스크립트와 함께 돌아가게 연동해주는게 정말 힘들었다.

 

class에 대해 제대로 이해하고 있지 못했던 것 같다. 

public , static , void 이런 것들을 계속 사용하지만 어느 상황에 어떤 것을 사용해야 적절한지 사실 아직 잘 모르겠다.

그래도 만들다 보니 점점 익숙해지고는 있는 것 같다.

그리고 Console.WriteLine이나 Console.ReadLine 정도는 이제 쉽게 사용하게 된 것 같다.

 

 

그리고 캐릭터 상태보기

public class Player
{
    public int Level { get; set; } //캐릭터 레벨
    public string Name { get; set; } //캐릭터 이름
    public string Job { get; set; } //캐릭터 직업
    public int Attack { get; set; } //캐릭터 공격력
    public int Defense { get; set; } // 캐릭터 방어력
    public int Gold { get; set; } // 캐릭터 소지 골드
    public int _health;
    public int Health 
    {
        get
        {
            return _health;
        }
        set
        {
            _health = value; if (_health <= 0) { Die(); }
        }
    
    } //캐릭터 체력


    public Player(string name, string job)
    {
        Level = 1;
        Name = name;
        Job = job;
        SetJobStats();
        Gold = 10000;
        Health = 100;
    }
    public void SetJobStats() //직업정보
    {
        switch (Job)
        {
            case "전사":
                Attack = 10;
                Defense = 5;
                break;
            case "마법사":
                Attack = 8;
                Defense = 4;
                break;
            case "도적":
                Attack = 12;
                Defense = 4;
                break;
            default:
                Console.WriteLine("잘못된 직업을 선택했습니다. 기본 직업으로 설정됩니다.");
                Attack = 10;
                Defense = 5;
                Job = "전사";
                break;
        }
    }
    public void ShowInfo()
    {
        Console.Clear();
        Console.WriteLine("상태 보기");
        Console.WriteLine("캐릭터의 정보가 표시됩니다");
        Console.WriteLine();
        Console.WriteLine($"Lv. {Level:D2}");
        Console.WriteLine($"{Name} ( {Job} )");
        Console.WriteLine($"공격력 : {Attack}");
        Console.WriteLine($"방어력 : {Defense}");
        Console.WriteLine($"체력 : {Health}");
        Console.WriteLine($"Gold : {Gold} G");
    }
    private void Die() 
    { 
        Console.WriteLine("Character is dead."); 
    }
}

이전에 개인프로젝트로 만들었을 때는 public이 아닌 그냥 int, string을 사용해 만들었었는데

이번엔 협업이다 보니 public 을 사용하는게 좋겠다 생각해서 이전에 썻던 코드가 아닌 새로운 코드를 작성하게 되었다.

 

지금 저기 올려놓은 코드도 계속 작성해나가다 보면 변경되겠지만,, 혹시 모르니 기록해두었다.

 

이걸 하면서 { get; set; } 을 잔뜩 사용해보았는데, 저렇게 값을 변수로 지정해놓고 여기저기서 가져오고, 세팅하고를 할 수 있으니 아주 편한 것 같다.

 하지만 저 형식을 처음으로 이해하는데는 꽤나 시간이 들었음.

 

그리고 상태보기에서도 메인화면으로 나가는 기능을 아직 만들지 않았다.

내일은 메인화면과 연동해서 콘솔을 켜면 스타트 화면부터 제대로 나오게끔 해봐야겠다.

 

 

그리고 이 몇안돼는 코드를 작성해놓고도.. 다른 팀원들의 코드와 합치는데만 하루가 꼬박 걸렸다.

다른 사람들이 작성한 코드들과 연동이 되게 하려니 처음엔 빨간 줄 파티였다.

심지어 콘솔이 켜지긴 하는데 아무것도 안나오는 오류만 몇시간이었어서 그거 고치는데도 한참 걸렸다.

 

원래는 캐릭터를 Character로 해줬었는데 다른 코드와 겹치는 오류가 좀 있어서 

플레이 캐릭터를 Player로 고쳤다. 그러면서 또 모든  Character를 Player로 변경해줘야하는 작업이 있었음.

 

그리고 이거 하면서 Player.ShowInfo 같은 .을 사용해 적어주는걸 이해하게 되었다!!!

 

같은 클래스 안에 있거나 할 때는 그냥 ShowInfo(); 로 가져와주면 되는데,

다른 사람들과 같이 코드를 작성하니 클래스가 상당히 많이 나뉘어서, Player.ShowInfo(); 처럼 .으로 연결해주어야한다.

그 이유는! 클래스가 다르기 때문에 Player라는 클래스 안에 있는 ShowInfo() 함수를 가져온다는 뜻이다.

약간 어느집 누구 같은 느낌으로.. 이게 정말 헷갈렸었는데 이번에 제대로 이해한듯.  헤헷

 

오늘 하루종일 코드 작성한 시간보단 팀원들과 오류 고치는 시간이 더 오래걸린 듯 하다.

진짜 코드 하나 추가하면 오류나서 고치고 추가하면 고치고 하다보니 갑자기 캠프 시간이 다 되어버린.. 

벌써 밥 시간이야? 벌써 끝날 시간이야? 가 저절로 나왔다

뭔가 힘들지만 이렇게 다같이 하면서, 스스로 배워가는게 있다 보니 상당히 재밌다.

캠프 하기를 잘한 것 같다.