각각의 셀이 미로가 맞는지, 아니면 아직 미로가 아닌지 구분하기 위해서 2차원 배열을 사용할 것입니다.
우선 이전 강의까지의 코드입니다.
Sub MakeMaze()
worksheets("Sheet2").Select
Dim map_size As Integer
map_size = worksheets("Sheet1").Cells(8,2).value
Range("A1:XFD1048576").ColumnWidth = 1.00
Range("A1:XFD1048576").RowHeight = 10.00
Range(Cells(1,1), Cells(3,3)).ColumnWidth = 0.1
Range(Cells(1,1), Cells(3,3)).RowHeight = 1.0
Rows(map_size+6 & ":" & Rows.Count).EntireRow.Hidden = True
Range(Cells(4,map_size+6), Cells(map_size+5,Columns.Count)).EntireColumn.Hidden = True
End Sub
여기에 2차원 배열 변수를 추가해 봅시다.
Dim maze() As Boolean
위의 코드를 통해 이름은 maze, 타입은 Boolean타입의 동적 배열을 선언해 줍니다.
정적 배열이 아닌 동적 배열을 선언하는 이유는 선언 당시에는 맵의 크기를 알 수 없기 때문입니다. 맵의 크기를 입력은 후에 ReDim으로 배열의 크기를 정해줍시다.
ReDim maze(1 To map_size+2, 1 To map_size+2)
map_size+2 x map_size+2 크기의 maze 배열이 생성되었습니다.(+2는 테두리를 위해서 입니다.)
이젠 미로가 아닌 곳은 False로, 미로인 곳은 True로, 그리고 테두리는 True로 배열값을 초기화해 줍시다. 이때 For 반복문을 이용해 줍니다.
For i=1 To map_size+2
For j=1 To map_size+2
If i = 1 Or j = 1 Or i = map_size+2 Or j = map_size+2 Then
maze(i,j) = True
Else
maze(i,j) = False
End If
Next j
Next i
이를 통해 배열 생성과 초기화를 모두 마쳤습니다.
아래에는 이전 강의와 이번 강의의 내용을 합친 코드입니다.
Sub MakeMaze()
worksheets("Sheet2").Select
Dim map_size As Integer
Dim maze() As Boolean '동적배열 선언
map_size = worksheets("Sheet1").Cells(8,2).value
ReDim maze(1 To map_size+2, 1 To map_size+2) '배열 크기 선언
'배열값 초기화
For i=1 To map_size+2
For j=1 To map_size+2
If i = 1 Or j = 1 Or i = map_size+2 Or j = map_size+2 Then
maze(i,j) = True
Else
maze(i,j) = False
End If
Next j
Next i
Range("A1:XFD1048576").ColumnWidth = 1.00
Range("A1:XFD1048576").RowHeight = 10.00
Range(Cells(1,1), Cells(3,3)).ColumnWidth = 0.1
Range(Cells(1,1), Cells(3,3)).RowHeight = 1.0
Rows(map_size+6 & ":" & Rows.Count).EntireRow.Hidden = True
Range(Cells(4,map_size+6), Cells(map_size+5,Columns.Count)).EntireColumn.Hidden = True
End Sub
'엑셀 vba 게임' 카테고리의 다른 글
엑셀 vba 미로만들기(6) - Hunt And Kill 알고리즘 구현1 (0) | 2020.03.05 |
---|---|
엑셀 vba 미로만들기(5) - 미로 테두리 설정 (0) | 2020.02.29 |
엑셀 vba 미로만들기(3) - 맵 구성하기 (0) | 2020.02.28 |
엑셀 vba 미로만들기(2) - 키보드 이벤트 구성 (0) | 2020.02.27 |
엑셀 vba 미로만들기(1) - Hunt And Kill 알고리즘 설명 (0) | 2020.02.26 |
WRITTEN BY
,