Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

I'm FanJae.

[C# 리마인드] 콘솔 스네이크 게임 만들기 본문

Unity/Unity 초격차캠프

[C# 리마인드] 콘솔 스네이크 게임 만들기

FanJae 2026. 5. 3. 16:03

1. 시작에 앞서

꽤 긴 연휴 기간이었다. 

수업이 있는 5월 4일. 이전까지 도전해 볼 만한 것이 무엇이 있을까 생각하다가 스네이크 게임을 구현하기로 했다.

 

수업 진도상 클래스를 이제 막 다루기 시작했지만,

이전에 C++을 했던 경험도 있고, Unity도 다룬 적이 있기에 큰 무리는 없었다.

 

 

2. 주요 클래스 설명

1) 스네이크

- 스네이크는 자신의 몸 정보와 자신이 현재 이동 중인 방향 정보를 가진다.

- 자신의 몸 좌표 값 정보, 이동 중인 방향 교체, 다음에 뱀의 머리가 가는 위치 등의 메서드를 제공하도록 처리하였다.

- 이동 관련 메서드는 기본적으로 앞쪽 머리를 추가, 뒷쪽 꼬리를 삭제하는 방식으로 처리하였다.

- 먹이를 먹었으면, 뒷쪽 꼬리가 삭제되지 않는 방식으로 길이가 늘어나는 방식이다.

 

2) Node & MyList

- C#에서 List를 제공하지만, 연결 리스트의 구현을 연습하기 위해서 직접 만들었다.

- 맨 앞쪽 데이터 추가, 맨 뒷쪽 데이터 삭제 방식으로 처리하였다.

 

3) Board

- 게임 보드판이다. 자신의 보드판과 행,열 크기, 먹이 위치 랜덤 출력을 위한 Random 클래스, 상하좌우 머리값에 따른 출력표 정보를 가지고 있다.

- 게임 보드판 내 있는 벽,먹이,스네이크의 몸체 정보를 확인 가능하다.

- 게임 보드판을 출력하는 기능과 먹이를 만드는 함수도 이곳에 있는데 이는 분리할 여지도 있다.

 

4) Game

- GameManager로, gameBoard 객체와 Snake 객체의 정보를 가지고 있다.

- 입력이 있는 경우 Snake에게 방향 조정을 요청하고, 게임 관련 정보를 Board에서 받아와 처리를 진행하는 방식으로 처리하였다.

 

3.  클래스 다이어그램 (주요 기능 관점)

- 주요 기능 관점으로 보면, 다음과 같은 형태로 이뤄져있다.

- Game에 대해 Board와 Snake는 has-a 관계이며, Snake는 MyList와 has-a 관계이다.

 

4. C# Source Code

https://github.com/fanjae/SnakeGame

 

GitHub - fanjae/SnakeGame: C# 콘솔 기반 스네이크 게임 구현

C# 콘솔 기반 스네이크 게임 구현. Contribute to fanjae/SnakeGame development by creating an account on GitHub.

github.com

 

5. 플레이 화면

6. 회고

역할별로 클래스를 나누고 각 객체에게 기능을 맡기기 위해 분리를 많이 하였다.
다만, 아직도 리팩토링할 여지가 많이 있는 코드인 것 같다.

클래스를 나누는 것도 중요하지만, '각 클래스가 무엇을 몰라도 되는가'에 대한 고민을 더 많이 해야할 것 같다.

 

 

 

Comments