Я создал игру с tic tac toe с JavaScript и взял чисто функциональный подход. Однако теперь я застреваю, потому что я не могу заставить игрока иметь возможность выбирать между x и o. Игроку автоматически присваивается x, но никогда не о. Я использую bootstrap, и у меня модальный, который появляется, когда пользователь приземляется на странице. Я должен выполнить пользовательскую историю, в которой пользователь может выбирать между x и o через модальные кнопки. Тогда противоположный символ, т. Е. О, будет находиться на доске tic tac, когда модаль отклоняется. Сейчас эта работа отлично работает. ОДНАКО, если пользователь должен выбрать o, а x появляется на плате, когда пользователь нажимает на квадрат, появляется другое x. Я не хочу, чтобы x появлялся. Вместо этого должен появиться символ o. Таким образом, в основном пользователь играет против доски (или вы могли бы назвать его компьютером, если хотите), но он может выбрать, хочет ли он играть как x или o, нажав либо кнопку x, либо o в модальном режиме. Есть ли способ сделать это возможным, не создавая object.prototype.constructor? Ссылка на мой репортаж github: https://interglobalmedia.github.io/xoApp/ - извините за исходную мертвую ссылку - теперь это работает!Есть ли способ избежать object.prototype.constructor при создании игры tic tac toe с javascript?
function fetchBoard() {
var board = ['', '', '', '', '', '', '', '', ''];
$(".game-field").each(function (index) {
board[index] = $(this).html();
});
return board;
}
/* return 1 if all params 'x', -1 if o, and otherwise 0 */
function checkRow(a, b, c) {
if (a === 'x' && b === 'x' && c === 'x') {
return 1;
} else if (a === 'o' && b === 'o' && c === 'o') {
return -1;
} else {
return 0;
}
}
function checkWin(board) {
return checkRow(board[0], board[1], board[2]) // rows
+ checkRow(board[3], board[4], board[5])
+ checkRow(board[6], board[7], board[8])
+ checkRow(board[0], board[3], board[6]) // columns
+ checkRow(board[1], board[4], board[7])
+ checkRow(board[2], board[5], board[8])
+ checkRow(board[0], board[4], board[8]) // main diagonal rows
+ checkRow(board[2], board[4], board[6]) // reverse diagonal row
}
function selectMove(board) {
var i, options;
options = [];
for (i = 0; i < 9; i += 1) {
if (board[i] === '') {
options.push(i);
}
}
if (options.length === 0) {
return -1;
} else {
return options[Math.floor(Math.random() * options.length)];
}
}
function showGameOver(result) {
var target = $("#result");
if (result > 0) {
target.css('color', '#db0000');
target.html("you win!");
} else if (result < 0) {
target.css('color', "#db0000");
target.html("i win!");
} else {
target.css('color', '#db0000');
target.html("tie game.");
}
}
function resetGame() {
var target;
$(".game-field").html('');
target = $("#result");
target.css('color', '#db0000');
target.html('click a square');
}
function moveAt() {
var xCell, board, result, oLocation, oCell;
xCell = $(this);
if (xCell.html() !== '' || checkWin(fetchBoard()) !== 0) {
return;
}
xCell.css('color', '#db0000');
xCell.html('x');
board = fetchBoard();
result = checkWin(board);
if (result !== 0) {
showGameOver(result);
return;
}
oLocation = selectMove(board);
if (oLocation < 0) {
showGameOver();
return;
}
board[oLocation] = 'o';
oCell = $('#cell' + oLocation);
oCell.css('color', '#fff');
oCell.html('o');
result = checkWin(board);
if (result !== 0) {
showGameOver(result);
return;
}
}
$(document).ready(function() {
$('#iconModal').modal('show');
$('.game-field').click(moveAt);
$('#tictacreset').click(resetGame);
resetGame();
});
[1]: https://github.com/interglobalmedia/xoApp/tree/master/src/html
Что значит «создать объект.prototype.constructor?» Если вы говорите о создании класса, это может быть необязательным, но я не уверен, в конце концов, что вы делаете. – ssube
Ну, где вы позволяете пользователю выбирать между x и o? Похоже, вы просто устарели. – epascarello
Я хочу, чтобы мой код здесь был согласованным и имел возможность просто создать возможность для пользователя выбирать между x и o с именованными функциями, а не с выражением функции, т.е. 'var o = {}; o.constructor === Object; // true var a = []; a.constructor === Массив; // true var n = new Номер (3); n.constructor === Номер; // true 'или' function Tree (name) { this.name = name; } var theTree = новое дерево ('Redwood'); console.log ('theTree.constructor is' + theTree.constructor); ' –