About: I write code as a hobby for now. * C#, Flutter, Unity, HTML-CSS-JS *
Location:
Bursa, Turkey
Joined:
Sep 15, 2022
Tic Tac Toe Game With HTML and JS
Publish Date: Sep 19 '22
0 0
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>TicTacToe</title>
<style>*{box-sizing:border-box;margin:0;padding:0;}html,body{background-color:#14bdac;width:100%;height:100%;padding:1.5rem;}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;width:80%;height:100%;margin:auto;background-color:#70757a;}.grid>div{background-color:#3fecdb;cursor:pointer;font-size:3rem;font-weight:bold;color:#fff;display:flex;flex-direction:column;justify-content:center;transition:all.5s;}.grid>div:hover{opacity:.6;}.grid>div>div{text-align:center;}</style>
</head>
<body><divid="grid"class="grid"></div>
<script>constgrid=document.getElementById('grid');varwon=false;varfreezeGame=false;varsquaresHTML='';varsqId=0;varmoveX=true;constsquares=[];for(letr=0;r<3;r++){for(letc=0;c<3;c++){sqId++;squaresHTML+=`<div id="${sqId}"><div></div></div>`;squares.push({id:sqId,move:null});}}grid.innerHTML=squaresHTML;constsquaresEL=document.querySelectorAll('#grid > div');squaresEL.forEach(s=>s.addEventListener('click',()=>{if(!freezeGame){square=squares.find(sq=>sq.id==s.id);if(!square.move){moveX=!moveX;square.move=moveX?'X':'O';s.querySelector('div').innerText=moveX?'X':'O';s.style.backgroundColor=moveX?'royalblue':'tomato';checkGame();}}}));functionwonGame(one,two,three,character){freezeGame=true;won=true;letanim=true;if(one==null&&two==null&&three==null&&character==null){gameOverAnimation(anim,function(){squaresEL.forEach(s=>s.style.backgroundColor=anim?'green':'yellow');anim=!anim;},function(){alert('DRAW!');location.reload();});return;}gameOverAnimation(anim,function(){squaresEL[one].style.backgroundColor=anim?'green':'yellow';squaresEL[two].style.backgroundColor=anim?'green':'yellow';squaresEL[three].style.backgroundColor=anim?'green':'yellow';anim=!anim;},function(){alert(`${character} won`);location.reload();});}functiongameOverAnimation(anim,animCallback,overCallback){setInterval(function(){animCallback();},200);setTimeout(function(){overCallback();},2000);}functioncheckGame(){// Rows// first rowif(squares[0].move=='X'&&squares[1].move=='X'&&squares[2].move=='X'){wonGame(0,1,2,'X');}elseif(squares[0].move=='O'&&squares[1].move=='O'&&squares[2].move=='O'){wonGame(0,1,2,'O');}// second rowif(squares[3].move=='X'&&squares[4].move=='X'&&squares[5].move=='X'){wonGame(3,4,5,'X');}elseif(squares[3].move=='O'&&squares[4].move=='O'&&squares[5].move=='O'){wonGame(3,4,5,'O');}// third rowif(squares[6].move=='X'&&squares[7].move=='X'&&squares[8].move=='X'){wonGame(6,7,8,'X');}elseif(squares[6].move=='O'&&squares[7].move=='O'&&squares[8].move=='O'){wonGame(6,7,8,'O');}// first columnif(squares[0].move=='X'&&squares[3].move=='X'&&squares[6].move=='X'){wonGame(0,3,6,'X');}elseif(squares[0].move=='O'&&squares[3].move=='O'&&squares[6].move=='O'){wonGame(0,3,6,'O');}// second columnif(squares[1].move=='X'&&squares[4].move=='X'&&squares[7].move=='X'){wonGame(1,4,7,'X');}elseif(squares[1].move=='O'&&squares[4].move=='O'&&squares[7].move=='O'){wonGame(1,4,7,'O');}// third columnif(squares[2].move=='X'&&squares[5].move=='X'&&squares[8].move=='X'){wonGame(2,5,8,'X');}elseif(squares[2].move=='O'&&squares[5].move=='O'&&squares[8].move=='O'){wonGame(2,5,8,'O');}// left crossif(squares[0].move=='X'&&squares[4].move=='X'&&squares[8].move=='X'){wonGame(0,4,8,'X');}elseif(squares[0].move=='O'&&squares[4].move=='O'&&squares[8].move=='O'){wonGame(0,4,8,'O');}// right crossif(squares[2].move=='X'&&squares[4].move=='X'&&squares[6].move=='X'){wonGame(2,4,6,'X');}elseif(squares[2].move=='O'&&squares[4].move=='O'&&squares[6].move=='O'){wonGame(2,4,6,'X');}constnullSquaresNum=squares.filter(s=>s.move==null);if(nullSquaresNum.length==0&&!won){wonGame(null,null,null,null);}}</script>
</body>
</html>