본문 바로가기

엑셀 & VBA

2-5. Snake 이동하는 코드 만들기

오른쪽으로 이동하는 코드

 오른쪽으로 이동하는 코드를 먼저 만들어 보겠습니다. 우선 머리의 위치를 알아야 하기 때문에, 변수를 불러오겠습니다. 머리의 좌표를 AA4와 AA5셀에 기록을 해두었기 때문에 변수를 먼저 불러오겠습니다. 머리의 head와 x 좌표의 x 에서 앞 알파벳을 따서 변수를 정의했습니다.

 

hx = Cells(4, 27)

hy = Cells(5, 27)

 

 이동시 사과를 먹게 되면 점수가 올라가야 하므로 점수도 불러오겠습니다.

 

score = Cells(2, 26)

 

 오른쪽으로 이동했음을 알려주기 위해 머리의 좌표 부분에 알파벳 R을 적겠습니다.

 

Cells(hx, hy) = "R"

 

 뱀이 오른쪽으로 이동을 하면 세가지의 경우가 나올 수 있습니다.

1. 사과를 먹을때 - 뱀이 오른쪽으로 이동하고, 길이가 늘어나며, 사과가 다른 위치에 생성 된다.

2. 그냥 이동할때

3. 맵 밖으로 나가거나 자기 자신을 먹을 때 - 죽음

 

 세가지의 경우를 나눠야 하므로 if 문을 사용하겠습니다.

우선 사과를 먹으면, 오른쪽 칸은 진한 녹색으로 바뀌어야 하고, 점수가 1점 올라야하며, 새로운 사과를 생성해야합니다.

 

If Cells(hx, hy + 1).Interior.Color = RGB(255, 0, 0) Then '사과 먹음
    ' 오른쪽을 뱀 색으로 바꾸기
    Cells(hx, hy + 1).Interior.Color = RGB(84, 130, 53)
    ' 점수 1점 올리기
    score = score + 1
    ' 점수 기록
    Cells(2, 26) = score
    ' apple 함수 불러오기
    apple

 

 마지막줄에 apple이라고 적게되면, 2-3에서 정의한 apple 함수를 불러오게 됩니다. apple 함수는 사과를 맵에 랜덤하게 생성했습니다.

 

 오른쪽으로 이동하게 되면, 오른쪽 칸은 초록색으로 바뀌고, 꼬리 부분은 사라져야합니다.

 

ElseIf Cells(hx, hy + 1).Interior.Color = RGB(146, 208, 80) Then ' 오른쪽이 게임판 색일때
    Cells(hx, hy + 1).Interior.Color = RGB(84, 130, 53)
    ' 꼬리 이동하는 함수 불러오기
    tail

 

 마지막 줄에 tail이라고 적었기 때문에, tail 함수가 호출이 될 것입니다. tail 함수는 나중에 만들도록 하겠습니다.

 

 마지막으로 나머지 경우에는 죽기때문에, gameover 함수를 호출하겠습니다. gameover함수도 나중에 만들겠습니다.

 

Else
    gameover
End If

 

 이제 머리의 좌표가 바뀌었으므로, 엑셀 시트에 기록해주겠습니다.

 

Cells(5, 27) = hy + 1

 

 여기까지가 오른쪽으로 이동하는 코드입니다. 상하좌우로 이동하는 코드는 오른쪽으로 이동하는 코드에서 살짝 변형만 해주면, 쉽게 만들 수 있습니다.

 

 

 tail 함수는 꼬리의 위치를 파악하고, 새로운 꼬리 좌표를 기록하는 간단한 함수로 만들겠습니다. 우선 꼬리의 좌표를 불러옵니다.

 

tx = Cells(6, 27)
ty = Cells(7, 27)

 

 이제 꼬리부분을 배경색으로 바꿔줍니다.

 

Cells(tx, ty).Interior.Color = RGB(146, 208, 80)

 

 다음으로 글자를 지우고, 새로운 꼬리의 좌표를 기록하겠습니다.

 

If Cells(tx, ty) = "R" Then
    Cells(tx, ty).ClearContents
    ty = ty + 1
ElseIf Cells(tx, ty) = "L" Then
    Cells(tx, ty).ClearContents
    ty = ty - 1
ElseIf Cells(tx, ty) = "U" Then
    Cells(tx, ty).ClearContents
    tx = tx - 1
ElseIf Cells(tx, ty) = "D" Then
    Cells(tx, ty).ClearContents
    tx = tx + 1
End If

 

 내부 문자가 "R"이면, 다음 꼬리의 좌표는 오른쪽으로 이동하기 때문에, ty = ty + 1이 됩니다. 나머지도 같은 원리입니다.

 

 마지막으로 엑셀 시트에 변수를 기록하면, tail함수는 완성입니다.

 

Cells(6, 27) = tx
Cells(7, 27) = ty