대학교 1학년때 C언어 교수님이 프로그램을 만들어 제출하라해서 만든 프로그램... 조잡하다ㅠㅠ
인공지능보단 여러가지 패턴에 가중치를 설정해서 가중치가 가장 낮은 곳에 돌을 놓는 프로그램이다.
원리?
우선 ai가 가중치가 제일 낮은 곳에 돌을 놓도록 설정한다.
또한, 오목판에 백돌이 하나 존재할 경우 백돌 주위의 가중치는 +1로 설정한다.
0 0 0 0 0
0 1 1 1 0
0 1 ○ 1 0
0 1 1 1 0
0 0 0 0 0
반면 오목판에 흑돌이 하나 존재할 경우 흑돌 주위의 가중치는 -1로 설정한다.
0 0 0 0 0
0 -1 -1 -1 0
0 -1 ● -1 0
0 -1 -1 -1 0
0 0 0 0 0
만약 백돌과 흑돌이 이렇게 존재한다면 가중치는 다음과 같다.
(파란색 부분은 가중치가 서로 상쇄되어 0이 된 부분)
0 0 0 0 0
-1 0 0 1 0
-1 ● ○ 1 0
-1 0 0 1 0
0 0 0 0 0
오목 AI는 가중치가 가장 낮은 3개의 -1중에서 하나를 선택해 백돌을 놓는다.
(필자는 가장 위쪽에 위치한 -1에 백돌을 착수하도록 프로그래밍함)
다음은 흑돌이 오목판에 이렇게 나열되있다고 가정해보자
0 0 0 0 0
-1 -2 -3 -2 -1
-1 ● ● ● -1
-1 -2 -3 -2 -1
0 0 0 0 0
앞서 소개한 2개의 패턴만으로는 ai가 -3의 위치에 돌을 놓게 된다.
하지만 -1의 위치에 돌을 놓지 않으면 진다. 이를 방지하기 위해
흑돌이 3개 연달아 있을 경우 그 양옆의 가중치(그림에서 -1의 위치)를 -50으로 설정한다.
0 0 0 0 0
-1 -2 -3 -2 -1
-50 ● ● ● -50
-1 -2 -3 -2 -1
오목 AI는 가중치가 가장 낮은 2개의 -50중에서 하나를 선택해 백돌을 놓는다.
(필자는 가장 왼쪽에 위치한 -50에 백돌을 착수하도록 프로그래밍함)
이러한 패턴을 응용 추가하여 만든 것이 바로 이것입니다.
무려 2700줄이 넘는 코드입니다. 코드에 비해 프로그램 수준은 매우 떨어집니다..
또한, 코드를 검토하지 않아서 매우 더럽고 보기 어렵습니다.
그냥 참고용으로만 보세요.
이 프로그램을 만들면서 재능이 없음을 실감했습니다 ㅠㅠ
저도 제가 못하는 것은 잘 알고있으니 악플은 삼가해주세요.
ps.최근에 한 초등학생이 학습하는 오목을 만들어 정보올림피아드에서 상을 받았다고 하네요... 열심히 공부해야겠습니다.