내가 0부터 시작하는 인덱스에 의해 세포의 위치를 참조하는 것이 좋습니다. 행 또는 열을 선택하기 위해 모듈로 또는 정수 나누기와 같은 수학 트릭을 사용하기가 쉽습니다. 그렇지 않으면 off-by-one 오류를 피하기 위해 많은 오프셋을 사용해야합니다. 빈을 의미하고, x와 O를 의미하는 X와 O가 연주 - ''
0 1 2
3 4 5
6 7 8
게임 상태를 문자로, 문자 배열로 표현 될 수있다 :
IE는 보드가 표시 될 수 있습니다.
여기에 인간 게임이다, 게임은 문자열 배열에 저장 :
x
o x o
o x
var state = "-x-oxoox-";
는 게임을 승리 한 경우, 함수를 만들 수 있습니다 확인하려면.
이 함수는 아무도 얻지 못하면 '-'를, x가 얻은 경우 'x'를 반환하고, o가 얻은 경우 'o'를 반환합니다.
나는 점검 할 모든 경로를 하드 코딩하는 구현으로 시작하겠습니다. 그런 다음 확인할 경로를 생성하는 방법을 보여줍니다.
function WhoIsWinningHardCode(state) {
var rows = IsWin(state, [[0,1,2],[3,4,5],[6,7,8]]);
var cols = IsWin(state, [[0,3,6],[1,4,7],[2,5,8]]);
var diagUp = IsWin(state, [[6,4,2]]);
var diagDown = IsWin(state, [[0,4,8]]);
if (rows !== '-') return rows;
if (cols !== '-') return cols;
if (diagUp !== '-') return diagUp;
return diagDown;
}
function WhoIsWinningGeneratePaths(state) {
var rows = IsWin(state, GenPaths(3, 0, 1, 3));
var cols = IsWin(state, GenPaths(3, 0, 3, 1));
var diagUp = IsWin(state, GenPaths(1, 2, 2, 0));
var diagDown = IsWin(state, GenPaths(1, 0, 4, 0));
if (rows !== '-') return rows;
if (cols !== '-') return cols;
if (diagUp !== '-') return diagUp;
return diagDown;
}
function GenPaths(count, start, incrementA, incrementB) {
var paths = [];
for (var i = 0; i < count; i++) {
var path = [];
for (var j = 0; j < 3; j++) {
path.push(start + i*incrementB + j*incrementA)
}
paths.push(path);
}
return paths;
}
function IsWin(state, paths) {
for (var i = 0; i < paths.length; i++) {
var path = paths[i];
var a = state[path[0]];
var b = state[path[1]];
var c = state[path[2]];
if (a !== '-')
if (a == b)
if (a == c)
return a;
}
return '-';
}
"나는 같은 셀 A1에 = 지하 1 층 =의 C1 또는의 값 여부 등의 결정을 만들고 싶어 a1 = b2 = c3 등. " 나는 당신이 조금은 정교 할 수 있다는 것을 정확히 알지 못한다. –
정교하게, 그것의 tic tac toe 게임. 그래서 나는 입력 된 값에 따라 결정을 내리고 싶습니다. 입력 된 값은 해당 배열에 있습니다. – Ayan
좀 더 정교하게하기 위해 사용자가 왼쪽에서부터 대각선 인 a1, b2 및 c3 셀을 클릭 한 다음 해당 셀이 승자를 선언하기 위해 동일한 값을 갖고 있는지 확인해야한다고 가정합니다. – Ayan