@ -0,0 +1,37 @@
|
|||||||
|
#board {
|
||||||
|
min-width: 300px;
|
||||||
|
max-width: 800px;
|
||||||
|
min-height: 300px;
|
||||||
|
max-height: 800px;
|
||||||
|
/* background-color: pink;*/
|
||||||
|
border-radius: 5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.size {
|
||||||
|
border: 1px solid grey;
|
||||||
|
background-color: azure;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.square {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
left: 1.5%;
|
||||||
|
top: 2px;
|
||||||
|
/* height: 32%; width: 32%;*/
|
||||||
|
border-radius: 10%;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: white;
|
||||||
|
cursor: pointer;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: 100%; width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#reset {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 993 B After Width: | Height: | Size: 993 B |
@ -0,0 +1,25 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>EXTRA tic tac toe</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<span class="size">9</span>
|
||||||
|
<span class="size">16</span>
|
||||||
|
<span class="size">25</span>
|
||||||
|
<span class="size">36</span>
|
||||||
|
<span class="size">49</span>
|
||||||
|
<span class="size">64</span>
|
||||||
|
<span class="size">81</span>
|
||||||
|
<span class="size">100</span>
|
||||||
|
<span class="size">121</span>
|
||||||
|
<span class="size">144</span>
|
||||||
|
<span class="size">169</span>
|
||||||
|
<span class="size">196</span>
|
||||||
|
<br><br>
|
||||||
|
<div id="board"></div>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript" src="js/app_extra.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -0,0 +1,197 @@
|
|||||||
|
window.onload = function() {
|
||||||
|
console.log('app.js');
|
||||||
|
|
||||||
|
// the game will start when a size is selected
|
||||||
|
// will also reset the game when clicked
|
||||||
|
var sizeButtons = document.getElementsByClassName('size');
|
||||||
|
for (var i=0; i < sizeButtons.length; i++) {
|
||||||
|
sizeButtons[i].addEventListener('click', setValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// global variables to be populated by setValues function
|
||||||
|
var turn, size, Xpositions, Opositions, windex;
|
||||||
|
|
||||||
|
// setValues sets the variables for the game and invokes the makeBoard function
|
||||||
|
var setValues = function() {
|
||||||
|
turn = true;
|
||||||
|
size = this.innerText;
|
||||||
|
Xpositions = [];
|
||||||
|
Opositions = [];
|
||||||
|
|
||||||
|
windex = [];
|
||||||
|
|
||||||
|
// generates winning combinations for rows and columns according to the number of squares
|
||||||
|
for (var i=0; i < Math.sqrt(size); i++) {
|
||||||
|
var row = [];
|
||||||
|
for (var j=(i * Math.sqrt(size)); j < (Math.sqrt(size) + (i * Math.sqrt(size))); j++) {
|
||||||
|
row.push(j);
|
||||||
|
}
|
||||||
|
var col = [];
|
||||||
|
for (var j = i; j < (i + parseInt(size)); j += Math.sqrt(size)) {
|
||||||
|
col.push(j);
|
||||||
|
}
|
||||||
|
windex.push(row, col);
|
||||||
|
}
|
||||||
|
|
||||||
|
// generates winning combinations for diagonals (top left to bottom right)
|
||||||
|
var diag1 = [];
|
||||||
|
for (var j=0; j < parseInt(size); j += (Math.sqrt(size) + 1)) {
|
||||||
|
diag1.push(j);
|
||||||
|
}
|
||||||
|
|
||||||
|
// generates winning combinations for diagonals (top right to bottom left)
|
||||||
|
var diag2 = [];
|
||||||
|
for (var k=(Math.sqrt(size) - 1); k <= (size - Math.sqrt(size)); k += (Math.sqrt(size) - 1)) {
|
||||||
|
diag2.push(k);
|
||||||
|
}
|
||||||
|
windex.push(diag1, diag2);
|
||||||
|
|
||||||
|
// makes the board according to the number of squares
|
||||||
|
makeBoard();
|
||||||
|
}
|
||||||
|
|
||||||
|
// generates the board according to the size variable, and
|
||||||
|
// adds an eventListener for each square (play function)
|
||||||
|
var makeBoard = function() {
|
||||||
|
var board = document.getElementById('board');
|
||||||
|
board.innerHTML = "";
|
||||||
|
for (var i=0; i < size; i++) {
|
||||||
|
var square = document.createElement('square');
|
||||||
|
square.id = i;
|
||||||
|
square.className = "square";
|
||||||
|
square.style.margin = "2px";
|
||||||
|
square.style.width = (100 / Math.sqrt(size)) - 1 + "%";
|
||||||
|
square.style.height = (100 / Math.sqrt(size)) - 1 + "%";
|
||||||
|
var board = document.getElementById('board');
|
||||||
|
board.appendChild(square);
|
||||||
|
square.addEventListener('click', play);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var play = function() {
|
||||||
|
if (!this.className.includes("x") && !this.className.includes("o")) {
|
||||||
|
if (turn) {
|
||||||
|
this.innerHTML = '<img src="images/x.png"/>';
|
||||||
|
this.className += ' x';
|
||||||
|
Xpositions.push(this.id);
|
||||||
|
} else {
|
||||||
|
this.innerHTML = '<img src="images/o.png"/>';
|
||||||
|
this.className += ' o';
|
||||||
|
Opositions.push(this.id);
|
||||||
|
}
|
||||||
|
turn = !turn;
|
||||||
|
checkWin();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var checkWin = function() {
|
||||||
|
var squares = document.getElementsByClassName('square');
|
||||||
|
if (checkPositions(Xpositions)) {
|
||||||
|
for (var i=0; i < squares.length; i++) {
|
||||||
|
squares[i].innerHTML = '<img src="images/egg.png"/>'
|
||||||
|
}
|
||||||
|
} else if (checkPositions(Opositions)) {
|
||||||
|
for (var j=0; j < squares.length; j++) {
|
||||||
|
squares[j].innerHTML = '<img src="images/depression.png"/>'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var checkPositions = function(playerPositions) {
|
||||||
|
for (var i=0; i < windex.length; i++) {
|
||||||
|
var hits = 0;
|
||||||
|
for (var j=0; j < windex[i].length; j++) {
|
||||||
|
for (var k=0; k < playerPositions.length; k++) {
|
||||||
|
if (windex[i][j] == playerPositions[k]) {
|
||||||
|
hits++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hits == Math.sqrt(size)) { return true };
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// EOF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// if (size == 9) {
|
||||||
|
// windex = [
|
||||||
|
// [0, 1, 2], [3, 4, 5], [6, 7, 8],
|
||||||
|
// [0, 3, 6], [1, 4, 7], [2, 5, 8],
|
||||||
|
// [0, 4, 8], [2, 4, 6]
|
||||||
|
// ];
|
||||||
|
// } else if (size == 16) {
|
||||||
|
// windex = [
|
||||||
|
// [0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 23, 14, 15],
|
||||||
|
// [0, 4, 8, 12], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15],
|
||||||
|
// [0, 5, 10, 15], [3, 6, 9, 12]
|
||||||
|
// ];
|
||||||
|
// } else if (size == 25) {
|
||||||
|
// windex = [
|
||||||
|
// [0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24],
|
||||||
|
// [0, 5, 10, 15, 20], [1, 6, 11, 16, 21], [2, 7, 12, 17, 22], [3, 8, 13, 18, 23], [4, 9, 14, 19, 24],
|
||||||
|
// [0, 6, 12, 18, 24], [4, 8, 12, 16, 20]
|
||||||
|
// ];
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// sets up arrays of winning row numbers
|
||||||
|
// for (var i=0; i < Math.sqrt(size); i++) {
|
||||||
|
// var row = [];
|
||||||
|
// for (var j=(i * Math.sqrt(size)); j < (Math.sqrt(size) + (i * Math.sqrt(size))); j++) {
|
||||||
|
// row.push(j);
|
||||||
|
// }
|
||||||
|
// winrar.push(row);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// console.log('rows: ', winrar);
|
||||||
|
|
||||||
|
// var winwoop = [];
|
||||||
|
// for (var i=0; i < Math.sqrt(size); i++) {
|
||||||
|
// var col = [];
|
||||||
|
// for (var j = i; j < (i + parseInt(size)); j += Math.sqrt(size)) {
|
||||||
|
// col.push(j);
|
||||||
|
// }
|
||||||
|
// winwoop.push(col);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// console.log('columns: ', winwoop);
|
||||||
|
|
||||||
|
// [0, 4, 8], [2, 4, 6]
|
||||||
|
// var windrip = [];
|
||||||
|
|
||||||
|
// var diag1 = [];
|
||||||
|
// var diag2 = [];
|
||||||
|
|
||||||
|
// for (var j=0; j < parseInt(size); j += (Math.sqrt(size) + 1)) {
|
||||||
|
// diag1.push(j);
|
||||||
|
// }
|
||||||
|
// for (var k=(Math.sqrt(size) - 1); k <= (size - Math.sqrt(size)); k += (Math.sqrt(size) - 1)) {
|
||||||
|
// diag2.push(k);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// console.log('diag1: ', diag1);
|
||||||
|
// console.log('diag2: ', diag2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 0, 3, 6
|
||||||
|
// 1, 4, 7
|
||||||
|
// 2, 5, 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// sets up arrays of winning column numbers
|
||||||
|
|
||||||
|
// sets up arrays of winning diagonal numbers
|
||||||
|
|
||||||
|
// console.log(diag2);
|
||||||
@ -1,88 +0,0 @@
|
|||||||
window.onload = function() {
|
|
||||||
|
|
||||||
console.log('app.js');
|
|
||||||
|
|
||||||
var turn = true;
|
|
||||||
|
|
||||||
var Xpositions = [];
|
|
||||||
var Opositions = [];
|
|
||||||
|
|
||||||
var windex = [
|
|
||||||
[0, 1, 2], [3, 4, 5], [6, 7, 8],
|
|
||||||
[0, 3, 6], [1, 4, 7], [2, 5, 8],
|
|
||||||
[0, 4, 8], [2, 4, 6]
|
|
||||||
];
|
|
||||||
|
|
||||||
var squares = document.getElementsByClassName('square');
|
|
||||||
|
|
||||||
var play = function() {
|
|
||||||
|
|
||||||
if (!this.className.includes("x") && !this.className.includes("o")) {
|
|
||||||
|
|
||||||
if (turn) {
|
|
||||||
this.innerHTML = '<img src="x.png"/>';
|
|
||||||
this.className += ' x';
|
|
||||||
Xpositions.push(this.id);
|
|
||||||
} else {
|
|
||||||
this.innerHTML = '<img src="o.png"/>';
|
|
||||||
this.className += ' o';
|
|
||||||
Opositions.push(this.id);
|
|
||||||
}
|
|
||||||
turn = !turn;
|
|
||||||
checkWin();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i=0; i < squares.length; i++) {
|
|
||||||
squares[i].addEventListener('click', play);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var checkWin = function() {
|
|
||||||
var squares = document.getElementsByClassName('square');
|
|
||||||
if (checkX()) {
|
|
||||||
console.log('X WON!!!!!');
|
|
||||||
for (var i=0; i < squares.length; i++) {
|
|
||||||
squares[i].innerHTML = '<img src="egg.png"/>'
|
|
||||||
}
|
|
||||||
} else if (checkO()) {
|
|
||||||
console.log('O WON!!!!!');
|
|
||||||
for (var j=0; j < squares.length; j++) {
|
|
||||||
squares[j].innerHTML = '<img src="depression.png"/>'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var checkX = function() {
|
|
||||||
for (var i=0; i < windex.length; i++) {
|
|
||||||
var hits = 0;
|
|
||||||
for (var j=0; j < windex[i].length; j++) {
|
|
||||||
for (var k=0; k < Xpositions.length; k++) {
|
|
||||||
if (windex[i][j] == Xpositions[k]) {
|
|
||||||
hits++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (hits == 3) { return true };
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
var checkO = function() {
|
|
||||||
for (var i=0; i < windex.length; i++) {
|
|
||||||
var hits = 0;
|
|
||||||
for (var j=0; j < windex[i].length; j++) {
|
|
||||||
for (var k=0; k < Opositions.length; k++) {
|
|
||||||
if (windex[i][j] == Opositions[k]) {
|
|
||||||
hits++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (hits == 3) { return true };
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 993 B |
@ -0,0 +1,63 @@
|
|||||||
|
window.onload = function() {
|
||||||
|
console.log('app.js');
|
||||||
|
|
||||||
|
var squares = document.getElementsByClassName('square');
|
||||||
|
for (var i=0; i < squares.length; i++) {
|
||||||
|
squares[i].addEventListener('click', play);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var turn = true;
|
||||||
|
|
||||||
|
var Xpositions = [],
|
||||||
|
Opositions = [];
|
||||||
|
|
||||||
|
var windex = [
|
||||||
|
[0, 1, 2], [3, 4, 5], [6, 7, 8],
|
||||||
|
[0, 3, 6], [1, 4, 7], [2, 5, 8],
|
||||||
|
[0, 4, 8], [2, 4, 6]
|
||||||
|
];
|
||||||
|
|
||||||
|
var play = function() {
|
||||||
|
if (!this.className.includes("x") && !this.className.includes("o")) {
|
||||||
|
if (turn) {
|
||||||
|
this.innerHTML = '<img src="images/x.png"/>';
|
||||||
|
this.className += ' x';
|
||||||
|
Xpositions.push(this.id);
|
||||||
|
} else {
|
||||||
|
this.innerHTML = '<img src="images/o.png"/>';
|
||||||
|
this.className += ' o';
|
||||||
|
Opositions.push(this.id);
|
||||||
|
}
|
||||||
|
turn = !turn;
|
||||||
|
checkWin();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var checkWin = function() {
|
||||||
|
var squares = document.getElementsByClassName('square');
|
||||||
|
if (checkPositions(Xpositions)) {
|
||||||
|
for (var i=0; i < squares.length; i++) {
|
||||||
|
squares[i].innerHTML = '<img src="images/egg.png"/>'
|
||||||
|
}
|
||||||
|
} else if (checkPositions(Opositions)) {
|
||||||
|
for (var j=0; j < squares.length; j++) {
|
||||||
|
squares[j].innerHTML = '<img src="images/depression.png"/>'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var checkPositions = function(playerPositions) {
|
||||||
|
for (var i=0; i < windex.length; i++) {
|
||||||
|
var hits = 0;
|
||||||
|
for (var j=0; j < windex[i].length; j++) {
|
||||||
|
for (var k=0; k < playerPositions.length; k++) {
|
||||||
|
if (windex[i][j] == playerPositions[k]) {
|
||||||
|
hits++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hits == 3) { return true };
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||