2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 1 -
※ 게임 만들기 (오목 게임)
- 참고: 비주얼 C++ MFC 쉽게 따라하기, 세진북스 MFC 연구회, 세진북스, 2011
- 규칙 1: 메뉴에 저장 및 불러오기 기능 추가.
① 프로젝트 생성
- 다이얼로그 기반 프로젝트( OMok )를 생성하자.
② 다이얼로그 박스에 메뉴를 추가
- 리소스 뷰(오른쪽 버튼 후 리소스 추가..)에서 리소스(Menu)를 추가하고 확인하자.
③ 다이얼로그 박스에 컨트롤들을 추가
컨트롤
Group Box
Static Box
Button1
Button2
Button4
ID
IDC_STATIC
IDC_STATIC_
COLAL
IDC_BUTT_ST
ART
IDC_BUTT_RE
START
IDC_BUTT_EX
IT
Caption
무슨 색
바둑알이 둘
것인지
시작
재시작
종료
변수이름
m_strColAl
Category
Value
Variable
CString
Messages
BN_CLICKED
BN_CLICKED
BN_CLICKED
함수이름
OnButtStart
OnButtRestart
OnButtExit
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 2 -
- Static Text 컨트롤에 변수 추가하기
․ 변수 형식: CString
․ 범주 : Value
․ 변수 이름: m_strColAl (← 둘 다 소문자 L임)
- Button 처리기 함수 추가하기
․ IDC_BUTT_START : OnButtStart( )
․ IDC_BUTT_RESTART: OnButtRestart( )
․ IDC_BUTT_EXIT : OnButtExit( )
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 3 -
④ 오목판을 출력하는 함수를 만들어보자.
- COMokDlg 클래스에 DrawBack( ) 함수를 등록하자.
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 4 -
⑤ 시작 버튼을 클릭하기 전에 오목판이 그려질 수 있으므로, 이를 막아주는 변수를 추가하자.
- COMokDlg 클래스에 ( BOOL m_bStart ; ) 변수를 등록하자.
⑥ 어플리케이션이 실행할 때 가장 먼저 실행되는 함수는? OnInitDialog( )
- OnInitDialog() 함수에 m_bStart 의 초기값을 설정하자.
- m_bStart 의 초기값이 FALSE 이므로 오목판을 그리지 않는다.
- 시작 버튼을 눌렀을 경우 오목판이 그려져야 하므로 m_bStart 의 값이 TRUE로 변경하는 코드
를 작성하자.
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 5 -
- OnPaint( ) 함수가 호출되면 오목판이 그려지게 되게 할 것이므로 OnPaint( ) 함수에 다음과 같
이 코드를 작성하자.
※ 여기까지 작성한 것을 실행해 보자.
- 어플리케이션을 실행하면 오목판이 생성되지 않아야 한다.
- 시작 버튼을 눌렀을 경우, 오목판이 생성되어야 한다.
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 6 -
⑦ 실제로 바둑알을 오목판에 놓게 되면 어디에 놓이는지 저장되는 변수가 필요하다.
- COMokDlg 클래스에 오목판의 구조상 2차원 배열 변수를 만들고, 이 배열변수를 초기화하는 함
수를 추가하자.
- int m_nBoard[10][10]; ← 2차원 배열 변수(변수형식: int [10][10], 변수이름: m_nBoard)
- void InitBoard( ); ← 배열 변수를 초기화하는 함수
※ 여기서 잠깐.....
- 위에서 만든 2차원배열을 초기화해주는 함수 InitBoard() 함수를 실행하기 위해서는 COMokDlg
클래스의 무슨 함수에 추가를 해주어야 하는가?
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 7 -
- 아래 그림과 같이 2차원배열을 초기화하는 함수를 OnInitDialog() 함수에 추가하자.
⑧ 바둑알을 그려주는 함수를 추가하자.
- void DrawAl( );
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 8 -
- DrawAl( ) 함수를 OnPaint() 함수에 추가하자.
⑨ 현재 검정색 알을 놓이게 할 차례인지, 흰색 알이 놓이게 할 차례인지를 알려주는 변수
를 추가하고, OnInitDialog() 함수에 아래와 같이 코드를 작성하자.
- bool m_bTurn; ← m_bTurn이 FALSE 이면 검정색 알, TRUE 이면 흰색 알
- 시작 버튼을 클릭하면 검정색 알부터 놓이게 할 것이므로 OnButtStart()함수에 코드를 작성하자.
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 9 -
⑩ 왼쪽 마우스 버튼을 클릭하면 오목판에 알을 놓이게 해야하므로, WM_LBUTTONDOWN
메시지에 함수를 만들고 아래와 같이 코드를 작성하자. (ctrl + shift + x)
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 10 -
⑩ 재시작 버튼을 눌렀을 경우, 오목판을 깨끗이 지워야 하므로 아래와 같이 작성하자.
⑪ 종료 버튼을 눌렀을 경우, 코드 작성하기.
※ 여기까지 작성한 것을 실행해 보자.
- 시작 버튼을 눌렀을 때 검정색 알부터 시작하고,
- 재시작 버튼을 눌렀을 경우 화면이 깨끗이 지워져야 함.
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 11 -
⑫ 아래의 그림처럼 Open, Save, Exit 메뉴에 대한 처리기 함수를 추가하자.
- OnFileOpen( ), OnFileSave( ), OnFileExit( )
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 12 -
- OnFileOpen( )
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 13 -
- OnFileSave( )
- OnFileExit( )
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 14 -
※ 최종 테스트를 해보자.
- 초기화면
- 시작 버튼 클릭
- 저장하기 메뉴 클릭 ( 저장하기: 파일명.bor )
- 재시작 버튼 클릭 후 불러오기 메뉴 클릭
2020년 1학기 고급프로그래밍1 (10주차 수업자료 - 1) 박 기 홍
- 15 -