C# 콘솔 - Snake 게임 만들기
C# 문법 종합반 3주차 강의를 듣고 3주차 과제를 만들었다.
클래스와 변수명 등은 과제의 샘플코드를 참고했다.
각 변수를 움직이게 하는 주요 로직에 대해 계속 공부했다. (함수 해석하기)
Snake (뱀과 먹이 게임)
Problem 1
<문제 상황>
게임 시작 시 뱀이 움직이지 않고 바로 GAME OVER 되는 현상
<문제 해결>
원인은 Snake 메서드의 Direction 설정 오류이다.
// Snake.cs
public class Snake
{
public List<Point> body;
public Direction direction;
public Snake(Point tail, int length, Direction _direction)
{
direction = _direction;
body = new List<Point>();
for (int i = 0; i < length; i++)
{
Point p = new Point(tail.x, tail.y, '*');
body.Add(p);
tail.x += 1;
}
}
...
처음에 Direction 메서드를 direction 으로 생성했기 때문에 Snake 메서드에 direction을 바로 사용했지만,
direction 자체는 움직이지 않는 값이므로 정지 상태에서 게임이 종료되었다.
Snake 메서드의 Direction의 경우 고정값이 아닌 계속해서 움직이는 값이기 때문에
Snake 메서드를 만들 때 Direction 자리에 _direction 을 넣고
direction 변수를 _direction으로 새로 정의해주는 것이 필요하다.
Problem 2
<문제 상황>
뱀이 먹이를 먹어도 이동 속도가 일정함
(먹이를 먹을 때마다 뱀의 속도가 빨라져야 한다.)
<문제 해결>
class Program1
{
static void Main(string[] args)
{
int gameSpeed = 100;
...
// 뱀 먹이 먹음
if (snake.Eat(food))
{
foodCount++;
food.Draw();
food = foodCreator.CreateFood();
food.Draw();
if (gameSpeed > 10)
{
gameSpeed -= 10;
}
}
// 뱀 먹이 안 먹음
else
{
snake.Move();
}
Thread.Sleep(gameSpeed);
...
gameSpeed 변수를 만들고 Thread.Sleep(gameSpeed) 를 이용해 뱀의 이동속도를 조절할 수 있다.
Thread.Sleep() 은 특정 시간만큼 스레드를 일시 정지 시킨다. (밀리초 단위)
1000 이면 1초만큼, 100이면 0.1초만큼 지연된다.
따라서 int gameSpeed 를 100으로 설정하고,
gameSpeed > 10 이라면 먹이를 하나 먹을 때마다 gameSpeed 를 10 씩 감소시킴으로써
뱀의 이동속도를 빠르게 만들 수 있다.
C# 문법 복습
$ 기호를 사용하는 이유
$ 기호를 이용해 문자열 안에 {변수}를 넣을 수 있다.
string test = "Test";
// +를 사용할 경우
Console.WriteLine("This is " + test + " Script.");
// string.Format을 사용할 경우
Console.WriteLine(string.Format("This is {0} Script.", test));
// $를 사용할 경우
Console.WriteLine($"This is {test} Script.");
오늘의 회고
오늘은 클래스와 객체, 상속과 다형성에 대해 배웠다.
과제를 제출해야 하는데, 맨땅에 헤딩하는 것은 내 학습 상태 상 시간적으로 어려움이 있을 것 같았다.
과제에서 주어진 샘플코드를 활용해 클래스와 변수에 대한 흐름을 보고 따라 제작했다.
메서드 쓰고 불러오고 하는 게 아직 익숙하지 않다.
팀 단위로 진도를 맞추는 것이 좋기 때문에, 짧은 시간 안에 배운 내용을 복습하고 게임을 만들어야했다.
그래서 막히는 부분은 문제 풀이를 보면서 참고하고 따라하면서 우선 코드에 익숙해지는 것을 목표로 했다.
이론을 먼저 이해하고 혼자 풀어가는 방식보다는
먼저 부딪혀서 풀어보고 숙달하면서 이론을 익히는 방식이 나와 더 잘 맞는 느낌이다.
과제의 늪에서 살아남기 위해 계속 분투했던 하루였다.
내일도 힘내보자!