일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 이지스퍼블리싱
- Programming
- 지식나눔강좌
- c#
- Visual Studio
- 리뷰
- 문법
- c++
- Windows
- Javascript
- Tips강좌
- Desktop
- tipssoft
- 프로그래밍
- 배열
- 김성엽
- CS
- Direct2D
- Win32
- Kotlin
- 백준
- 알고리즘
- 포인터
- Tips프로그래밍강좌
- c
- 티스토리
- VS ERROR
- 함수
- 연산자
- doit코틀린프로그래밍
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
지뢰찾기 - 맵 데이터 본문
지뢰찾기의 각종 정보를 저장하고 관리하는 맵데이터
맵 데이터
지뢰찾기를 구성하려면 블럭이 열린 상태인지, 선택된 상태인지, 열리지 않은 상태인지를 저장하는 공간과 함께 해당 요소가 지뢰로 동작하도록 처리가 되었는지 저장하는 상태 정보 저장용 블럭이 필요하다.
Block
지뢰 찾기를 구성할 때 각 셀의 정보를 저장하기 위해 구현한 클래스이다.
Block 클래스에서 관리해야할 항목은 총 세가지이다.
- 블럭의 지뢰 활성화 여부
- 블럭의 공개 상태
- 블럭 주변의 지뢰 수
마지막 항목인 주변 지뢰 수의 경우에는 굳이 관리를 하지 않아도 상관은 없지만, 일단 한번에 처리를 해야 나중에 연산을 줄일 수 있기 때문에 처리를 했다.
포함 멤버
위에서 설명한 데이터를 관리하기 위해 총 세 개의 멤버로 구성되어 있다.
- BLOCK_STATE state
- bool _isBomb
- size_t aroundBomb
이중 BLOCK_STATE는 <Block>클래스의 inner enum class로 구성되어있다. 총 세 개의 항목으로 구성되어 있으며, CLOSED, PICKED, OPENED로 관리된다.
포함 메서드
총 여섯 개의 메서드가 존재한다.
IncAroundBomb()
주변부의 지뢰 활성화시 aroundBomb 멤버의 값을 1 증가시킨다.
GetAroundBomb()
해당 블럭 주변의 지뢰 수를 반환환다.
isBomb()
해당 블럭이 지뢰로 활성화되었는지를 반환한다.
SetBomb(bool)
해당 블럭을 인자값에 맞추어 지뢰 활성화 여부를 설정한다.
SetState(BLOCK_STATE)
해당 블럭의 블럭 공개 상태를 설정한다.
GetState()
해당 블럭의 블럭 공개 상태를 저장한다.
IMap
<Block>데이터를 관리하기 위한 구조이다. 기본적으로 Block 데이터를 이차원 배열 형태로 저장하며, 초기 맵 구성 및 삭제를 모두 IMap에서 관리한다.
생성자
IMap의 생성자는 총 세 개의 인자를 받는다.
IMap(D2D1_SIZE_U size, size_t bombCount, D2D1_SIZE_F blockSize);
첫 번째 인자는 맵의 width와 height를 담당하며, 이 값으로 블럭의 수가 결정된다. 두 번째 인자 bombCount는 전체 블럭에서 몇개의 블럭이나 지뢰로 활성화할것인지를 설정한다. 마지막으로 블럭을 그릴 때 각 블럭의 width값과 height값을 받는다. 사실 이건 블럭의 크기를 일정하게 관리하기 위해 만든 것이라서 추후에 블럭의 크기 조정을 할 것이 아니라면 굳이 만들지 않아도 되는 인자였다.
메서드
여기에서는 주요 메서드만 설명한다.
isClear()
해당 맵 데이터에서 지뢰를 모두 찾은 경우(모든 지뢰 공개 상태가 PICKED가 되어있으면서 다른 Block 데이터는 더이상 OPENED로 설정할 수 없을 때 true를 반환한다. 즉, 게임이 끝났는지를 이 메서드가 관리한다.
파생 클래스
IMap은 그 자체로 객체를 생성할 수 있지만, 난이도를 좀 더 명시적으로 하기 위해 네 개의 난이도 구분이 되어있는 클래스를 추가로 구현했다.
- MapEasy
- MapNormal
- MapHard
- MapHell
소스코드
# index
'DEV > Direct2D' 카테고리의 다른 글
지뢰찾기 - 윈도우 구성 (0) | 2021.07.07 |
---|---|
지뢰찾기 - 그리기 툴 (0) | 2021.07.03 |
지뢰찾기 (0) | 2021.06.28 |
물리엔진 - 벽 충돌 part2. 좌우 벽 구현 (0) | 2021.05.14 |
물리엔진 - 좌우 이동 (0) | 2021.05.14 |