I'm a beginner and just finished my first Tic Tac Toe program. I was looking to get some feedback on some of the portions that seem a bit repetitive. Is there a way to make this more dry vs. hard coding?
///////TicTacToe///////////
//////////BOARD ASSIGNMENT////////////
var a = "a";
var b = "b";
var c = "c";
var d = "d";
var e = "e";
var f = "f";
var g = "g";
var h = "h";
var i = "i";
play();
function buildBoard() {
var board = "=======" + "\n" + a + "|" + b + "|" + c +"\n" +
d + "|" + e + "|" + f + "\n" +
g + "|" + h + "|" + i + "\n" + "=======";
console.log(board);
return board;
}
/////////PLAYER INPUT///////////
function getInput(){
console.log("You are X, the computer is O" + "\n" +
"X goes first");
return prompt("You are X, the computer is O" + "\n" +
"X goes first");
}
//////////CPU MOVE GENERATOR & VALIDATOR///////////
function randomNumber() {
var random = Math.random();
if (random > 0.89) {
if (a !== 'X' && a !== 'O') {
a = "O";
return a;
} else {return randomNumber();}
} else if (random > 0.78) {
if (b !== 'X' && b !== 'O') {
b = "O";
return b;
} else {return randomNumber();}
} else if (random > 0.67) {
if (c !== 'X' && c !== 'O') {
c = "O";
return c;
} else {return randomNumber();}
} else if (random > 0.56) {
if (d !== 'X' && d !== 'O') {
d = "O";
return d;
} else {return randomNumber();}
} else if (random > 0.45) {
if (e !== 'X' && e !== 'O') {
e = "O";
return e;
} else {return randomNumber();}
} else if (random > 0.34) {
if (f !== 'X' && f !== 'O') {
f = "O";
return f;
} else {return randomNumber();}
} else if (random> 0.23) {
if (g !== 'X' && g !== 'O') {
g = "O";
return g;
} else {return randomNumber();}
} else if (random > 0.12) {
if (h !== 'X' && h !== 'O') {
h = "O";
return h;
} else {return randomNumber();}
} else if (random > 0.00) {
if (i !== 'X' && i !== 'O') {
i = "O";
return i;
} else {
return randomNumber();
}
}
}
//////////PLAYER MOVE VALIDATOR///////////
function playerMove() {
var player = getInput();
if (player === a && a !== 'X') {
a = 'X';
} else if (player === b && b !== 'X') {
b = 'X';
} else if (player === c && c !== 'X') {
c = 'X';
} else if (player === d && d !== 'X') {
d = 'X';
} else if (player === e && e !== 'X') {
e = 'X';
} else if (player === f && f !== 'X') {
f = 'X';
} else if (player === g && g !== 'X') {
g = 'X';
} else if (player === h && h !== 'X') {
h = 'X';
} else if (player === i && i !== 'X') {
i = 'X';
} else {
console.log("=======" + "\n" + "Position already occupied" + "\n" + "Please Select Again" + "\n" + "=======");
buildBoard();
playerMove();
}
}
function compare() {
var p = playerMove();
var cpu = randomNumber();
}
//////MAIN///////
function play() {
buildBoard();
compare();
if (winner('X')) {
buildBoard();
console.log('You win!');
return 'X';
} else if (winner('O')) {
buildBoard();
console.log('The computer wins!');
return 'O';
} else {
play();
}
}
/////////DETERMINE WINNER IF WINNER FUNCTION STACK IS TRUE/////////////
////////TOP OF WINNER STACK////////////
function winner(player) {
return winsRow(player) || winsColumn(player) || winsDiagonal(player);
}
function winsRow(player) {
return allThree(player, a, b, c) ||
allThree(player, d, e, f) ||
allThree(player, g, h ,i);
}
function winsColumn(player) {
return allThree(player, a, d, g) ||
allThree(player, b, e, h) ||
allThree(player, c, f, i);
}
function winsDiagonal(player) {
return allThree(player, a, e, i) ||
allThree(player, c, e, g);
}
function allThree(player, cell_one, cell_two, cell_three) {
return (cell_one === player) && (cell_two === player) && (cell_three === player);
}
/////////BOTTOM OF WINNER STACK///////////