일반 렌주룰 기반으로
돌을 놓을 위치를 입력으로 받음 x, y 좌표
1. 이미 돌이 놓여져 있으면 에러
2. 15 * 15 오목판을 벗어나면 에러
일단 두개를 먼저 체크를 해
두개를 통과했다면 일단 둘수는 있으니까
그리고 흑의 기준으로 33, 44, 6목 이상 금수 체크해야되니까
놓인돌을 기준으로 가로,세로,위쪽대각선,아래쪽대각선 의 4개 방향을 체크를 하되
돌을 셀때는 양쪽 방향으로 셈
즉 총 8번의 방향으로 돌을 세는셈
이거는
x_step = 1;
y_step = -1;
이렇게 방향벡터를 주고 증감시켜 나가면서 세면 될듯
편의상 돌의 상태를 Empty, Black, White, X , EBWX 이렇게 네개로 표현을 하면
놓는돌이 B일때 다음이 B가 연속으로 나오다가 공백2개 연속, 반대색, X 가 나오면 멈추는거지
B -> BBEE (SEQ, OPEN, 2)
B -> BBX (SEQ, CLOSE, 2)
B -> BBW (SEQ, CLOSE, 2)
물론 O_OO 이렇게 한칸 띄워진 경우도 있으니
B -> EBBEE (SPACE, OPEN, 2)
B -> EBBX (SPACE, CLOSE, 2)
그리고 반절만 막힌 경우도 있다
@_OOO_@ 이렇게 3인 경우는
@_OOOO@ 4로 뻗을때 막히니까 열린3과 다르게 세야될듯 즉
B -> BBEX (SEQ, HALF, 2)
B -> BBEW (SEQ, HALF, 2)
그래서 4가지 방향에서 양쪽으로 위에 제시한 방법대로 돌의 개수와 상태를 체크하는거지
양쪽이 모두 SPACE가 있으면 O_O_O 이렇게 되어 아무것도 아닌 수가 됨
즉 Space 는 한개이하여야 돌의 개수를 셀수 있음
그리고 만약 돌 개수가 총 3이라면 양쪽이 모두 OPEN 이여야 3이라고 셀수 있음
정확히는 OPEN-3 이겠지
HALF는 양쪽이 모두 HALF여야 HALF-3 이라고 할수 있음
근데 조심해야 할게 SPACE, HALF 인 경우는 없음
4개의 방향중에 2개 이상이 OPEN-3 이여야 삼삼 금수라고 체크를 하면 됨
사사 금수는 좀더 쉬움
양쪽이 모두 CLOSE 이면 CLOSE-4 이고 한쪽만 열려도 OPEN-4 라고 치면 됨
그래서 두개이상 방향에서 OPEN-4 라면 사사 금수라고 체크하면 됨
육목 이상 금수는 양쪽이 전부 SEQ 이면서 돌개수가 5넘어가면 금수가됨
물론 백은 전부 다 가능
승리 판정만 잘하면 되겠지
이렇게 일단 짜면 될듯
논리상 문제있냐?
아님 더 쉬운방법 있나
너무 길어서 내렸읍니다
뉴럴네트워크
예전에 오목 구현할때 다른것보다 삼삼금수가 헬이었음
오목 어려움? 많이?
삼삼을 이해하는게 오목구현의 전부임
아 ㅅㅂ O_O_O_O_O 이런경우가 에러네 가운데다가 두면 44 라서 금수인데 연속된 O_OOO_O 요렇게 되면 (O_OOO)_O 이렇게랑 O_(OOO_O) 이렇게랑 44 가 되는건데
그냥 오목협회에 올라온 규칙 보면 수학적으로(?) 규칙이 딱 나옴
삼삼 시발... 삼삼이 제일 좆같음. 작년에 텀프로젝트할때 원시적인 인공지능+블루투스 대전 오목 만들었었는데 삼삼은 도저히 못하겠더라