흐흠 전 얘전에 5목을 짜 보았습니다..
흐흠
공방을 따지지 않고 어떻게 하라는건지 모르겠군요..
논리구성은 3목 게임 같은 경우 이기기위해 한다기 보다는..
지지 않게 하기 위해 만드는것이 일반적입니다..
다분히..수비적이죠..
각각의 조건을 if문으로 걸러내고 걸러내는 겁니다..
말그대로 노가다죠....
님계서 생각하신건 사람이 둔수에 다음 수를 예상해서 둔다라는 생각 이신거 같은데..
공방을 운운 하는것이 다음수의 예측입니다...
우선 기본 적인 개념은 이렇습니다..
우선 3x3은
2차원 배열입니다...(이렇게 하셨겠죠??)
자이제 배열의 값들은...
0이면 아직 돌이 놓이지 않은 곳이고..
1이면 사람이 돌을 놓은곳
2이면 컴퓨터가 돌을 놓은곳이라고 하겠습니다...
여기 까지는 간단 하죠???
-시스템적 조건-
1. 게임이 시작전에..
컴퓨터가 먼저 하게 할꺼냐?? 아님 사람이 먼저 할것이냐를 물어봐야 합니다..
아님 난수 처리해서 우선권 줘도 되구요..
2. 그다음 자리놓는 방법은 님께서 awt를 쓰시던지 applet을 쓰시던지
좌표를 입력 받던지 아무렇게나 간단히 하시면됩니다...
3. 3x3그담음 화면에 보여주는것도 o x 까만돌 하얀돌 구분하시는것도 편안히 되겠죠..
4. 돌을 둘때마다 이겼는지 비겼는지 졌는지를 검색 합니다..
5. 사람이 돌을 둘때 영역제한을 체크 합니다..
등입니다...
전 o를 선수 x를 후수로 설명 드리겟습니다..
-컴퓨터의 경우의수 검색..-
-없음 o선수(컴) x후수(사람)
이라고 하고 설명 드립니다..
검색은 어떤식으로 하시냐면요...
-012
a---
b-x-
c-o-지금 이렇게 있다고 할게요..
그러면 8방향을 매번 검색 해야 합니다..
아래서부터 설명 드리면..
c(0-2),b(0-2),a(0-2) 인 가로 세줄..
a0-b1-c2로 대각선으로 이어지는 한줄..
0(a-c) 1(a-c) 2(a-c) 세로 세줄..
a2-b1-c0로인 또다른 대각선 한줄을 비교합니다...
(참고로 판이 (4x4, 5x5)로 넘어가면.. 이것도 for문으로 돌려가며.. 여러 개로 검색 해야 합니다...)
자 이후 직선에 대한 검색 결과가 나오게죠..
수도 없이 많습니다..
우선 대표적인거 몇가지 얘를들면..
---
o--
-o-
--o
oo-
-oo
o-o
ooo(똑같은걸로 x도 있겠죠 ^^)
그리구...
ox-
-ox
o-x
xo-
뭐 여하튼 저희는 신경쓸 조건히 너무도 많습니다..
해서 저희가 신경써야 되는것만을 찝어서 골라 내야 합니다..
그리고 우선권을 매겨야 합니다..
3목의 경우를 얘들 들자면...
우선 3자리가 돌이 다놓여진곳은 신경쓸필요가 없겠죠??
oox oxo등은 신경쓸필요가 없습니다..
돌을 둘수가 없으니까요...
그럼 가장 우선으로 신경 써야 하는곳은..
2개가 놓여 있고.. 1자리가 빈자리겠죠...
예를 보여 드리면(지금부터 컴퓨터는 x입니다..)
oo-
o-o
-oo
xx-
x-x
-xx등이 있겠죠??
이중에 x가 컴퓨터라면 최우선 적으로 두어야 할곳은..
xx-등의 x가 2개 인곳이겠죠...
왜냐면... xxx가 되면 저의 승리이니까..
oo-등의 것은 신경쓸 필요가 없는거죠.. 해서
xx-
x-x
-xx이런 뭐양의 줄이 나온곳을 우선적으로 찾아야 합니다...
없다면...
oo-
-oo
o-o등을 찾아서 3줄이 안되게 막는곳의 돌을 두어야 겠지요..
이 다음은 또다시 컴퓨터가 이길게 할수 있는곳을 두개 하는것입니다..
물론 3줄 짜리니까..
x-- -x- --x등이 있겠죠.. 이렇게 된 부분에 연결되게 놓으면 됩니다..
뭐 3목이라 어디에 놓든 상관은 없습니다만...
그래도 컴퓨터가 이기려는 의지를 보여야 갰죠 ^^
이렇게 된데가 없다면...
사람이 한개 있는 자리를 찾아야 겟죠???
o-- -o- --o를 찾아?br /> 둘중에 아무곳에나 놔도 되겠죠...
이렇게 찾았는데되 둘곳이 없다라고 하면...
사람이 논자리 바로 대각선이나 그런데 놓게 하면 되구요..
컴퓨터 첫수라면 임의적으로 숫자를 넣으 셔도 되구..
난수 처리하셔두 됩니다..
자 이제 여기 까진 대충 이해하셨으리라 생각 합니다..
그럼 이제 컴퓨터가 돌을 놓는것 이해 하셨으리라 생각 합니다..
사람이야 놓는거 알아서 하게 하면 되겠죠..
단 사람이 돌을 놓을때는 2,1 이라는 좌표를 입력했는데..
a[2][1]!=0 이면 돌이 있습니다 다시 두세요
라고 처리 하면 되겠죠..??
그리고 나서
사람이나
커퓨터가 돌을 놓으면..
아까 얘기한 8방향 있죠??(가로3 세로3 대각선2)....
을 매번 검색하여 111 또는 222인 부분을 찾아서...
누가 게임을 이겼는지만 포함 시켜 주면 됩니다...
또한 돌을 다두지 않았지만.. 컴퓨터가 아마대나 두어도 게임이 비기게 되느경우가 있습니다.. 이럴땐 비겼다고 얘기 해줘도 괜찮겠죠...
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040201&docId=62871039&qb=7J6Q67CUIOyCvOuqqeqyjOyehA==&enc=utf8§ion=kin&rank=2&sort=0&spq=0&pid=fxZoowoi5UCssbjDaw0sss--068107&sid=sHzmGMQaDksAABJKTUkAAAAo