diff --git a/index.html b/index.html
index 19d0dee..b317359 100644
--- a/index.html
+++ b/index.html
@@ -19,9 +19,21 @@
Welcome to Tic Tac Toe
- |
- |
- |
+ |
+ |
+ |
+
+
+
+ |
+ |
+ |
+
+
+
+ |
+ |
+ |
diff --git a/scripts.js b/scripts.js
index ba09e74..42020a1 100644
--- a/scripts.js
+++ b/scripts.js
@@ -1,26 +1,30 @@
-// ***********************
-// INSTRUCTIONS
-// ***********************
-// 1. Read the code below one block at a time.
-// 2. Look for the @TODOs, and figure out how to fix them.
- // next to each @TODO you will find tasks that need to be finished
-
-// The variable will change from X to O based on what player turn it is. We need to hold this so we can place an X or O on the board when they're clicked.
let currentMarker = 'X'
+let board = [
+ ["", "", ""], // <-- Row 1, index 0
+ ["", "", ""], // <-- Row 2, index 1
+ ["", "", ""] // <-- Row 3, index 2
+]
+checkForWin = () => {
+ if (horizontalWin() || verticalWin() || diagonalWin()){
+ window.alert(`Player ${currentMarker} Wins!`)
+ resetBoard()
+ }
+ else {
+ changeMarker()
+ }
+}
-// this "handleClick" function is called when a box is clicked. Here, "element" will hold the same value as "this" does in the HTML.
-// "this" is a special word in JS but "element" could have been "thing" or "el" or whatever we wanted it to be as long as we use it again in the "console.log" statement
+
const handleClick = (element) => {
- // this uses the "log" method on the "console" to log out the element's id so we can see it with our human eyes
+
console.log(`The element you clicked on has an id: ${element.id}`)
- // this next line prevents an X being changed to an O or an O being changed to an X by...
- // checking to see if the square clicked has anything in it, if not continue
+
if(!document.getElementById(element.id).innerHTML){
addMarker(element.id)
}
@@ -29,13 +33,6 @@ const handleClick = (element) => {
-
-
-
-
-
-
-
// this function places the "currentMarker" inside the HTML element that was clicked and calls the "changeMarker" function.
const addMarker = (id) => {
@@ -43,22 +40,18 @@ const addMarker = (id) => {
console.log(`*** The current marker is: ${currentMarker}. ***`)
console.log(`Therefore, a "${currentMarker}" should be placed in the square with the id: ${id}`)
- // @TODO-2: Build a line of code that will set the innerHTML property of the element that was clicked to the "currentMarker"
-
- // @TODO-2.5: MIX & MATCH, You will need the following pieces of code to build that line:
- // = currentMarker
- // .getElementById(id)
- // document
- // .innerHTML
-
- changeMarker()
-}
-
+ document.getElementById(id).innerHTML = currentMarker
+ const row = parseInt(id.charAt(0))
+ const column = parseInt(id.charAt(2))
+ board[row][column] = currentMarker;
+ checkForWin()
+
+}
@@ -67,35 +60,25 @@ const addMarker = (id) => {
const changeMarker = () => {
if(currentMarker === "X"){
currentMarker = "O"
- } else {
+ }
+
+ else {
currentMarker = "X"
}
+
}
-
-
-
-
-
-
-
// This "resetBoard" function is called when the user clicks on the "Restart" button.
const resetBoard = () => {
- // @TODO-3: To make your "Restart" button work you'll need to build a line of code here that:
- // collects all of the "td" elements into an HTML Collection: https://www.w3schools.com/jsref/dom_obj_htmlcollection.asp
-
- // @TODO-3.5: MIX & MATCH, You will need the following pieces of code to build that line:
- // squares
- // .getElementsByTagName("TD")
- // =
- // document
- // const
+
+ const squares = document.getElementsByTagName("TD")
+
// loops over the HTML Collection of TDs and clears out the Xs and Os
- for (i=0; i < squares.length; i++) {
+ for (let i=0; i < squares.length; i++) {
// will log out the id of each square as it loops over them.
console.log(squares[i].id)
@@ -103,4 +86,76 @@ const resetBoard = () => {
// sets the innerHTML to null to replace the "X" or "O"
squares[i].innerHTML = null
}
-}
\ No newline at end of file
+
+ location.reload()
+ changeMarker()
+
+
+}
+
+const horizontalWin = () => {
+
+ if((board[0][0] == "X" && board[0][1] == "X" && board[0][2] == "X")
+ || (board[0][0] == "O" && board[0][1] == "O" && board[0][2] == "O")){
+ return true;
+ }
+
+ else if ((board[1][0] == "X" && board[1][1] == "X" && board[1][2] == "X")
+ || (board[1][0] == "O" && board[1][1] == "O" && board[1][2] == "O")){
+ return true;
+ }
+
+ else if ((board[2][0] == "X" && board[2][1] == "X" && board[2][2] == "X")
+ || (board[2][0] == "O" && board[2][1] == "O" && board[2][2] == "O")){
+ return true;
+ }
+
+ else {
+ return false;
+ }
+
+}
+
+const verticalWin = () => {
+
+ if((board[0][0] == "X" && board[1][0] == "X" && board[2][0] == "X")
+ || (board[0][0] == "O" && board[1][0] == "O" && board[2][0] == "O")){
+ return true;
+}
+
+else if ((board[0][1] == "X" && board[1][1] == "X" && board[2][1] == "X")
+ || (board[0][1] == "O" && board[1][1] == "O" && board[2][1] == "O")){
+ return true;
+}
+
+else if ((board[0][2] == "X" && board[1][2] == "X" && board[2][2] == "X")
+ || (board[0][2] == "O" && board[1][2] == "O" && board[2][2] == "O")){
+ return true;
+}
+
+else {
+ return false;
+}
+
+
+}
+
+const diagonalWin = () => {
+
+ if((board[0][0] == "X" && board[1][1] == "X" && board[2][2] == "X")
+ || (board[0][0] == "O" && board[1][1] == "O" && board[2][2] == "O")){
+ return true;
+}
+
+else if ((board[0][2] == "X" && board[1][1] == "X" && board[2][0] == "X")
+ || (board[0][2] == "O" && board[1][1] == "O" && board[2][0] == "O")){
+ return true;
+}
+
+else {
+ return false;
+}
+
+
+}
+