A game of TicTacToe written in JavaScript ⭕

  Рет қаралды 100,231

Bro Code

Bro Code

Күн бұрын

#JavaScript #TicTacToe #game
JavaScript TicTacToe game practice tutorial example explained

Пікірлер: 89
@BroCodez
@BroCodez 2 жыл бұрын
const cells = document.querySelectorAll(".cell"); const statusText = document.querySelector("#statusText"); const restartBtn = document.querySelector("#restartBtn"); const winConditions = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6] ]; let options = ["", "", "", "", "", "", "", "", ""]; let currentPlayer = "X"; let running = false; initializeGame(); function initializeGame(){ cells.forEach(cell => cell.addEventListener("click", cellClicked)); restartBtn.addEventListener("click", restartGame); statusText.textContent = `${currentPlayer}'s turn`; running = true; } function cellClicked(){ const cellIndex = this.getAttribute("cellIndex"); if(options[cellIndex] != "" || !running){ return; } updateCell(this, cellIndex); checkWinner(); } function updateCell(cell, index){ options[index] = currentPlayer; cell.textContent = currentPlayer; } function changePlayer(){ currentPlayer = (currentPlayer == "X") ? "O" : "X"; statusText.textContent = `${currentPlayer}'s turn`; } function checkWinner(){ let roundWon = false; for(let i = 0; i < winConditions.length; i++){ const condition = winConditions[i]; const cellA = options[condition[0]]; const cellB = options[condition[1]]; const cellC = options[condition[2]]; if(cellA == "" || cellB == "" || cellC == ""){ continue; } if(cellA == cellB && cellB == cellC){ roundWon = true; break; } } if(roundWon){ statusText.textContent = `${currentPlayer} wins!`; running = false; } else if(!options.includes("")){ statusText.textContent = `Draw!`; running = false; } else{ changePlayer(); } } function restartGame(){ currentPlayer = "X"; options = ["", "", "", "", "", "", "", "", ""]; statusText.textContent = `${currentPlayer}'s turn`; cells.forEach(cell => cell.textContent = ""); running = true; } Document Tic Tac Toe Restart .cell{ width: 75px; height: 75px; border: 2px solid; box-shadow: 0 0 0 2px; line-height: 75px; font-size: 50px; cursor: pointer; } #gameContainer{ font-family: "Permanent Marker", cursive; text-align: center; } #cellContainer{ display: grid; grid-template-columns: repeat(3, auto); width: 225px; margin: auto; }
@nouser1715
@nouser1715 2 жыл бұрын
thanks so much !!
@cod3ddy74
@cod3ddy74 Жыл бұрын
thanks bro bro code
@user-fb5ob7vs4r
@user-fb5ob7vs4r Жыл бұрын
hhvv
@prathamrai-uv4vl
@prathamrai-uv4vl 10 ай бұрын
index.js:23 Uncaught TypeError: Cannot read properties of null (reading 'addEventListener') on the line need helppppp........... const cells = document.querySelectorAll(".cell"); const statusText = document.querySelector("#statusText"); const restartBtn = document.querySelector("#restartBtn"); const winConditions =[ [0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6] ]; let options = ["", "", "", "", "", "", "", "", ""]; let currentPlayer= "X"; let running = false; initializeGame(); function initializeGame(){ cells.forEach(cell => cell.addEventListener("click", cellClicked)); restartBtn.addEventListener("click", restartGame); statusText.textContent = `${currentPlayer}'s turn`; running = true; } function cellClicked(){ const cellIndex = this.getAttribute("cellIndex"); if(options[cellIndex] != "" || !running) { return; } updateCell(this, cellIndex); checkWinner(); } function updateCell(cell, index){ options[index] = currentPlayer; cell.textContent = currentPlayer; } function changePlayer(){ currentPlayer = (currentPlayer == "X") ? "O": "X"; statusText.textContent = `${currentPlayer}'s turn`; } function checkWinner(){ let roundWon = false; for(let i = 0; i < winConditions.length; i++ ){ const conditions = winConditions[i]; const cellA = options[condition[0]]; const cellB = options[condition[1]]; const cellC = options[condition[2]]; if(cellA == "" || cellB == "" || cellC){ roundWon = true; break; } } if(roundWon){ statusText.textContent = `${currentPlayer} wins!`; running = false; } else if(!options.includes("")){ statusText.textContent = `Draw!`; running = false; } else{ changePlayer(); } } function restartGame(){ currentPlayer = "X"; options = ["", "", "", "", "", "", "", "", ""]; statusText.textContent = `${currentPlayer}'s turn`; celss.forEach(cell => cell.textContent) }
@myematic
@myematic 8 ай бұрын
Thank you!
@eumm11
@eumm11 Жыл бұрын
i'm learning to code and built this game during the last few days but my solution it's so clumsy compared to yours.. thank you for sharing this, is very helpful to learn, your solution is amazing!
@richardchimama8807
@richardchimama8807 Жыл бұрын
I have learned a lot in a few minutes. Thank you!
@ShimmerBodyCream
@ShimmerBodyCream 11 ай бұрын
Thank you for including the code in the comment! I had my HTML filed messed up. Thank you for sharing your project with us.
@pedrocossio9462
@pedrocossio9462 Жыл бұрын
You have saved my life made understanding Javascript a bit easier for me
@mycreations45
@mycreations45 Жыл бұрын
😮😮
@santiagovalle450
@santiagovalle450 Жыл бұрын
BROOO thankyou so much, this really helped and the tutorial was really easy to use as well :)
@fasteditsyt
@fasteditsyt Жыл бұрын
Yo Bro Code! Thanks for this play along video. I learned some new things along the way!
@qqszad
@qqszad 2 жыл бұрын
bro your videos help so much. thank 10/10
@RyanDoi
@RyanDoi Жыл бұрын
I love this guy
@samoraselim6338
@samoraselim6338 2 ай бұрын
Thanx for your simplicity ,tried to do this game using another video was difficult, too much code lines Thank you for including the code in the comment😍
@saiyyaaratrading4432
@saiyyaaratrading4432 Жыл бұрын
after the end of the match, cant we add any other tag for sharing our result with others in social media apps?
@charlestiffany6533
@charlestiffany6533 4 ай бұрын
since we are not saving anything in any kind of storage we can just just do this function restartGame(){ location.reload(); }; to reset the game. im pretty new to js so maybe theres a good reason bro didnt do this but it does work.
@ashwinr8317
@ashwinr8317 Жыл бұрын
please upload a Zero to hero video for wordpress bro ! the way of your teaching was just amazing accept my request bro 😫🙏.
@noyaaa1904
@noyaaa1904 Жыл бұрын
hey, i have a question. Do you maybe have the code just in Pyscript?
@faiqchanel5001
@faiqchanel5001 Жыл бұрын
Thanks for help love you bro
@dragomirpetrov5600
@dragomirpetrov5600 2 жыл бұрын
Are any of these available in Java, or should I just mod it 🤔
@lautaroscolamiero8384
@lautaroscolamiero8384 7 ай бұрын
Nice code man thanks!
@user-ve4to6yi5v
@user-ve4to6yi5v Жыл бұрын
thanks, alot of help.
@cnox910
@cnox910 2 жыл бұрын
Continue dude'
@radhikaiyer4119
@radhikaiyer4119 Жыл бұрын
excellent
@noahnyman4420
@noahnyman4420 Жыл бұрын
underrated
@sanathrayala2745
@sanathrayala2745 2 жыл бұрын
Great video Also do a video on todo list
@lucabinder9829
@lucabinder9829 Жыл бұрын
🔥
@CoriePrater
@CoriePrater 2 ай бұрын
Thank you for the learning experience! Is there a way to change the X and O's to an image? Would I have to stare the image in a variable? Thank you again!
@michaellariosa3406
@michaellariosa3406 22 күн бұрын
const yourCell = document.querySelector(".yourCell"); const insertX = document.createElement("img"); const insertO = document.createElement("img"); insertX.src = imgX.jpg; insertO.src = imgO.jpg; yourCell.append(insertX);
@classicimaging21
@classicimaging21 8 ай бұрын
Got it 🤩
@Error-ff2sg
@Error-ff2sg 2 жыл бұрын
Uhh can i ask something Does any reason for you not using onclick or you just not want use it ?
@travel_horizen
@travel_horizen 9 ай бұрын
using addEventListener makes the code look more maintained and readable plus easy
@yashu_vocalist
@yashu_vocalist 11 ай бұрын
08:35 is hoisting of the 1st function.
@abdullahjama8404
@abdullahjama8404 4 ай бұрын
easy loved it except the last part thats the wining game foreach with some and every method can run through the global variable winning condition, otherwise loved it, wish u implemented some Ai too , amazing and very clean code , can u talk about writing clean code?
@rajat-s-kale1771
@rajat-s-kale1771 2 жыл бұрын
Awesome
@samifly2753
@samifly2753 10 ай бұрын
👍
@user-lq3bm4zp3x
@user-lq3bm4zp3x 5 ай бұрын
bro my tic tac is showing on the website but, all the gaps were autofilled, even the restart buttons are not working.So i checked my whole code,but there is no mistake.how to solve this problem.Any suggetions pls?
@ehidaniel2498
@ehidaniel2498 Жыл бұрын
please why did you pass in this and cellIndex as arguments in the updateCell() function under the cellClicked() function 🙂
@izikki11499
@izikki11499 Жыл бұрын
How I understand it: Pretty much, THIS is referring to the cell you just clicked (THIS one), And the cellIndex comes from the HTML elements we made for the cells, we made that attribute named ‘cellIndex’ and gave it a number for what cell it is in our options[ ] array Pretty much, you pass those in to the updateCell( ) and it updates whatever cell you clicked on(THIS), by setting its text content to whatever the current player is (x or o) and uses the cell index attribute to update the options [] array, where all our cells are which are empty to start with Hope I explained it okay :-P
@michaellariosa3406
@michaellariosa3406 22 күн бұрын
It tells the updateCell function which cell to change the textContent for. You're passing it as 'this', calling it 'cell' in the updateCell function, and then updating the text of it via cell.textContent = currentPlayer. He could have done the update of the text and the addition of the clicked sell to the options array in the cellClicked function, but to keep it clean, he did it as a separate function and just passed it along. like this: function cellClicked () { const cellIndex = this.getAttribute("cellIndex") console.log(this) if (options[cellIndex] != "" || !running){ return; } options[cellIndex] = player; this.textContent = player; checkWinner(); }
@radhikaiyer4119
@radhikaiyer4119 Жыл бұрын
eccellent
@Youss02
@Youss02 Жыл бұрын
hey bro, can you help me? i copied your css like in the video , but the scare wont place as i wanted can you help me? srry for my bad english
@Youss02
@Youss02 Жыл бұрын
square*
@uchennafelix3829
@uchennafelix3829 Жыл бұрын
Sir, is it possible to change the color of the "X" and the "O" I mean "X" can be red and the other green
@travel_horizen
@travel_horizen 9 ай бұрын
Yes its actually possible you can do it with css
@MeowKiritoMeow
@MeowKiritoMeow 8 ай бұрын
just go to the cell class and change the color attribute
@michaellariosa3406
@michaellariosa3406 22 күн бұрын
function updateCell (cell, index) { options[index] = currentPlayer; if (currentPlayer == "X") { document.getElementById(`cell${index}`).style.color = "red"; cell.textContent = currentPlayer; } else if (currentPlayer == "O") { document.getElementById(`cell${index}`).style.color = "green"; cell.textContent = currentPlayer; } }
@EmilianEKAMA
@EmilianEKAMA 2 ай бұрын
I tried coping your code words for words but it didn’t work
@Kaylebsyoutube
@Kaylebsyoutube 9 күн бұрын
It won’t let me actually play it I tried and copied all of the stuff but it doesn’t work the text, button is there but not working, and board is good though (no errors in vscode though)
@irawadeep.6607
@irawadeep.6607 Жыл бұрын
Hi, I find some error when the game end and got the winner. The current winner is not match with the result ex. the "X" win but it display "O" win. Is there any suggestion to fix that please?
@user-mf2ov2dn5q
@user-mf2ov2dn5q 9 ай бұрын
Im facing the same problem! Did u fix it?
@irawadeep.6607
@irawadeep.6607 9 ай бұрын
@@user-mf2ov2dn5q no, not yet🥹
@hillarymapondera4122
@hillarymapondera4122 4 ай бұрын
Hi @@user-mf2ov2dn5q I noticed the same issue in my code however I managed to fix the issue. What I understood was that suppose currentPlayer === "X" it means "X" is about to make his move and if "X" wins because of the order our functions are being called the changePlayer() function is called first before Checkwinner() function thus making the currentPlayer === "0" as a result when we display the winner if we use the currentPlayer variable it will be "0" thus it will be the opposite of the true winner. so to Fix this issue before displaying who the winner is, I reversed the current player as follows winner = (currentPlayer === "X") ? "O": "X"; and then display the winner on winning statusText. hope its gonna be helpful :)
@gamerfx685
@gamerfx685 Жыл бұрын
am stuck at status text it says handwork.html:71 Uncaught TypeError: Cannot set properties of null (setting 'textContent') at initializeGame
@travel_horizen
@travel_horizen 9 ай бұрын
The error message you're encountering, "Uncaught TypeError: Cannot set properties of null (setting 'textContent')" typically indicates that you are trying to set the textContent property of a variable that is currently null. This can happen when you're trying to manipulate an element in your HTML document using JavaScript, but the element with the specified identifier doesn't exist in the DOM.
@RtzVi_
@RtzVi_ Жыл бұрын
I am new in the code things so I have a question. After I made the game how can I see the game like he sees it in the right of the screen
@kubitte
@kubitte Жыл бұрын
If you are using visual studio code, download ''live server'' extension. Then go to your html file and right click and select ''open with live server''.
@rainbowpizza7599
@rainbowpizza7599 Жыл бұрын
Open two tabs simultaneously side-by-side, the editor where you code and the browser where it displays. Change the code and refresh after every save or install the live server extension 🥂
@rahulchaudhary3508
@rahulchaudhary3508 Жыл бұрын
I'm getting a type error saying this.getAttribute is not a method, any help?
@ziga1998
@ziga1998 Жыл бұрын
Remove the cellClicked function, and write the code directly inside cell.addEventListener().. Like this cells.forEach((cell) => cell.addEventListener("click", (e) => { const cellIndex = e.target.getAttribute("cellIndex"); console.log(cellIndex); if (options[cellIndex] != "" || !running) { return; } updateCell(e.target, cellIndex); changePlayer(); checkWinner(); }) );
@fireworkcat7786
@fireworkcat7786 10 ай бұрын
game stops working after one win, gonna try and fix that
@ji_nvnc4113
@ji_nvnc4113 Жыл бұрын
when I click on the restartBtn I can't replay, does someone has an idea ?
@recursion.
@recursion. Жыл бұрын
post your code it's prob some error somehwere
@joyceasante8292
@joyceasante8292 Жыл бұрын
For anyone who has the same issue, check to see if you made a typo in your code. The reason why my code was not working is because I wrote "#restartBn" instead of "#restartBtn".
@wlw113
@wlw113 Жыл бұрын
I have error at 25 line restartBtn.addEventListener is not a function. Pls help
@Megapolis199
@Megapolis199 Жыл бұрын
Same shit for restartBtn. Cannot read properties of null (reading 'addEventListener')
@artenisalija
@artenisalija Жыл бұрын
you need to put the script tag after the HTML in the index.html and make sure you have used # when declaring the const and the right id. this solved it for me.
@artenisalija
@artenisalija Жыл бұрын
@@Megapolis199 you need to put the script tag after the HTML in the index.html and make sure you have used # when declaring the const and the right id. this solved it for me.
@michaellariosa3406
@michaellariosa3406 22 күн бұрын
@@artenisalija or put it at the beginning and use "defer".. like this:
@bodyaoliynik2350
@bodyaoliynik2350 2 жыл бұрын
Please someone give me advise.How I can won't forget what I learned?
@BenDover-qr3ib
@BenDover-qr3ib 11 ай бұрын
do it over and but like in the sort of a project
@travel_horizen
@travel_horizen 9 ай бұрын
Practice
@nivethashankar8221
@nivethashankar8221 7 ай бұрын
RestartGame is not a function. Pls help
@michaellariosa3406
@michaellariosa3406 22 күн бұрын
lowercase "r"
@emersonperalesvillanueva8568
@emersonperalesvillanueva8568 Жыл бұрын
and the code in github? xd
@user-wy2hn8ul6b
@user-wy2hn8ul6b Жыл бұрын
Didn’t work😢
@supreme-soft
@supreme-soft Жыл бұрын
Instead of just writing code in bullet speed please do some explanation as well my Big Bro 💝.
@JustinUltamit
@JustinUltamit 4 күн бұрын
random comment random comment
@linelaine3597
@linelaine3597 2 жыл бұрын
why it did not word at “ restartBtn.addEventListener(“click”, resetGame); ”😢
@dhiyanabdurazack5257
@dhiyanabdurazack5257 Жыл бұрын
it is onclick
@fazrikurniawan9643
@fazrikurniawan9643 Жыл бұрын
Go back to index js, ensure that cons no 2 & 3 "document.queryselector" not "document.queryselectorAll"
@artenisalija
@artenisalija Жыл бұрын
you need to put the script tag after the HTML in the index.html and make sure you have used # when declaring the const and the right id. this solved it for me.
@yushgisor2125
@yushgisor2125 Ай бұрын
i did it like this ,document.getElementById("restartBtn").onclick = restartGame();
A game of Snake written in JavaScript 🐍
28:50
Bro Code
Рет қаралды 64 М.
Build this JS calculator in 15 minutes! 🖩
15:20
Bro Code
Рет қаралды 351 М.
$10,000 Every Day You Survive In The Wilderness
26:44
MrBeast
Рет қаралды 71 МЛН
ХОТЯ БЫ КИНОДА 2 - официальный фильм
1:35:34
ХОТЯ БЫ В КИНО
Рет қаралды 2,6 МЛН
Minimax Algorithm for Tic Tac Toe (Coding Challenge 154)
26:33
The Coding Train
Рет қаралды 791 М.
A game of Pong written in JavaScript 🏓
24:48
Bro Code
Рет қаралды 72 М.
Build an Awesome Version of Tic Tac Toe in React Tutorial
53:02
Coding With Adam
Рет қаралды 16 М.
THE ODIN PROJECT: TIC TAC TOE | PROJECT SOLUTION
44:51
Dors Coding School
Рет қаралды 8 М.
How to Build Tic Tac Toe with JavaScript, HTML and CSS - Tutorial
49:15
Coding With Adam
Рет қаралды 25 М.
Build Tic Tac Toe With JavaScript - Tutorial
41:46
Web Dev Simplified
Рет қаралды 352 М.
Python Tic Tac Toe game ⭕
21:30
Bro Code
Рет қаралды 131 М.
♟️ Code CHESS in JavaScript (Super simple!)
1:28:06
Code with Ania Kubów
Рет қаралды 128 М.
A stopwatch written in JavaScript ⏱️
12:14
Bro Code
Рет қаралды 30 М.
The Easiest Javascript Game Ever
8:34
KnifeCircus
Рет қаралды 949 М.
The power button can never be pressed!!
0:57
Maker Y
Рет қаралды 55 МЛН
Pratik Cat6 kablo soyma
0:15
Elektrik-Elektronik
Рет қаралды 8 МЛН
Nokia 3310 versus Red Hot Ball
0:37
PressTube
Рет қаралды 3,8 МЛН
ПК с Авито за 3000р
0:58
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 1,7 МЛН
How much charging is in your phone right now? 📱➡️ 🔋VS 🪫
0:11