• Home
  • About
    • KKsDev photo

      KKsDev

      게임 프로그래머를 목표로 Unity, C#을 공부하고 있습니다.

    • Learn More
    • Email
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

내일배움캠프 2주차 WIL

18 Aug 2023

Reading time ~3 minutes

이번주에 배운 내용

  1. C# 공부기간 팀 결성

  2. C# 기초 강의 수강

  3. 틱택토 게임

  4. 스네이크 게임

  5. 블랙잭 게임

  6. Text RPG 게임

  7. 개인과제 Text RPG 게임 제작 시작

nbcbanner

주간 회고

이번 주는 C# 기초 강의 기간이 시작되었고, 시작과 동시에 조가 바뀌어서 팀원들이 바뀌었다.

그리고 각자 C#강의를 수강하고 숙제로 Console을 이용한 게임들을 제작하면서 의견을 나누었다.



강의 내용에 비해서 생각보다 어려운 숙제들이 나왔고, 아무래도 C#의 전반적인 내용은 어느정도 알고있어서

강의 수강은 얼마걸리지 않았지만 숙제 게임을 만드는것은 생각보다 시간이 오래 걸렸다.



틱택토 게임은 어떤 방식의 게임 인지 잘 몰라서 구글링을 통해서 검색 해봤는데

3목이나 빙고 같은 느낌의 간단한 게임이였다.

나는 맵을 만들어서 게임을 구성했고, 그 결과 게임을 자동으로 그릴 수 있었는데

대신 정답 칸의 위치를 전부 하드 코딩으로 때려박게 되었다.

나중에 다른 사람들의 코드를 보니 게임판은 수동으로 그리고 칸의 위치만 쉽게 찾을 수 있게 배열로 관리하는 경우가 많았는데 좀 더 좋은 방법이 있었지 않았을까 하는 아쉬움이 남았다.



스네이크 게임은 처음 봤을때 생각했던 것 보다 고려할게 많았다.

결국에는 뱀의 몸 하나하나를 각자 점 객체로 만들어주고 Snake는 이 점 객체들의 리스트를 관리하는 클래스로 만들어줬다.

그리고 list의 이전 인덱스의 위치를 뒤의 몸이 따라가는 형식으로 뱀의 움직임을 제현하였다.

public bool Move(ConsoleKey _input)
        {
            Clear();
            int nextX = 0;
            int nextY = 0;
            switch (_input)
            {
                case ConsoleKey.UpArrow:
                    nextY--;
                    break;
                case ConsoleKey.DownArrow:
                    nextY++;
                    break;
                case ConsoleKey.LeftArrow:
                    nextX--;
                    break;
                case ConsoleKey.RightArrow:
                    nextX++;
                    break;
                default:
                    return true;
            }

            for (int i = sprites.Count - 1; i > 0; i--)
            {
                sprites[i].X = sprites[i-1].X;
                sprites[i].Y = sprites[i - 1].Y;
            }
            sprites[0].X += nextX;
            sprites[0].Y += nextY;

다른 사람들이 어떻게 한지는 제대로 확인하지 못했는데

개인적으로는 마음에 드는 부분이였다.

그리고 스네이크 게임을 제작하면서 Console창의 끝을 감지하고 커서를 이동하는 등

Console을 다루는 방법들을 배울수 있어서 재미있게 한거같다.



블랙잭 게임은 스네이크 게임에 비해서 엄청 쉽게 만들었다. 전에 카드를 셔플할때 List 2개를 사용해봤었는데

이번에도 Linq를 쓰지않고 그 방식으로 카드를 셔플해 보았다.

그리고 최종적으로 셔플된 덱은 Stack을 사용해서 관리했다.

 public void CardSufffle()
        {
            List<Card> list = new List<Card>(); // 0~ 51까지의 인덱스
            List<int> temp = Enumerable.Range(0, 52).ToList();
            Random rand = new Random();

            for (int i = 0; i < 4; i++)
            {
                for (int j = 1; j <= 13; j++)
                {
                    list.Add(new Card((CardSuit)i, j));
                }
            }
            while (temp.Count > 0)
            {
                int index = rand.Next(0, temp.Count-1); // temp에서 index 번째 요소를 선택
                deck.Push(list[temp[index]]); // temp[index] 번째 카드를 stack 가장 아래에넣는다.
                temp.Remove(temp[index]); // temp의 index 번째 요소를 제거
            }

        }

그런데 나중에 다른분들이 만든 블랙잭 게임을 보니

그냥 텍스트로 구현한 나와 다르게 직접 카드를 string을 이용해서 그려서 하신분들을 보고 대단하다는 생각이 들었다.

그리고 블랙잭 룰에 대해 자세히 알지 못해서 첫 카드를 오픈하지 않는등의 룰 상의 오류가 있어서 아쉬웠다.

그리고 팀원분 중에서 C#은 다 객체로 최대한 분할해야한다! 라는 말씀을 해주셨는데

그런 부분에서 신경쓰지 못했던 것을 깨달을 수 있었고 개인 과제 부터는 신경을 쓰려고했다.



TextRpg게임은 난이도는 블랙잭 보다 쉬웠는데 작성할 텍스트 량이 많아서 귀찮았던 것 같다.

요구사항을 구현하고 밸런스 부분은 신경쓰지않고 끝내버렸다.



마지막으로 금요일에 개인 과제를 발제해주셔서 개인 과제를 시작했다.

필수 요구사항과 선택 요구사항들이 구체적이여서 신경을 좀 써주셨다는 생각이 들었다.

그리고 객체지향을 고려해서 최대한 클래스들을 나누어서 제작을 시작했고

필수 요구사항 대부분을 일단 구현 했으나 아직 수정하지 못한 버그들이 있어서

다음주의 시작은 버그 수정이 될 것 같다.



TextBased_Dungeon_Game

그리고 이번 조의 팀장분이 팀 프로젝트로 유니티로 간단한 사다리게임을 만들어 보자고 하셔서

이번주 일요일부터 진행해보기로 했다.



nbcthumbnail



WIL내일배움캠프스파르타 Share Tweet +1