Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Tetris Game


테트리스 께임 만들기_4

  • 브록 설계하기|사용자정의변수,배열의 활용

이제 다양한 형태의 브록을 만들어야 한다
다양한 형태의 브록을 만든다고 하는 것은 다양한 브록에 대한
정보를 어떻게 관리할것인가???
라는 문제가 가장 중요하다
단순한 워크시트의 이곳의 정보를 어떻게 계산하여 다른 시트의
어느 장소에 옮겨라!!
라고 한다면
복사하는 시트의 시트정보
복사하는 범위의 범위정보
붙여넣기 할 시트의 시트정보
붙여넣기 할 범위에 대한 정보
그리고 어떤 계산을 하기 위한 임시 변수들에 대한 정보들이 고작이지만
..실은 초보님들은 몇개 안되는 변수에도 억장이 막혀하지만...
테트리스의 아주 작은 브록들은 많은 정보를 관리하기롤 요구한다
그러니 별 쓰잘데 없는 장난감이지만
복잡한 정보의 관리가 필수적인 것이 된다
복잡한 정보를 관리하기 위하여서는 필수적인것이
배열도 필요해지고 사용자정의변수도 필요해지고 좀더 쎄련되게
관리하고 싶다면 크래스모듈도 필요할수도 있고
각자의 프로그래밍기호에 따라서 집합체를 사용할수도 있고
다양한 정보관리 테크닉을 구사하게 된다

크래스모듈은 말만 나와도 대강훓어 보면서.."이것은 나와 관계없지!!"
라고 넘어간다는 이야기들을 많이 하니
이 께임에서는
배열과 사용자정의 변수로 처리하도록 하자

우선 하나의 브록이 갖고 있어야 할 정보가 무엇이 필요할까??
하나의 브록이라고 하면 오브젝트가 연상이 되고 그러면 크래스모듈이
생각나면 좋겠지만....다음에 하도록 하고
사용자정의변수를 만들어서 이곳에 하나의 브록에 필요한 정보를
보관시키도록 해 보자

Private Type Block iCellNum As Integer iCellColor As Integer bFinish As Boolean currentLocation(1 To 4) As CellCordi nextLocation(1 To 4) As CellCordi currentRotation As Integer rotationDatas(1 To 4, 1 To 4) As CellCordi End Type

몇개의 셀로 구성되는 브록인가??..iCellNum
셀들은 어떤 색상으로 할것인가??..iCellColor
브록이 일을 완료한것을 표시하면 좋지 않을까??..bFinish
현재 브록의 위치는 어떻게 할까??..currentLocation(1 To 4)
이것이 좀 복잡해보이지만..머리만 굴리지 말고
종이와 연필을 꺼내서 그려보시기 바란다
음흠..하나의 셀이 갖고 있어야 할 정보는 행번호,열번호가
필수적이겠구나???
맞다..위치 정보(X-Y Cooridination)만 있으면 된다
그래서 currentLocation(1 To 4) As CellCordi
라고 하는 X,Y값만 보관하는 또다른 사용자정의변수타입으로 선언한다
currentLocation(1 To 4)는 하나의 브록을 구성하는 셀의 갯수는
최대 4개로 한다는 소리다
그러니 하나의 셀로 구성될수도 있고..두개의 셀로 구성될수도 있지만
최대 4개의 셀까지로 하도록 하자..
더많이 하고 싶으신 분들은 이것을 확장시키면 될것이고..
이제 현재 위치와 더불어 다음 으로 이동할 정보를 보관하고
있어야 할것이다 nextLocation(1 To 4) As CellCordi
그리고 브록이 회전을 하게 되니까..현재 회전위치에 대한 정보도
필요하게 될 것이다..currentRotaion As Integer
이제 아주 중요한 것..
회전은 모두 4번 이루어진다 시계방향으로 ..
4번 이루어지니까..4개의 위치변경,회전을 위한 정보가
어딘가에 또 보관되어야 한다
rotationDatas(1 To 4,1 To 4) As CellCordi
이차배열이다...어휴 ..징그러..일차도 골치아픈데 2차배열@#$#
그림을 그려보시면서 생각하면 ..
첫번째 회전했을때 위치 변경정보는 어디에??
라고 필요성을 느낀다
그렇다면 첫번째회전했을때..두번째 회전했을때..세번째회전했을때..
라고 하는 1차부분 정보와..
매번회전할때마다 각셀의 위치정보는??!!이라는 요구에
2차부분의 정보가 필요하게 되니..2차배열인것이다
이렇게 콩알만한 브록에 필요한 정보뭉치를 하나 선언하고

콩알만한 것을 그리려도 신경이 쓰이는데...
..나로호발사를 위하여 연구하는 과학자들은 얼마나
골치가 아플까..???
실패는 성공의 발판!!!
더욱 분발하여 또 도전하시기를 기원한다!!
이것을 실패라고 규정짓는 인간은 생전에 무엇을 하나
직접 만들어 본적이 없는 인간들!!!
그냥 목표를 향해 진행하는 과정중의 하나의 이벤트일뿐!!
그리고 더러의 사람들이 실패라는 단어를 사용하는 것일뿐!!

이제 브록타입을 몇개 만들것이냐???
우선 여기에서는 4가지로 간단하게 해보자
그래서
Dim blocks(1 To 4) As Block
즉 위에 선언한 사용자정의 정보타입..(브록)을 4개 배열에 만들어서
께임을 하겠다는 이야기다
물론 10개를 만들수도 있고 100개를 만들수도있고..
여러분 마음대로겠지..
크래스모듈에 능하신 분들은 위와 같은 사용자정의 변수를
크래스모듈로 구현해보셔도 좋을것이다

그럼 각각의 브록을 설계를 하여야 할것이다
어떤 모양으로 할것인지..어떻게 회전할지..회전할때마다
어떻게 위치가 바뀔지..
아래의 그림과 같이 4개의 브록에 대한 설계정보를
담을 상수를 4개 만들어 사용하는 방법도 좋을것이다



다른 모양의 브록이 필요하면
또 위와 같은 형식으로 브록을 설계하면 된다

그리고 께임 버튼을 크릭하는 순간
위의 상수의 정보를 얻어다가 위에 선언한 각각의 배열과 사용자정의변수를
활용하여 초기화 시켜 놓은후(이 작업이 핵심이다)
브록이 나타날때마다 위의 배열에서 필요한 브록을 만들어가면서
께임이 진행 되게 된다

이번 화일에서는 4가지 타입의 브록을 그렸고..
다음화일에서는 좀더 다양한 브록을 추가시켜보자
각자 추가 시켜보시고 기다리는 것이 학습에 도움이 되겠지!!!


tetris_04.