diff --git a/.vscode/settings.json b/.vscode/settings.json index aef8443..4c7ff40 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "liveServer.settings.port": 5501 -} \ No newline at end of file + "liveServer.settings.port": 5502 +} diff --git a/index.html b/index.html index 19d0dee..1898873 100644 --- a/index.html +++ b/index.html @@ -19,9 +19,25 @@

Welcome to Tic Tac Toe

- - - + + + + + + + + + + + + + + + + + + + diff --git a/scripts.js b/scripts.js index ba09e74..ad5c982 100644 --- a/scripts.js +++ b/scripts.js @@ -1,106 +1,109 @@ -// *********************** -// 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' - - - -// 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 +let curr +let board = [ + ["", "", ""], // <-- Row 1, index 0 + ["", "", ""], // <-- Row 2, index 1 + ["", "", ""] // <-- Row 3, index 2 +] 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) } + } +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}`) + document.getElementById(id).innerHTML = currentMarker; + const row = parseInt(id.charAt(0)); +const column = parseInt(id.charAt(2)); +board[row][column] = currentMarker; + checkForWin() + // changeMarker() +} +const changeMarker = () => { + if(currentMarker === "X"){ + currentMarker = "O" + } else { + currentMarker = "X" + } + // checkForWin() +} - - -// this function places the "currentMarker" inside the HTML element that was clicked and calls the "changeMarker" function. -const addMarker = (id) => { - - // @TODO-1: Open the console tab in your Chrome Inspector Tool and click on the top-left square to see what's logged to the console. - console.log(`*** The current marker is: ${currentMarker}. ***`) - console.log(`Therefore, a "${currentMarker}" should be placed in the square with the id: ${id}`) +const resetBoard = () => { - // @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() -} - - + const squares = document.getElementsByTagName("TD") ; + for (i=0; i < squares.length; i++) { + console.log(squares[i].id) + squares[i].innerHTML = null + } + 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; } -// This "changeMarker" function changes "X" to "O" in the "currentMarker" variable or "O" to "X" -const changeMarker = () => { - if(currentMarker === "X"){ - currentMarker = "O" - } else { - currentMarker = "X" - } } +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; } -// 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 - - // loops over the HTML Collection of TDs and clears out the Xs and Os - for (i=0; i < squares.length; i++) { - - // will log out the id of each square as it loops over them. - console.log(squares[i].id) +} - // sets the innerHTML to null to replace the "X" or "O" - squares[i].innerHTML = null - } -} \ No newline at end of file +checkForWin = () => { + if (horizontalWin() || verticalWin() || diagonalWin()) { + // window.alert("Player " + currentMarker + " won!") + window.alert(`Player ${currentMarker} won!`) + } + else { + changeMarker() + } + } + \ No newline at end of file