미니게임 005
제목 : 스네이크
발생한 문제와 해결
1. 인덱스 배열 범위 벗어남

if (nextX < 0 || nextX >= BoardWidth || nextY < 0 || nextY >= BoardHeight)
{
isGameOver = true;
return;
}
▲벽에 부딪혔는지 , 경계 밖으로 나갔는지 확인하는 충돌 판정 추가
2. 그림이 출력 안되는 문제

이거.. 어디서부터 꼬인거지?
▼뱀생성 코드 일부 수정
// 뱀 생성
LinkedListNode<Pos> node = snake.First;
while (node != null)
{
Pos p = node.Value;
// 마지막 노드 확인 ( 머리 / 몸통 구분 )
bool isHead = (node == snake.Last);
if (isHead)
{
board[p.X, p.Y] = Head;
}
else
{
board[p.X, p.Y] = Body;
}
board[p.Y, p.X] = isHead ? Head : Body; // 이거 추가함
node = node.Next;
}
▼매 프레임 갱신해주는 UpdateBoard 메서드 일부 수정
private static void UpdateBoard()
{
// 커서를 0,0 이동시킨 후 화면 덮어씌울 목적
Console.SetCursorPosition(0, 0);
// 전체를 빈 칸으로 채우기
int y = 0;
while (y < BoardHeight)
{
int x = 0;
while (x < BoardWidth)
{
Console.Write(board[y, x]); // 현재 위치에 채우기
x++; // x 좌표 하나씩 이동하면서 채우기
}
Console.WriteLine();
y++; // y 좌표 하나씩 이동하면서 채우기
}
}

▲일단은 출력이 되는 것을 확인
근데 왜 뱀이 두마리나 되지??
3. 화면에 뱀이 두마리가 출력됨
▼뱀 생성 부분에서 코드 일부 수정
// 뱀 생성
LinkedListNode<Pos> node = snake.First;
while (node != null)
{
Pos p = node.Value;
// 마지막 노드 확인 ( 머리 / 몸통 구분 )
bool isHead = (node == snake.Last);
if (isHead)
{
board[p.Y, p.X] = Head;
}
else
{
board[p.Y, p.X] = Body;
}
board[p.Y, p.X] = isHead ? Head : Body;
node = node.Next;
}
- 뱀이 두마리 생성되는 문제가 있었으니 뱀 생성에서 코드를 수정해주자
- 머리만 board[p.X, p.Y] 로 남아있고, 몸통은 board[p.Y, p.X]로 되어있는 상태
- p.X , p.Y 로 되어 있던 부분들의 서순을 하나로 통일해서 바꿔준다
└ p.Y , p.X 로 변경
원인은 배열 인덱스 순서를 X, Y로 반대로 사용해서 거울처럼 뒤집어진 뱀이 중복 출력됨



사람의 좌표계 ( x, y )
- x → 가로축 ( 좌 → 우 )
- y → 세로축 ( 하 → 상 )
- 가로 먼저 , 세로 다음
x , y 순서가 익숙하다
프로그래밍의 2차원 배열
char[,] board = new char[height, width];
이건 실제로 메모리에서는
- 행 ( row , y ) → 첫 번째 인덱스
- 열 ( column , x ) → 두번째 인덱스
순서로 저장된다.
그래서 계속 서순이 바뀐채로 작성하고 있었던 것이 원인이었던 것 같다.
그런데 2차원 배열은 좌표 그 자체가 아니고, [y , x] 로 강제 된 것도 아니다.
내가 배열을 만들 때 내가 생각한 x, y 순으로 작성한게 아니라 반대로 했을 가능성이 높다.
배열을 선언한 순서와 접근하는 순서가 항상 같아야 한다.
내가 좌표를 (x , y) 로 생각한 것과 달리 배열을 [y ,x] 로 선언한 것이 불일치해서 생긴 문제라고 생각한다.
4. 화면 흔들림 현상


▼콘솔 창을 키우는 것으로 해결
static void Main(string[] args)
{
Console.SetWindowSize(120, 40);
Console.SetBufferSize(120, 40);
정상 출력 확인

내가 원했던 화면이 출력되는 것을 확인
개선해야 할 점도 있다
먹이를 먹을 때마다 속도가 조금씩 증가하는 것을 구현하면 좀더 재밌을것 같다.
'📖TIL > 🔥Projects' 카테고리의 다른 글
| 유니티 개인 프로젝트 기획 초안 (0) | 2025.11.12 |
|---|---|
| 프로젝트 진행과정 009 (0) | 2025.10.06 |
| 프로젝트 진행과정 007 (0) | 2025.10.06 |
| 프로젝트 진행과정 006 (0) | 2025.10.05 |
| 프로젝트 진행과정 005 (0) | 2025.10.04 |