엑셀 & VBA

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

yijh0611 2021. 8. 22. 23:22

오른쪽으로 이동하는 코드

 오른쪽으로 이동하는 코드를 먼저 만들어 보겠습니다. 우선 머리의 위치를 알아야 하기 때문에, 변수를 불러오겠습니다. 머리의 좌표를 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