● 아래와 같이 대화상자 기반으로 프로젝트(Mine)를 생성하고, 디자인 하시오.
컨트롤 Static Text Button Control Button Control Button Control ID IDC_STATIC IDC_BUTTON_EASY IDC_BUTTON_NORMAL IDC_BUTTON_HARD
Caption 난이도 선택 초급 중급 고급
Event Func.
OnBnClickedButtonEasy ( )
OnBnClickedButtonNormal ( )
OnBnClickedButtonHard ( )
- L버튼 (IDC_BUTTON_EASY) 컨트롤에 대한 이벤트 핸들러 추가하기
- 상기 다이얼로그에서 초급 버튼을 눌렀을 때 새로운 다이얼로그로 띄우기 위해 아 래와 같이 새로운 다이얼로그를 삽입(①)하고 클래스를 추가(②)하자.
(다음 페이지에서 설명)
① 새로운 다이얼로그 삽입
② 추가된 다이얼로그를 컨트롤 할 클래스 추가
- 새로 추가한 다이얼로그에 아래와 같이 디자인하자.
→ Button 컨트롤 추가.
→ Static 컨트롤에 int형으로 m_nTime, m_nMine 변수를 추가.
(주의 변수 추가 시, 새로 만든 다이얼로그의 클래스에 추가해야 함.)
- 메인 다이얼로그(CMineDlg)에서 초급 버튼을 클릭하였을 때 추가한 다이얼로그 (CEasyDlg)를 띄우기 위해 아래와 같이 CMineDlg에 변수를 추가하고 코딩하자.
→ CMineDlg 클래스에 CEasyDlg 클래스의 Easy 변수 추가 → CMineDlg 헤더의 맨 윗줄에 #include “CEasyDlg.h” 추가하기
- 아래와 같이 CMineDlg 클래스의 OnBnClickedButtonEasy( ) 함수에 새로 만든 다이얼 로그 창을 띄우자.
현재까지의 내용을 실행해보자.
※ CEssyDlg 클래스에 변수, 함수, 메시지 추가하기.
● 멤버변수 추가하기
멤버 변수 내용
int Block[10][10] 각 블럭의 상태 (0.기본상태 1.열린상태 2.깃발상태)
int Mine[10][2] 지뢰의 위치를 저장하는 배열
int SelectedBlock[2] 선택된 블럭을 저장하기 위한 배열
bool IsLbtnClicked 좌클릭이 되어있는지 표시하기 위한 변수(주변 열기에 사용)
bool IsStarted 게임이 시작되었는지 나타내기 위한 변수(타이머 설정에 사용)
● 멤버함수 추가하기
멤버 변수 내용
void InitDlg( ) 초기화 함수
void GameOver( ) 게임오버 시 실행할 함수
void Clear( ) 게임클리어 시 실행할 함수
bool ClearCheck( ) 게임이 클리어 되었는지 체크하는 함수
void Open(int x, int y) 블럭을 열기위한 함수
void Flag(int x, int y) 블럭에 깃발을 표시하기 위한 함수
void OpenSurround(int x, int y) 주변열기를 위한 함수
● 메시지 추가하기
메시지 처리기 함수 내용
WM_LBUTTONDOWN OnLButtonDown 좌버튼 클릭
WM_LBUTTONUP OnLButtonUp 좌버튼 놓기
WM_MBUTTONDOWN OnMButtonDown 휠버튼 클릭
WM_RBUTTONDOWN OnRButtonDown 우버튼 클릭
WM_TIMER OnTimer 타이머
- CEasyDlg 클래스에 멤버변수, 멤버함수 등이 추가된 화면 (확인용)
- CEasyDlg 클래스의 DoDataExchange (확인용)
- CEasyDlg 클래스의 메시지 맵 (확인용)
▶ 초기화 함수 구현: void CEasyDlg::InitDlg(void)
▶ 시작 버튼 함수 구현: void CEasyDlg::OnBnClickedButtonStart( )
실행해보자.
▶ 열기 함수 구현: void CEasyDlg::Open( )
다음 페이지에 이이서...
▶ bool CEasyDlg::ClearCheck( )
▶ void CEasyDlg::Clear( )
▶ void CEasyDlg::GameOver( )
▶ 메시지 처리 함수 : void CEasyDlg::OnTimer( )
▶ 메시지 처리 함수 : void CEasyDlg::OnLButtonDown( )
▶ 메시지 처리 함수 : void CEasyDlg::OnLButtonUp( )
현재까지의 내용을 실행해보자. ( 열기 동작이 제대로 동작하는가? )
▶ 깃발 표시 동작 관련 함수 구현: void CEasyDlg::Flag(int x, int y)
▶ 깃발 표시 동작 관련 함수 구현: void CEasyDlg::OpenSurround(int x, int y)
▶ 메시지 처리 함수 : void CEasyDlg::OnMButtonDown( )
▶ 메시지 처리 함수 : void CEasyDlg::OnRButtonDown( )