Javascript Tic-Tac-Toe环
我正在用javascript做一个tic-tac-toe游戏。我已经列出了一些我认为是基本组成部分的东西:Javascript Tic-Tac-Toe环,javascript,function,loops,control-flow,Javascript,Function,Loops,Control Flow,我正在用javascript做一个tic-tac-toe游戏。我已经列出了一些我认为是基本组成部分的东西: var board = [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; gameOn = true; player1Move = true; counter = 0; player1 = []; player2 = []; var ask = console.log(prompt(
var board = [
0, 0, 0,
0, 0, 0,
0, 0, 0
];
gameOn = true;
player1Move = true;
counter = 0;
player1 = [];
player2 = [];
var ask = console.log(prompt('where would you like to go?'));
var drawBoard = function(){
console.log(" A " + (board[0]) + "| B " + (board[1]) + "| C " + (board[2]));
console.log(" ------------- ");
console.log(" D " + (board[3]) + "| E " + (board[4]) + "| F " + (board[5]));
console.log(" ------------- ");
console.log(" G " + (board[6]) + "| H " + (board[7]) + "| I " + (board[8]));
console.log(" ------------- ");
};
var solutions = [
(board[0] && board[1] && board[2]) || (board[3] && board[4] && board[5]) ||
(board[6] && board[7] && board[8]) || (board[0] && board[3] && board[6]) ||
(board[1] && board[4] && board[7]) || (board[2] && board[5] && board[8]) ||
(board[0] && board[4] && board[8]) || (board[2] && board[4] && board[6])
];
while (gameOn === true){
// for loop for game logic
for (var i = 0 ; i < 9; i++){
if (player1Move === true) {
player1.push(ask);
drawBoard();
player1Move = false;
} else if (player1Move === false){
player2.push(ask);
drawBoard();
player1Move = true;
} else if ((player1 || player2) === solutions){
gameOn = false;
console.log((player1 || player2) + "wins!");
} else {
gameOn = false;
console.log("Tie Game!");
}
}
}
var板=[
0, 0, 0,
0, 0, 0,
0, 0, 0
];
gameOn=true;
player1Move=真;
计数器=0;
player1=[];
player2=[];
var ask=console.log(提示符('您想去哪里?');
var drawBoard=函数(){
log(“A”+(board[0])+“|B”+(board[1])+“|C”+(board[2]);
console.log(“----------------”;
log(“D”+(board[3])+“|E”+(board[4])+“|F”+(board[5]);
console.log(“----------------”;
log(“G”+(board[6])+“|H”+(board[7])+“|I”+(board[8]);
console.log(“----------------”;
};
var解决方案=[
(董事会[0]和董事会[1]和董事会[2])||(董事会[3]和董事会[4]和董事会[5])||
(董事会[6]和董事会[7]和董事会[8])||(董事会[0]和董事会[3]和董事会[6])||
(董事会[1]和董事会[4]和董事会[7])| |(董事会[2]和董事会[5]和董事会[8])||
(董事会[0]和董事会[4]和董事会[8])||(董事会[2]和董事会[4]和董事会[6])
];
while(gameOn==true){
//游戏逻辑的for循环
对于(变量i=0;i<9;i++){
如果(player1Move==真){
player1.推(问);
绞车();
player1Move=假;
}else if(player1Move==false){
player2.推(问);
绞车();
player1Move=真;
}else if((player1 | | player2)==解决方案){
gameOn=false;
log((player1 | | player2)+“wins!”);
}否则{
gameOn=false;
日志(“平局游戏!”);
}
}
}
我知道我的主循环的语法不正确。为什么我不能执行当前编写的操作?如果您有这个现有的代码,您会使用什么类型的循环设置来完成这个任务?对不起,如果这似乎不够具体,我只是在这一切的逻辑迷失了
对于这个现有的循环,我现在要做的就是遍历并提示2个用户9次(因为最大移动次数=9次)。一旦成功,我会继续添加更多的游戏逻辑。为什么我不能得到9次提示?目前的结果是,它提示我一次,打印出电路板9次,然后全部为false
顺便说一句,现在这只需要在终端窗口中工作。我尽可能少地更改了您的代码,但有几点不同,我正在一点一点地解释
var board = {
A: null,
B: null,
C: null,
D: null,
E: null,
F: null,
G: null,
H: null,
I: null
};
gameOn = true;
player1Move = true;
var drawBoard = function(){
console.log(" A " + (board.A || '') + "| B " + (board.B || '') + "| C " + (board.C || ''));
console.log(" ------------- ");
console.log(" D " + (board.D || '') + "| E " + (board.E || '') + "| F " + (board.F || ''));
console.log(" ------------- ");
console.log(" G " + (board.G || '') + "| H " + (board.H || '') + "| I " + (board.I || ''));
console.log(" ------------- ");
};
var solutions = function() {
return (board.A && (board.A == board.B && board.A == board.C))
|| (board.D && (board.D == board.E && board.D == board.F))
|| (board.G && (board.G == board.H && board.G == board.I));
};
drawBoard();
var currentPlayer;
while (gameOn === true){
// for loop for game logic
for (var i = 0 ; i < 9; i++){
if (solutions()){
console.log(currentPlayer + " wins!");
gameOn = false;
break;
}
//else {
// gameOn = false;
// console.log("Tie Game!");
//}
currentPlayer = 'Player 1';
if(!player1Move)
currentPlayer = 'Player 2';
var ask = prompt(currentPlayer + ': where would you like to go (A or B or C or ..)?');
if(ask == 'exit') {
gameOn = false;
break;
}
if (player1Move === true) {
//player1.push(ask);
board[ask] = 'X';
drawBoard();
player1Move = false;
} else if (player1Move === false){
board[ask] = 'O';
drawBoard();
player1Move = true;
}
}
}
var板={
答:空,
B:空,
C:空,
D:空,
E:空,
F:空,
G:空,
H:空,
I:空
};
gameOn=true;
player1Move=真;
var drawBoard=函数(){
console.log(“A”+(board.A | |“”)+“B”+(board.B | |“”)+“C”+(board.C | |“”);
console.log(“----------------”;
console.log(“D”+(board.D | |“”)+“E”+(board.E | |“”)+“F”+(board.F | |“”);
console.log(“----------------”;
console.log(“G”+(board.G | |“”)+“H”+(board.H | |“”)+“I”+(board.I | |“”);
console.log(“----------------”;
};
var解决方案=函数(){
返回(board.A&&(board.A==board.B&&board.A==board.C))
||(board.D&(board.D==board.E&&board.D==board.F))
||(board.G&&(board.G==board.H&&board.G==board.I));
};
绞车();
var-currentPlayer;
while(gameOn==true){
//游戏逻辑的for循环
对于(变量i=0;i<9;i++){
if(解决方案()){
console.log(currentPlayer+“wins!”);
gameOn=false;
打破
}
//否则{
//gameOn=false;
//日志(“平局游戏!”);
//}
currentPlayer='Player 1';
如果(!player1Move)
currentPlayer='Player 2';
var ask=prompt(currentPlayer+':您想去哪里(A、B、C或…);
如果(ask==“退出”){
gameOn=false;
打破
}
如果(player1Move==真){
//player1.推(问);
董事会[询问]=“X”;
绞车();
player1Move=假;
}else if(player1Move==false){
董事会[问]=“O”;
绞车();
player1Move=真;
}
}
}
它还没有完全完成,但那是你以后可以做的事情,也许你不想让我为你做这一切
这一切都在Chrome控制台中工作
有两件基本的事情阻碍了你:
var ask=console.log(提示(“您想去哪里?”)代码>应该是var ask=prompt(currentPlayer+':您想去哪里?)代码>-您的版本在ask
中填充空值
solutions()
函数需要完成,可能有一种更简洁的方法来完成确保您了解全局对象是什么,以及上下文中的
window.prompt
是什么,以及console.log
是什么。了解适用于您的环境的调试器是绝对必要的。在Chrome中,它被称为开发者工具
window.prompt
在jsfiddle之类的代码沙盒中,或者在沙盒中构建堆栈溢出时,不是很有用。我建议使用HTML作为用户界面
function init() {
trapForm();
trapInput();
toggleCurrentUser();
askUser();
}
var game = [
[null,null,null],
[null,null,null],
[null,null,null]
];
var trapInput = function() {
// capture input and use to to create a play in the game
document.querySelector('#go').addEventListener('click',function(ev) {
var position = document.querySelector('#square').valueAsNumber;
if (position < 10 && position > 0) {
// render X or O to the HTML
var td = document.querySelectorAll('#t3 td')[position-1];
td.innerHTML = currentUser;
// modify the corresponding game array
var row = Math.floor( (position-1) / 3 );
var col = ( (position+2) % 3) ;
game[row][col] = currentUser;
// this helps us visualize what's happening
debug(game);
checkGameStatus();
toggleCurrentUser();
} else {
debug({"msg":"illegal move"});
}
});
};
var trapForm = function() {
// prevent form from submitting
var f = document.querySelector('#f');
f.addEventListener('submit',function(ev) {
ev.preventDefault();
trapInput();
});
};
当前用户
什么广场(1-9)?
游戏状态
行动