F.R.I.D.A.Y.

지뢰찾기 본문

DEV/Direct2D

지뢰찾기

F.R.I.D.A.Y. 2021. 6. 28. 12:42
반응형

 지뢰찾기


 지뢰찾기는 정말 고전 게임이다. 동시에 게임의 기본을 배움에 있어 도움이 될 것 같기도 하다. 구현 또한 그리 어렵다고 느끼지 않기 때문이다.[# 적어도 내가 느끼기엔 그랬다.]

 

 지뢰찾기 룰은 게임상 존재하는 모든 지뢰를 찾아낸다는 점을 제외하고는 잘 몰랐다. 때문에 지뢰찾기를 구현하기에 앞서 게임의 룰을 생각했다.

 

 

지뢰찾기 룰

 생각한 지뢰찾기는 아래와 같았다. 게임 클리어 조건은 애매모호한 점이 많아서 구글에서 인스턴스 게임으로 제공하는 지뢰찾기 룰을 이용했다.[# 게임은 그렇게 못해서, 클리어 조건을 체크하는데 시간이 좀 걸렸다.]

  • 주변 팔방[# 상하좌우 네 방향 및 그 대각선 네 방향]에 지뢰가 존재할 경우 그 수를 세고, 열었을 때 보여준다.
  • 주변 팔방에 지뢰가 존재하지 않는경우, 주변 팔방 위치를 함께 연다.
  • 지뢰를 클릭하면 죽는다.
  • 지뢰로 의심되는 구역은 체크 표시를 한다.
  • 게임상 지뢰로 의심되는 모든 구역을 체크했고, 해당 구역을 제외한 부분은 모두 열려있을 때 이긴다.

 이정도로 함축할 수 있을것 같다.

 

구현 기반

 사후관리[# 새로운 레벨의 게임 생성같은..?]를 위해 유지/보수가 용이한 코드를 구현해보고자 했다. 다형성을 이용했고, 그리기 영역은 아예 구분지었다.

 

 다음 포스트에서 작성한 프로젝트를 기반으로 한다.

 

Win32 BaseWindow Class 생성하기

 지난 시간에 우리는 WinMain 함수와 WindowProc 함수를 생성하고 Windows Hello의 사진 암호와 비슷하게 작동하는 프로그램을 만들어 봤습니다.  프로그램은 비단 하나의 윈도우만을 가지고 있지는 않

pang2h.tistory.com

 

 구현의 핵심은 세 부분으로 나눌 수 있을 것 같다.

  • 메인 Window
  • 그리기
  • 맵 데이터

 때문에 총 세 파트로 개발 후일담을 작성하지 않을까 싶다. 아직 난이도 선택을 위한 코드, 재시작을 위한 코드는 구현을 안했지만.. 포스트 작성하고 추가 항목으로 작성하다보면 되지 않을까 싶다.

 

 

관련 문서

 지뢰 찾기 구현과 관련된 포스트가 작성되면 여기에 목록화 한다.

 

그리기 작업을 위한 Draw.h/Draw.cpp

 

지뢰찾기 - 그리기 툴

 지뢰찾기 그래픽 처리를 위한 구성 그리기 작업  GUI 프로그래밍을 위해서 그리기 툴을 구성해봤다. 그리고, 해당 그리기 툴을 다른 곳에서도 이어서 사용할 수 있도록 그리기 정보를 담고 있

pang2h.tistory.com

 

맵 데이터 관리를 위한 map.h/map.cpp

 

지뢰찾기 - 맵 데이터

 지뢰찾기의 각종 정보를 저장하고 관리하는 맵데이터 맵 데이터  지뢰찾기를 구성하려면 블럭이 열린 상태인지, 선택된 상태인지, 열리지 않은 상태인지를 저장하는 공간과 함께 해당 요소가

pang2h.tistory.com

 

윈도우 구성

 

지뢰찾기 - 윈도우 구성

 실제 기능 구현 윈도우 생성  이전 두 개의 포스트를 통해 그리기 작업과, 맵데이터 관리/처리는 해결했다. 이제, 그래픽 작업과 맵데이터를 작동시키기 위한 메인 윈도우를 구성하자. 멤버  

pang2h.tistory.com

 


여담

 처음 프로젝트를 시작했을 때는 별 생각 없이 같이 공부하는 친구들의 동기부여를 위해 C++로 이런것도 가능하다! 정도로 보여주려고 했던 코드였다. 때문에 이후 보수를 생각하지 않고 작동만 되도록 구현을 했다. 때문에 프로젝트 코드를 보면 레거시 코드가 종종 보일 수 있다.

 이 프로젝트를 포스트화 하려고 보니, 기존 코드는 다른 사람이 이해하기도 어렵다고 느낄 뿐더러 내가 설명함에 있어서 대략적으로밖에 설명을 할 수밖에 없는 코드였다.[# 프로토타입을 작성하는 과정이었기 때문에 개발 중간중간마다 더 나은 방법을 생각하다보니 코드가 번잡할 수밖에 없는 것일지도..] 그래서 시리즈 작성을 하기 전에, 기존 코드를 리팩토링을 시도하는 중이다. 아마 시리즈가 발간이 된다면 리팩토링이 끝났거나 막바지가 아닐까 싶다.

 

# index

728x90
반응형

'DEV > Direct2D' 카테고리의 다른 글

지뢰찾기 - 맵 데이터  (0) 2021.07.03
지뢰찾기 - 그리기 툴  (0) 2021.07.03
물리엔진 - 벽 충돌 part2. 좌우 벽 구현  (0) 2021.05.14
물리엔진 - 좌우 이동  (0) 2021.05.14
물리엔진 - 점프 구현하기  (0) 2021.05.13
Comments