일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 포인터
- 지식나눔강좌
- c
- 함수
- 연산자
- 알고리즘
- Kotlin
- c++
- 리뷰
- doit코틀린프로그래밍
- 백준
- Windows
- CS
- 티스토리
- Tips강좌
- 이지스퍼블리싱
- Tips프로그래밍강좌
- 김성엽
- VS ERROR
- tipssoft
- Javascript
- Desktop
- Visual Studio
- c#
- 문법
- 프로그래밍
- Direct2D
- Win32
- 배열
- Programming
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
지뢰찾기 본문
지뢰찾기
지뢰찾기는 정말 고전 게임이다. 동시에 게임의 기본을 배움에 있어 도움이 될 것 같기도 하다. 구현 또한 그리 어렵다고 느끼지 않기 때문이다.[# 적어도 내가 느끼기엔 그랬다.]
지뢰찾기 룰은 게임상 존재하는 모든 지뢰를 찾아낸다는 점을 제외하고는 잘 몰랐다. 때문에 지뢰찾기를 구현하기에 앞서 게임의 룰을 생각했다.
지뢰찾기 룰
생각한 지뢰찾기는 아래와 같았다. 게임 클리어 조건은 애매모호한 점이 많아서 구글에서 인스턴스 게임으로 제공하는 지뢰찾기 룰을 이용했다.[# 게임은 그렇게 못해서, 클리어 조건을 체크하는데 시간이 좀 걸렸다.]
- 주변 팔방[# 상하좌우 네 방향 및 그 대각선 네 방향]에 지뢰가 존재할 경우 그 수를 세고, 열었을 때 보여준다.
- 주변 팔방에 지뢰가 존재하지 않는경우, 주변 팔방 위치를 함께 연다.
- 지뢰를 클릭하면 죽는다.
- 지뢰로 의심되는 구역은 체크 표시를 한다.
- 게임상 지뢰로 의심되는 모든 구역을 체크했고, 해당 구역을 제외한 부분은 모두 열려있을 때 이긴다.
이정도로 함축할 수 있을것 같다.
구현 기반
사후관리[# 새로운 레벨의 게임 생성같은..?]를 위해 유지/보수가 용이한 코드를 구현해보고자 했다. 다형성을 이용했고, 그리기 영역은 아예 구분지었다.
다음 포스트에서 작성한 프로젝트를 기반으로 한다.
구현의 핵심은 세 부분으로 나눌 수 있을 것 같다.
- 메인 Window
- 그리기
- 맵 데이터
때문에 총 세 파트로 개발 후일담을 작성하지 않을까 싶다. 아직 난이도 선택을 위한 코드, 재시작을 위한 코드는 구현을 안했지만.. 포스트 작성하고 추가 항목으로 작성하다보면 되지 않을까 싶다.
관련 문서
지뢰 찾기 구현과 관련된 포스트가 작성되면 여기에 목록화 한다.
그리기 작업을 위한 Draw.h/Draw.cpp
맵 데이터 관리를 위한 map.h/map.cpp
윈도우 구성
여담
처음 프로젝트를 시작했을 때는 별 생각 없이 같이 공부하는 친구들의 동기부여를 위해 C++로 이런것도 가능하다! 정도로 보여주려고 했던 코드였다. 때문에 이후 보수를 생각하지 않고 작동만 되도록 구현을 했다. 때문에 프로젝트 코드를 보면 레거시 코드가 종종 보일 수 있다.
이 프로젝트를 포스트화 하려고 보니, 기존 코드는 다른 사람이 이해하기도 어렵다고 느낄 뿐더러 내가 설명함에 있어서 대략적으로밖에 설명을 할 수밖에 없는 코드였다.[# 프로토타입을 작성하는 과정이었기 때문에 개발 중간중간마다 더 나은 방법을 생각하다보니 코드가 번잡할 수밖에 없는 것일지도..] 그래서 시리즈 작성을 하기 전에, 기존 코드를 리팩토링을 시도하는 중이다. 아마 시리즈가 발간이 된다면 리팩토링이 끝났거나 막바지가 아닐까 싶다.
# index
'DEV > Direct2D' 카테고리의 다른 글
지뢰찾기 - 맵 데이터 (0) | 2021.07.03 |
---|---|
지뢰찾기 - 그리기 툴 (0) | 2021.07.03 |
물리엔진 - 벽 충돌 part2. 좌우 벽 구현 (0) | 2021.05.14 |
물리엔진 - 좌우 이동 (0) | 2021.05.14 |
물리엔진 - 점프 구현하기 (0) | 2021.05.13 |