심화반 예제 (오목)

오목을 C++로 구현해 보았습니다.

대학교 과제로 교수님들이 많이 내는  주제입니다.

간단해 보이지만 막상 만들어 보면 그리 간단하지 않습니다.

바둑돌을 바둑판 바깥에 두었을 경우, 바둑판의 교차선위에 돌이 정확하게 놓아져야 하는 문제 등을 잘 해결해야 합니다.




판정처리에 대한 부분은 비교적 쉽습니다.

2차원 배열에서 5개 돌의 연속을 찾아서 처리하면 되지만, 가로, 세로, 대각선 방향의 판정을 모두 고려해서 판정해야 합니다.

심화반 중학생 한명이 오목 판정후 복기 기능까지 넣어서 만든 것을 보고 깜짝 놀랐습니다.

개발 과정을 요약하면 다음과 같습니다.

1. 바둑판을 19X19 크기 2차원 배열로 생성 (각 상태는 빈곳, 흑돌, 백돌 인지 3가지 값을 가짐)

2. 마우스 클릭시 현재 클릭한 화면 좌표가 바둑판의 선이 교차하는 지점에 놓아지도록 가장 가까운 배열의 인덱스를 찾는 알고리즘 구현 (바둑 돌은 바둑판의 클릭 지점에 놓이는 것이 아니라 바둑판 선의 교차점에 놓아져야만 함)

3. 흑돌, 백돌의 순서대로 놓아지도록 상태 저장, 한번 돌을 둔 곳은 다시 돌이 겹칠 수 없도록 체크 필요

4. 돌을 둘 때마다 가로, 세로, 대각선(좌상->우하, 우상->좌하) 방향에 같은 색의 바둑돌이 5개 연속되는지 검사



  • 개발환경 : Microsoft Visual Studio 2015, Windows 10 Pro 64bit
  • 개발언어 : C++, MFC
  • 핵심 적용 기술, 환경 
  1. Device Context, GDI, Double Buffering (깜빡임방지)
  2. SDI (Single Document Interface)
  3. Windows Message (Timer, Mouse)
  4. 2차원 배열 (맵 구현)
  5. 돌을 놓았을때 가장 가까운 바둑판의 교차선에 놓는 문제
  6. 바둑판의 크기 변경(리사이징)
  7. STL (Vector 자료구조)
  • 첨부파일 
  1. 설치파일 (Installshield로 제작된 설치파일, 클릭) 
  2. 소스코드 (C++ 소스코드, rar 압축파일형태, 클릭)
  3. 구글아이디로 로그인하면 다운로드 가능합니다.

댓글

이 블로그의 인기 게시물

Qt Designer 설치하기

C++ 예제 (소켓 서버, 이미지, 파일전송)