이번주에 배운 내용
-
C# 공부기간 팀 결성
-
C# 기초 강의 수강
-
틱택토 게임
-
스네이크 게임
-
블랙잭 게임
-
Text RPG 게임
-
개인과제 Text RPG 게임 제작 시작
주간 회고
이번 주는 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게임은 난이도는 블랙잭 보다 쉬웠는데 작성할 텍스트 량이 많아서 귀찮았던 것 같다.
요구사항을 구현하고 밸런스 부분은 신경쓰지않고 끝내버렸다.
마지막으로 금요일에 개인 과제를 발제해주셔서 개인 과제를 시작했다.
필수 요구사항과 선택 요구사항들이 구체적이여서 신경을 좀 써주셨다는 생각이 들었다.
그리고 객체지향을 고려해서 최대한 클래스들을 나누어서 제작을 시작했고
필수 요구사항 대부분을 일단 구현 했으나 아직 수정하지 못한 버그들이 있어서
다음주의 시작은 버그 수정이 될 것 같다.
그리고 이번 조의 팀장분이 팀 프로젝트로 유니티로 간단한 사다리게임을 만들어 보자고 하셔서
이번주 일요일부터 진행해보기로 했다.