각각의 셀이 미로가 맞는지, 아니면 아직 미로가 아닌지 구분하기 위해서 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

WRITTEN BY
컴공학도

,