0

I am new at JavaScript. I am trying to make Snakes and Ladders game with native JavaScript code as much as possible. My problem is that I can not move players from their initial position according to the random number generated when pressing on dice image. Can anyone help me on how to move players?enter image description here

var gameBoard = {
  createBoard: function(dimension, mount, intialPosition) {
    var mount = document.querySelector(mount);
    if (!dimension || isNaN(dimension) || !parseInt(dimension, 10)) {
      return false;
    } else {
      dimension = typeof dimension === 'string' ? parseInt(dimension, 10) : dimension;
      var table = document.createElement('table'),
        row = document.createElement('tr'),
        cell = document.createElement('td'),
        rowClone,
        cellClone;
      var output;
      for (var r = 0; r < dimension; r++) {
        rowClone = row.cloneNode(true);
        table.appendChild(rowClone);
        for (var c = 0; c < dimension; c++) {
          cellClone = cell.cloneNode(true);
          rowClone.appendChild(cellClone);
        }
      }
      mount.appendChild(table);
      output = gameBoard.enumerateBoard(table, intialPosition);
    }
    return output;
  },
  enumerateBoard: function(board) {
    var rows = board.getElementsByTagName('tr'),
      text = document.createTextNode(''),
      rowCounter = 1,
      size = rows.length,
      cells,
      cellsLength,
      cellNumber,
      odd = false,
      control = 0;
    for (var r = size - 1; r >= 0; r--) {
      cells = rows[r].getElementsByTagName('td');
      cellsLength = cells.length;
      rows[r].className = r % 2 == 0 ? 'even' : 'odd';
      odd = ++control % 2 == 0 ? true : false;
      size = rows.length;
      for (var i = 0; i < cellsLength; i++) {
        if (odd == true) {
          cellNumber = --size + rowCounter - i;
        } else {
          cellNumber = rowCounter;
        }
        cells[i].className = i % 2 == 0 ? 'even' : 'odd';
        cells[i].id = cellNumber;
        cells[i].appendChild(text.cloneNode());
        cells[i].firstChild.nodeValue = cellNumber;
        rowCounter++;
      }
    }
    var lastRow = rows[0].getElementsByTagName('td');
    lastRow[0].id = 'lastCell';
    var firstRow = rows[9].getElementsByTagName('td');
    firstRow[0].id = 'firstCell';
    intialPosition();
    return gameBoard;
  }
};
window.onload = (function(e) {
  gameBoard.createBoard(10, "#grid", intialPosition);
});

var face1 = new Image()
face1.src = "d1.gif"
var face2 = new Image()
face2.src = "d2.gif"
var face3 = new Image()
face3.src = "d3.gif"
var face4 = new Image()
face4.src = "d4.gif"
var face5 = new Image()
face5.src = "d5.gif"
var face6 = new Image()
face6.src = "d6.gif"

function rollDice() {
  var randomdice = Math.floor(Math.random() * 6) + 1;
  document.images["mydice"].src = eval("face" + randomdice + ".src")
  if (randomdice == 6) {
    alert('Congratulations! You got 6! Roll the dice again');
  }
  return randomdice;
}

function intialPosition() {
  $("#firstCell").append($("#player1"));
  $("#firstCell").append($("#player2"));

}
/*body {
    background-image: url('snakesandladder2.png');
    background-repeat: no-repeat;
    background-size: 100%;
    background-color: #4f96cb;
}*/

#game {
  width: 80%;
  margin-left: auto;
  margin-right: auto;
  display: table;
}
#gameBoardSection {
  border: 3px inset #0FF;
  border-radius: 10px;
  width: 65%;
  display: table-cell;
}
table {
  width: 100%;
}
td {
  border-radius: 10px;
  width: 60px;
  height: 60px;
  line-height: normal;
  vertical-align: bottom;
  text-align: left;
  border: 0px solid #FFFFFF;
  position: relative;
}
table tr:nth-child(odd) td:nth-child(even),
table tr:nth-child(even) td:nth-child(odd) {
  background-color: PowderBlue;
}
table tr:nth-child(even) td:nth-child(even),
table tr:nth-child(odd) td:nth-child(odd) {
  background-color: SkyBlue;
}
#lastCell {
  background-image: url('rotstar2_e0.gif');
  background-repeat: no-repeat;
  background-size: 100%;
}
#ladder {
  position: absolute;
  top: 300px;
  left: 470px;
  -webkit-transform: rotate(30deg);
  z-index: 1;
  opacity: 0.7;
}
#bigSnake {
  position: absolute;
  top: 20px;
  left: 200px;
  opacity: 0.7;
  z-index: 1;
}
#diceAndPlayerSection {
  background-color: lightpink;
  border: 1px;
  border-style: solid;
  display: table-cell;
  border-radius: 10px;
  border: 3px inset #0FF;
  width: 35%;
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title></title>
  <link href="StyleSheet1.css" rel="stylesheet" />
  <script src="jquery-2.1.4.min.js"></script>
</head>

<body>
  <div id="game">
    <div id="gameBoardSection">
      <div id="grid"></div>
      <div id="ladder">
        <img src="oie_eRDOY2iqd5oQ.gif" />
      </div>
      <div id="bigSnake">
        <img src="oie_485727sRN4KKBG.png" />
      </div>
      <div id="player1" style="position:absolute; top:10px; left:10px;">
        <img src="humanPiece.png" />
      </div>
      <div id="player2" style="position:absolute; top:15px; left:5px;">
        <img src="computerPiece.png" />
      </div>

    </div>
    <div id="diceAndPlayerSection">
      <div id="reset">
        <button type="button" name="reset">New Game</button>
      </div>
      <div>
        <button type="button" name="reset">Reset</button>
      </div>
      <div>
        <button type="button" name="addPlayer">Add Player</button>
      </div>
      <div id="diceSection">
        <img src="d1.gif" name="mydice" onclick="rollDice()" style="background-color: white;">
        <!--<h2 id="status" style="clear:left;"></h2>-->
      </div>
    </div>
  </div>

  <script src="JavaScript1.js"></script>

</body>

</html>

I fell miserable about not being able to finish the game. I really need help. Thanks in advance.

1 Answers1

1

Well, first of all this question has been already asked and answered on SO and table cells are just the same as usual elements :)

Since you're using jQuery anyway, you can use .detach()

var element = $('td:eq(0) span').detach();
$('td:eq(1)').append(element);

Here's a jsfiddle.

Or, as proposed in this answer, you can use a native js solution.

Community
  • 1
  • 1
Alexander Mikhalchenko
  • 4,525
  • 3
  • 32
  • 56