15 puzzle make only the numbers/boxes near the empty one moveable

1.3k views Asked by At

I'm trying to create a 15 puzzle game(like this one:http://migo.sixbit.org/puzzles/fifteen/) using jquery and javascript. I have come pretty far with the code but now I'm stuck with a little problem. My problem is that all boxes/numbers are moveable when I only want the ones left/right/under/over to the empty one to be moveable.

  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script>

    $(document).ready(function(){ // Wait for the page to finish loading

      var currentBoard = new Array(' ','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15');

      //
      // Randomize the array values 
      for(i=0 ; i++<100 ; x = Math.floor(Math.random()*16), y = Math.floor(Math.random()*16), currentBoard[x] = currentBoard.splice(y, 1, currentBoard[x])[0]);


      repaint(); // Redraw puzzle board     

      //
      // Function repaint()
      // Redraw puzzle board
      function repaint(){
        currentString = "";
        for(i=1;i<17;i++){
          currentString += "<input type='button'  id='" + i + "' value='" + currentBoard[i-1] + "' />";
          if ( (i%4) == 0 ) currentString += "<br />";
        }
        $("#board").html(currentString);
      }

      //
      // Function used to swap elements in array currentBoard ; input is the element indexes
      function swapArrElems(index_a, index_b) {
          var temp = currentBoard[index_a];
          currentBoard[index_a] = currentBoard[index_b];
          currentBoard[index_b] = temp;
      }

      //
      // Wait for the upcoming click events from the puzzle board.
      $('#board').click(function(event){
        current = $(event.target).attr("id")-1;

        for(i=0;i<16;i++) if( currentBoard[i]==0 ) zeroIndex = i; // Get the index of the empty square

        swapArrElems(current, zeroIndex);
        repaint();

      });


     });

  </script>

  <style>
    input[type="button"] { width: 80px; height: 80px; font-size: 30px; }
  </style>
</head>


<body>

<div id="board">
</div>

0

There are 0 answers