나는 tic-tac-toe의 자바 스크립트 게임을 만들고 위키피디아 문서에 설명 된 전략에 따라 현명한 움직임을 만들 정도로 현명하게 만들려고합니다. . IE는 2 개의 X 또는 2 개의 O가있는 행 또는 열이 있으면 빈 자리를 가져옵니다. 그래서, 키 값 쌍의 행 또는 열을 주어진 값이 될 수 말할 수 : OBJ { 키 1 : "X", 키 2 : "" KEY3 : "X", } 내가 가진정렬 유형 함수를 사용하여 효율적으로 객체의 특정 키/값을 업데이트하는 방법
한 동안이 작업을 수행하는 방법을 연구하고 있으며 일련의 루프가 아닌 다른 방법이 있다면 궁금합니다. 첫 번째 시도는 빈 값을 분리 할 수 있도록 항목을 사전 순으로 정렬하려고 시도했습니다. var = "" "X" "X"
이 경우 첫 번째 항목을 쉽게 호출하고 업데이트 할 수 있지만 나는 그것을 원래의 위치로 되돌릴 수 없다. 그러나 많은 낭비적인 코드를 생성하지 않는 방법으로이를 수행하는 방법을 알아낼 수 없습니다. 아마도 여러 개의 루프로 분리하는 것이 더 좋을까요? 하나는 빈 자리가있는 행과 열을 분리하는 것 (8 개가 있습니다)입니까?
또 다른 아이디어는 그리드의 각 값에 1의 값을 부여한 다음 그리드를 살펴보고 행이 3과 동일한 지 확인합니다 (이들을 조인하고 .eval() 메서드를 사용하는 var 생성) , 각 항목을 1과 동일하게 만들고 공백 자리를 1로 업데이트하고 이미 다른 두 지점을 업데이트하십시오.
가능한 한 구체적으로 표시하려고했지만이 특정 문제를 설명하는 데별로 좋지 않습니다. 나는 인정한다. 다음 https://jsfiddle.net/1hup5195/
는 참조 용으로 내 스크립트의 일부입니다 : 여기
내가 만든 JS 바이올린입니다$(document).ready(function(){
var playerTurn = true;
var buttonStatus = "allowclick"; // Change to inactive once game starts
var player = "";
var machine = "";
var test = "";
var emptyObj = {1: "", 2: "", 3: "",
4: "", 5: "", 6: "",
7: "", 8: "", 9: ""};
var gridObj = {1: "", 2: "", 3: "",
4: "", 5: "", 6: "",
7: "", 8: "", 9: ""};
var winningObj = [[1,2,3], [4,5,6], [7,8,9], [1,4,7], [2,5,8], [3,6,9], [1,5,9], [3,5,7]];
// Check if player is holding a corner
function machineFunction() {
// Loop through winningObj and check if there are rows/columns with 2/3 taken
// for(i = 0; i < winningObj.length; i++) {
var i = 3;
var alpha = winningObj[i][0];
var bravo = winningObj[i][1];
var charlie = winningObj[i][2];
console.log(alpha);
console.log(bravo);
console.log(charlie);
// After defining alpha/bravo/charlie, fire the fxn
testFxn(alpha, bravo, charlie);
// This is my function to sort the 3 different spots within the grid
function testFxn(a,b,c) {
// Test would be equal to ["", "X", "X"] or something similar
var test = [gridObj[a], gridObj[b], gridObj[c]].sort();
console.log(test);
console.log(gridObj);
// If 2/3 spots taken by either X or O, take this spot
if (test[0] === "" && test[1] === "X" && test[2] === "X") {
console.log("#" + alpha + "")
$('#' + alpha + '').html(machine);
gridObj[alpha] = machine;
console.log(gridObj);
$(this).html(machine); // Sends player over to html
gridObj[this.id] = machine; // Update gridObj object
playerTurn = true;
}
if (test[0] === "" && test[1] === "O" && test[2] === "O") {
// How do I get the ID I need??
$('#' + test[0] + '').html(machine);
playerTurn = true;
}
};
이것은 피들 (Fiddle)의 링크입니다. 이전 작품이 생각지도 않습니다. (https://jsfiddle.net/1hup5195/#&togetherjs=i67M4LaRnw) –