1. 작품 개요 작품 최종 보고서 1-1. 작품 제목 네트워크 AI 오목 1-2. 개발의 목적 게임은 이제 컴퓨터로 할수 있는 일중에 중요한 부분을 차지 하였다. 초기 게임은 컴퓨터와의 대결로 진행 되었는데, 이때 컴퓨터의 AI는 게임의 재미를 결정하는 중요한요소가 되었다. 이후 컴퓨터의 AI는 점점더 발달하고 있으며, 지금은 사람과의 게임과 컴퓨터와의 게임이 거의 같은 수준이 되어 가고 있다. 앞으로도 AI는 계속 진화를 거듭할것이다. 또한 이제는 혼자서 하는 게임이 Network의 발달로 Online상의 다른사람과 즐거운 시간을 가질수 있게 되었다. 인터넷이 고속으로 발달하고 있으며, 기존에 가능하지 못했던 많은게임이 인터넷으로 연결하여 게임을 즐길수 있게 제공하고 있으며, 앞으로의 게임에 Network의 기능은 반듯이 필요한 기능이 되었다. 이에 본개발은 AI의 연구 및 network를 이용한 간단한 게임을 찾게 되었으며, 여러 가지 검토 하여 결국 오목으로 결정하였으며, 오목에 대한 AI와 채팅 및 net대전이 가능한 프로그램을 만들게 되었다. 1-3. 개발 기간 및 일정 개발기간 : 2008년 4월 1일 ~ 5월 31일 (9주간) 서울디지털대학교 / 컴퓨터공학부
1-4. 개발의 범위 및 제한점 O 오목의 룰은 기본 33 금지 룰만 적용 시키며, 5개를 완전히 만들지 않아도, 43이나 44의 조건만으로 승리를 가질수 있다. O 인공지능은 상대의 경우수와 자신의 경우수를 비교분석하여 최적의 위치를 계산해 낸다. O Network의 Client와 Server를 하나의 프로그램으로 구현하며, 상대 IP로 접속하는 컴이 Client가 되고 접속 메시지를 받은 컴이 서버가 되어서 게임을 진행하게 된다. 2인만 접속이 가능하므로 현재 프로그램에 Net상의 참관자는 없다. O 오목두는 적절한 효과음과 승리 및 패배 시의 효과음 wav로 구현했으며, 배경음악을 MIDI로 사용하려 했으나, 개발 기간의 축소로 기능삭제한다. O 게임중 채팅기능을 위한 채팅창이 있고, 이창을 이용하여 각종 메시지를 표시한다. 2. 개발 방법 2-1. 개발 도구 및 개발 환경 O 개발 Platform : 일반 IBM 호환 PC O 개발 OS : WindowsXP O 개발도구: Microsoft Visual studio 2005, Photoshop O 개발언어 : C++ O PC 환경 : 해상도 1024*768 이상, RAM 512MB 이상, Color 모니터 비교하여 가정 높은 점수를 얻을수 있는 곳을 선정한다. 만약 같은점수의 자리가 2개 이상 나오면, 랜덤으로 결정한다. O 훈수 기본적인 인공지능을 이용해서 훈수 기능 추가하였다. 사용자는 언제든지 자기 차례에서 훈수기능을 사용하면, 컴퓨터의 인공지능이 추천하는 곳을 볼수 있다. O 바둑판 바둑판 및 바둑돌 그림은 따로 제작하여야 하나, 본 프로젝트는 인터넷을 통해서 구하였으며, resource로 프로젝트에 추가한다. 이를 바둑판의 상태가 갱신될때 실시간 다이얼로그에 다시 그린다. O Network Server 및 Client의 기능들을 멤버로 하는 Chat Class를 생성한다. 기본적인 채팅기능으로 문자열 통신을 하게 된다. 이때 문자열 앞에 4개의 글자를 콘트롤 문자로 삽입하여, 채팅 메시지 및 바둑판 상황, 제어 신호 등을 구별할수 있다. 기본적인 2인 게임은 서버측에서 게임의 시작 및 끝등 모든 분석을 하며, 클라이언트는 서버의 지시를 받아서 행동하게 된다. O Dialog Control 전체 프로젝트 Class에 각 콘트롤의 멤버함수를 추가하여 프로그램에서 멤버함수로 불러 하용하도록 구성한다. O 효과음 효과음 wav 파일과 배경음악 midi 파일을 제작하거나, 인터넷을 통하여 적절한 데이터를 구한다, 그리고 winmm.lib를 연결 시켜서 간단한 api를 통하여 구현한다. 2-2. 설계 방법 O 인공지능 기본적으로 오목과 관련된 인공지능만을 위한 Class를 하나 생성한다. 가장 기본적인 멤머함수는 오목의 기본인 가로,세로,대각선의 상태를 체크하는 함수이고, 이에 여기에 가중치를 부여하고, 그 점수를
3. 작품 설명 3-1. 시스템 개요 O 시스템 구성: 필요한 PC 사양은 IBM 호환 개인용 PC 이며 Network연결을 위한 인터넷이나 허브가 필요 하다. 1인 게임을 즐길 경우 PC 한 대로도 충분이 즐길수 있으며, Net 대전을 원할 경우 컴퓨터 2대를 인터넷 연결 또는 내부 Hub를 이용한 Lan 연결 또는 Cross Cable로 직접연결하여 게임을 즐길 수 있다. 3-2. Process 설계 완성된 작품에 탑재된 특수한 기능은 다음과 같다. O 오목 인공지능 1 : 배열에 저장된 바둑알을 분석하여 Open된 2,3,4,5 및 막힌 2,3,4,5등 여러 가지 상황을 점수로 계산한다. 2 : 바둑판에 가로, 세로, 대각선의 모든 경우의 수를 한번씩 배열에 넣어서 1번의 함수를 호출하여 점수를 기록한다. 3 : 바둑판에 빈곳을 찾아서 이곳에 임의로 바둑알을 둔것처럼 하고 2번 함수를 호출하여 점수를 기록 한다. 4 : 3번 전체중에 높은 점수를 기록하는곳 10곳을 찾는다. 5 : 상대의 바둑돌도 4번호출하여 체크하고, 자신의 바둑돌도 4번 호출하여 두어보고 가장 점수가 높은 곳에 먼저 선택하게 된다. 이때 점수가 같은 곳이 생기게 되는데 이럴때는 Random으로 골라서 사용하게 된다. 4 : 게임이 시작되면, 채팅 메시지 말고 여러 가지 게임 상황도 채팅 메시지로 보내게 된다. 이런 여러 메시지를 구별하기 위하여 다음과 같은 문자를 메시지 앞에 실어 보내게 된다. "MESS" : 채팅 메시지에 실어 보낸다. "DATA" : 바둑판의 상황을 상대에게 전달한다. "CURR" : 최근에 놓은 바둑돌의 위치를 전달 한다. "COMD" : 여러 가지 제어 명령들을 보낸다. 이중에서 Command 명령인 "COMD"는 세분화된 여러명령이 있으며, 그 명령들은 다음과 같다. "접속성공" : 서버가 클라이언트에게 보내는 접속 성공 메시지 "시작요청" : 클라이언트가 서버에게 시작 요청메시지 (시작은 서버만이 할수 있다.) "시작흑", "시작백" : 서버가 클라이언트에게 시작을 알려며, 클라이언트에게 바둑돌의 색을알려 준다. "무승부", "니가승리", "니가패배" : 서버가 게임의 종료 상황을 클라이언트에게 전송하여, 승패 및 무승부 여부를 알린다. "기권승", "기권패" : 서버나 클라이언트는 언제든 기권할수 있으며, 기권 버턴을 누르면 기권요청하게 되며, 서버는 최종 결정을 하여 클라이언트에게 승패여부를 전송하여 알린다. "종료함다" : 서버든 클라이언트든 프로그램을 종료 하게 되면 이 메시지를 상대에게 전송하고 종료한다. 이때 메시지를 받은측은 처음의 대기상태로 돌아가게 된다. O 효과음 기본적으로 winmm.lib를 링크 시킨후 아래의 명령을 실행 시켜 사운드 출력한다. PlaySound ("res stone01.wav", NULL, SND_ASYNC); 처음 프로그램 대기시엔 힙합 음악을 Loop로 연속 Play 하고, 그 외에는 한번씩 효과음을 출력한다. 효과음은. res 폴더에 넣어 놓는다. O 훈수 훈수는 항상 게임중이며, 또한 자신의 Turn일때먼 유효 하다. 훈수는 위의 인공지능 Process를 거쳐 나오는 최적의 곳을 사용자에게 잠시 바둑판위에 놓어 보여 주고, 다시 대기 화면으로 돌아 간다. O Network 채팅 및 제어 1 : 프로그램 안에는 Server Class와 Client Class를 동시에 가지고 있다. 2 : 서버는 언제든 Client에서의 접속 메시지를 받을 수 있으며, 메시지를 받게 되면 서버와 클라이언트 역할을 정하게 된다. 3 : 접속이 되면 기본적인 채팅이 가능하며, 채팅명 창에 있는 이름으로 메시지를 서로에게 보내게 된다. 채팅명을 정하지 않으면, 서버 와 클라이언트 로 자동 할당 한다.
3-3. 화면 설계 My IP : 현재 내 컴퓨터의 IP를 표시 (이것을 상대에게 알려 주어야 접속된다) 위 입력된 IP로 접속 버턴 : IP 입력 창과 같이 사용되며, 클라이언트에서 서버 IP로 접속할 때 사용하는 버턴 대화명 입력창 : 대화명을 입력해 놓으면, 채팅시 메시지 앞에 대화면 : 이 자동으로 추가되어 전송 되어 진다. 만약 대화명 입력이 없으면, 서버 와 클라이언트 로 자동 할당 된다. 그리고 바둑판 밑에는 채팅 입력창과 채팅 메시지 표시 창이 있다. 이 채팅 메시지표시창은 또한 여러 가지 정보가 같이 표시 된다. 게임의 시작 및 승패 그리고 Net 상태등등을 표시 한다. 3-5. 컴포넌트 설계 클래스는 기본적으로 4개의 클래스를 사용한다. SOCKET을 기본 클래스로한 SocCom과 SocServer 클래스 2개의 클래스로 서버와 클라이언트 통신을 담당한다. 또한 기본 클래스인 SDU_OmokDlg는 전체적인 프로그램의 동작을 모두 담당하며, SDU_OmokAI 클래스는 바둑판의 상황을 분석하여 최적의 위치를 구해내는 기능으로 사용한다. 4. 작품 설치 방법 화면의 설계는 기본적인 바둑판이 보이고 오른쪽 상단부터 다음과 같은 정보를 표시 한다. 내 오목알의 그림 및 승패 표시 현재의 프로그램 동작 상태 : READY, VS COM, VS NET 본게임의 상태 : READY, DO, WAIT, YOU WIN, YOU LOSE, DRAW 시작 버턴 : 게임의 시작 훈수 버턴 : 컴퓨터의 도움을 받고자 할때 사용 기권 버턴 : 게임을 기권하고 그만하고자 할때 사용 종료 버턴 : 프로그램을 종료 할때 사용 (게임중엔 종료 안됨) 작품의 설치는 기본적으로 installer를 만들지 않았으므로, 모든 데이터를 한 개의 압축화일로 제공할 예정이고, 사용자가 압축화일을 원하는 폴더에 풀어놓으면 자동으로 실행 파일과 resource화일이 자리를 잡고 실행만 하면 된다. PC는 인터넷이 연결되는 환경이면 인터넷 연결선이 2개, PC가 두 대, 그리고 두 대의 PC에 위 프로그램을 각각 설치 해놓으면 된다. 만약 인터넷이 안되는 환경이면, hub가 한 개 필요 하며 서로의 랜선을 hub에 연결하고, IP각 각각 다르게 설정하면 된다.
5. 작품의 사용법 기본적으로 오목의 룰을 알고 있어야 본 게임을 즐길수 있다. 오목의 기본은 바둑판상에 가로,세로,대각선으로 5개의 바둑알을 상대보다 먼저 일렬로 만들면 승리하는 게임이다. 검은돌이 먼저 시작하게 되며, 승리시에는 다음판에는 흰돌로 경기하며, 먼저하는 검은돌이 약간 유리하다. 또한 3x3룰이 있는데, 이것은 3이 2개가 되는 곳에 놓는것을 금지하는 룰로, 만약 금지 하지 않으면, 그곳에 놓는 것으로 게임을 승리 할수 있다. 본 게임 에서는 일렬로 된 3이나 한칸 건너 3도 모두 3x3으로 보고 금지 한다. 훈수 버턴은 1인용일때와 마찬가지로 자기 차례일때 누르게 되면 최적을 자리를 알려 준다. 게임중에 프로그램은 종료 할수 없으며, 기권 버턴을 눌러서 기권을 한후 종료시켜야 한다. 이때 상대방은 종료메시지를 받고 처음 대기 상태로 돌아 간다. 그럼 프로그램의 사용법을 설명 한다. 본 프로그램은 일인용 게임과 NET을 통한 2인용 게임을 지원한다. 먼저 일인용 게임의 사용법이다. 기본적으로 NET으로 연결되지 않은 상태에서 시작 버턴을 누르면 일인용 게임을 즐길수 있다. 우측상단에 자신의 바둑돌을 보고 그에 맞게 게임을 즐기면 된다. 만약 누군가의 도움을 받고 싶으면 훈수 버턴을 누르면, 컴퓨터가 당신의 상황중에 추천할 만한 위치를 알려 주게 된다. 또한 중간에 게임을 그만하고 싶으면, 기권 버턴을 눌러서 해당 게임을 기권해야 하며, 그 이후 종료(취소) 버턴이나 ESC키를 눌러서 프로그램을 종료 하면 된다. 두 번째로 NET을 이용한 2인용 게임을 설명한다. LAN으로 연결된 2대의 PC에 프로그램을 동시에 실행시킨 상태에서 한곳에서 다른곳의 IP를 입력하여 위 입력된 IP로 접속 버턴을 누르게 되면 그프로그램은 클라잉언트, 입력된 IP의 컴퓨터는 서버의 역할로 서로 NET으로 연결된다. 이때 서버는 상대에게 MY IP에 나오는 IP 번호를 알려 주어야 한다. 이렇게 연결되면 기본적으로 채팅이 가능하며, 대화명 창에 입력된 이름으로 상대에게 메시지가 전달된다. 채팅하다가 어디든 시작 버턴을 누르면 게임이 시작되며, 서버측에서 먼저 검은돌로 시작하며, 그 이후에는 승자가 백, 패자가 흑을 가지게 된다.
부록 A. 완성된 프로그램의 실행 모습 - 게임을 바로 시작하면 컴과의 1인 게임이 시작 됩니다. 훈수 기능은 게임의 언제 든지 자기 차례에 버턴을 누르면 컴이 추천하는 자리를 볼수 있습니다. - 클라이언트에서 서버로 접속요청후 성공한 모습
- 서버의 화면으로 클라이언트 측에서 접속요청이 들어와서 수락하고 연결한 모습 - 서버와 클라이언트의 채팅 모습
- 채팅후 시작 버턴을 눌러서 게임을 시작하여, 서버 측에서 흑으로 선택되고 DO 메시지로 자기 차례를 알림 - 게임후 백을 가진 클라이언트가 게임에서 승리한 모습 승리시엔 박수소리와 함께 YOU WIN 메시지 보여주고, 승패의 성적도 보여준다.
- 게임중 기권하려 할때 기권 버턴을 누르면 자동으로 기권패가 되며, 또한 상대에게는 기권승으로 나타난다. - 오목게임의 기본룰인 3x3의 금지가 되어 있으며, 3x3의 자리에 두려 하면 아래와 같은 금지 정보가 나오며 바둑돌은 취소되며 다시 다른곳에 두어야 한다.
- 프로그램을 종료 하려 한다면, 취소나 ESC키를 누르면 되는데 만약 현재 경기중이면 게임을 마치고 프로그램을 중단할수 있다. 경기를 마치든지, 아니면 기권을 하고 프로그램을 해야 한다. 이는 NET 게임중에 상대가 이상한 상황으로 빠지는것을 막아주기 위함 이다. - 만약 NET 경기중 상대가 기권하고 프로그램을 종료한다면, 경기 종료 메시지가 날라오고 서버 및 클라이언트의 연결을 해제하고 초기 상태로 대기 하게 된다.