JSFiddle - React, Tailwind, and code Playground

by alwayshelping

HTML

<!DOCTYPE HTML>
<html>
    <title> 15 Slider Puzzle</title>
   
    <link rel="stylesheet" type="text/css" href="15 Slider.css" />
        <script src="15 Slider.js" type="text/javascript"></script>
    <head>
    <body onload = "initialize()">
      <h1>Slider Puzzle</h1>
      <div id="overall">
        <div id="puzzlearea">
          <!-- the following are the fifteen puzzle pieces -->
          <div>1</div>  <div>2</div>  <div>3</div>  <div>4</div>
          <div>5</div>  <div>6</div>  <div>7</div>  <div>8</div>
          <div>9</div>  <div>10</div> <div>11</div> <div>12</div>
          <div>13</div> <div>14</div> <div>15</div>
        </div>
        <div id="controls"></div>
        <button onclick = "start();">Start</button>
        <button onclick = "reset();">Reset</button>
      <br>
    Number Of Moves: <span id="Moves">0</span>
      </div><!--content-->
      <br>
    </head>
</html>

CSS

body {
    background-color: white;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-size: 14px;
}

#controls,
#overall,
#puzzlearea {
    width: 400px;
}

#controls {
    padding-top: 10px;
    text-align: center;
}

h1 {
    margin: 10px 0px;
    text-align: center;
}

/* Used to center the puzzle. */
#overall {
    margin-left: auto;
    margin-right: auto;
}

/* The area that holds the 15 puzzle pieces. */
#puzzlearea {
    font-size: 32px;
    height: 400px;
    padding: 0px;
    position: relative;
}

/* This class should be applied to each of the 15 puzzle pieces. */
.puzzlepiece {
    border: 2px solid black;
    height: 96px;
    line-height: 96px;
    position: absolute;
    text-align: center;
    vertical-align: middle;
    width: 96px;
}

/* This class should be applied to a puzzle piece that can be moved. */
.movablepiece:hover {
    border-color: red;
    color: #006600;
    text-decoration: underline;
}

JavaScript

var gamePiece;
var notify;
var timer;
var spaceY;
var spaceX;
var ticker;
var totalMoves;
var hasStopped = false;

function initialize() {
    var puzzleArea = document.getElementById("puzzlearea");
    gamePiece = puzzleArea.getElementsByTagName("div"); //retrieve element within puzzlearea

    for (var i = 0; i < gamePiece.length; i++) //applies features to each puzzle piece 

    {

        gamePiece[i].className = "puzzlepiece"; //setting up the puzzle piece code

        gamePiece[i].style.left = (i % 4 * 100) + "px"; //calculates the position for puzzle pieces from the left of the screen

        gamePiece[i].style.top = (parseInt(i / 4) * 100) + "px"; //calculates the position for puzzle pieces from the top of the screen






        gamePiece[i].onmouseover = function () //applies features when mouse moves over puzzle pieces

        {
            if (checkMove(parseInt(this.innerHTML))) //checks whenever a move is made

            {

                this.style.border = "3px solid red"; //changes to red when a puzzle piece is near an empty space

                this.style.color = "#006600"; //text color changes to green when a puzzle piece is near an empty space

                this.style.textDecoration = "underline"; //underlines the number of the puzzle piece piece
            //console.log(totalMoves);
               

            }
        }


        gamePiece[i].onmouseout = function () //activates whenever mouse moves out of puzzle piece

        {

            this.style.border = "2px solid black"; //reverts to its original size border 

            this.style.color = "#000000"; //reverts to original text color

            this.style.textDecoration = "none"; //reverts to original text state

        }


        gamePiece[i].onclick = function () //activates when mouse clicks on a puzzle piece
        {
            if (checkMove(parseInt(this.innerHTML))) //checks whether or not the puzzle piece can move into an empty space

            {
    ...