2016-01-07 34 views
6

Wykonuję grę Węże i drabiny. Chcę dodać gracza 1 do pierwszej komórki na planszy, ale nie działa tak, jak się spodziewałem. Potrzebuję pomocy, jak go rozwiązać. enter image description hereDodaj div do td

Jest to kod użyłem

var gameBoard = { 
 
    createBoard: function(dimension, mount) { 
 
    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); 
 
    } 
 
    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'; 
 
    return gameBoard; 
 
    } 
 
}; 
 

 
window.onload = (function(e) { 
 
    gameBoard.createBoard(10, "#grid"); 
 
}); 
 

 
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 move() { 
 
    $("#firstCell").append("#player1"); 
 
} 
 
move();
/*body { 
 
    background-image: url('snakesandladder2.png'); 
 
    background-repeat: no-repeat; 
 
    background-size: 100%; 
 
    background-color: #4f96cb; 
 
}*/ 
 

 
table { 
 
    width: 100%; 
 
} 
 
td { 
 
    border-radius: 10px; 
 
    width: 60px; 
 
    height: 60px; 
 
    line-height: normal; 
 
    vertical-align: bottom; 
 
    text-align: left; 
 
    border: 0px solid #FFFFFF; 
 
} 
 
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; 
 
} 
 

 
#game { 
 
    width: 80%; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
} 
 
#gameBoardSection { 
 
    border: 3px inset #0FF; 
 
    border-radius: 10px; 
 
    width: 65%; 
 
    float: left; 
 
} 
 
#grid { 
 
    z-index: -1; 
 
} 
 
#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; 
 
} 
 
#player1 { 
 
    border: 1px; 
 
    border-style: solid; 
 
    position: absolute; 
 
} 
 
#diceAndPlayerSection { 
 
    background-color: lightgrey; 
 
    float: left; 
 
    background-size: cover 
 
} 
 
#lastCell { 
 
    background-image: url('rotstar2_e0.gif'); 
 
    background-repeat: no-repeat; 
 
    background-size: 100%; 
 
}
<!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="border: 1px; border-style: solid; position:absolute;"> 
 
     <!--style="position: absolute; top: 597px; z-index: 1;"--> 
 
     <img src="humanPiece.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()"> 
 
     </div> 
 
    </div> 
 
    </div> 
 

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

 
</body> 
 

 
</html>

Dzięki z góry.

+1

To dużo kodu. +1, jeśli nie zamierzasz czytać wszystkiego. – Fleuv

Odpowiedz

1

Proponuję 2 zmiany tutaj:

  • Zadzwoń swoją funkcję move() wewnątrz window.onload Ponieważ płyta zostaje utworzona po load i DOM dostaje element #firstCell po utworzeniu.
  • To powinno być element-#player1, a nie string-#player1. Więc po prostu owinąć "#player1" wewnątrz $() jak - $("#firstCell").append($("#player1"));

zaktualizowany kod

var gameBoard = { 
 
    createBoard: function(dimension, mount) { 
 
    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); 
 
    } 
 
    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'; 
 
    return gameBoard; 
 
    } 
 
}; 
 

 
window.onload = (function(e) { 
 
    gameBoard.createBoard(10, "#grid"); 
 
    move(); 
 

 
}); 
 

 
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 move() { 
 
    $("#firstCell").append($("#player1")); 
 
}
/*body { 
 
    background-image: url('snakesandladder2.png'); 
 
    background-repeat: no-repeat; 
 
    background-size: 100%; 
 
    background-color: #4f96cb; 
 
}*/ 
 

 
table { 
 
    width: 100%; 
 
} 
 
td { 
 
    border-radius: 10px; 
 
    width: 60px; 
 
    height: 60px; 
 
    line-height: normal; 
 
    vertical-align: bottom; 
 
    text-align: left; 
 
    border: 0px solid #FFFFFF; 
 
} 
 
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; 
 
} 
 
#game { 
 
    width: 80%; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
} 
 
#gameBoardSection { 
 
    border: 3px inset #0FF; 
 
    border-radius: 10px; 
 
    width: 65%; 
 
    float: left; 
 
} 
 
#grid { 
 
    z-index: -1; 
 
} 
 
#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; 
 
} 
 
#player1 { 
 
    border: 1px; 
 
    border-style: solid; 
 
    position: absolute; 
 
} 
 
#diceAndPlayerSection { 
 
    background-color: lightgrey; 
 
    float: left; 
 
    background-size: cover 
 
} 
 
#lastCell { 
 
    background-image: url('rotstar2_e0.gif'); 
 
    background-repeat: no-repeat; 
 
    background-size: 100%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<!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="border: 1px; border-style: solid; position:absolute;"> 
 
     <!--style="position: absolute; top: 597px; z-index: 1;"--> 
 
     <img src="humanPiece.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()"> 
 
     </div> 
 
    </div> 
 
    </div> 
 

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

 
</body> 
 

 
</html>

1

Musisz umieścić obiekt jQuery zamiast ciąg ID:

$("#firstCell").append($("#player1")); 

Wydaje mi się, należy zgłosić ten move() funkcję wywołania zwrotnego przeszedł w onload ponieważ próbujesz dołączyć obiekt do elementu, który nie został stworzony w czasie rozmowy:

window.onload = (function(e) { 
    gameBoard.createBoard(10, "#grid", move); // <-----pass it here 
}); 

teraz nazwać w ten sposób przed return:

var gameBoard = { 
 
    createBoard: function(dimension, mount, move) { 
 
    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, move); 
 
    } 
 
    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'; 
 
    move(); 
 
    return gameBoard; 
 
    } 
 
}; 
 

 
window.onload = (function(e) { 
 
    gameBoard.createBoard(10, "#grid", move); 
 
}); 
 

 
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 move() { 
 
    $("#firstCell").append($("#player1")); 
 
}
/*body { 
 
    background-image: url('snakesandladder2.png'); 
 
    background-repeat: no-repeat; 
 
    background-size: 100%; 
 
    background-color: #4f96cb; 
 
}*/ 
 

 
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;   /*<--------add this one required.*/ 
 
} 
 
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; 
 
} 
 
#game { 
 
    width: 80%; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
} 
 
#gameBoardSection { 
 
    border: 3px inset #0FF; 
 
    border-radius: 10px; 
 
    width: 65%; 
 
    float: left; 
 
} 
 
#grid { 
 
    z-index: -1; 
 
} 
 
#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; 
 
} 
 
#player1 { 
 
    border: 1px; 
 
    border-style: solid; 
 
    position: absolute; 
 
} 
 
#diceAndPlayerSection { 
 
    background-color: lightgrey; 
 
    float: left; 
 
    background-size: cover 
 
} 
 
#lastCell { 
 
    background-image: url('rotstar2_e0.gif'); 
 
    background-repeat: no-repeat; 
 
    background-size: 100%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<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="border: 1px; border-style: solid; top:10px; left:10px; position:absolute;"> 
 
     <!-----------------------------------------------------check top left css props---> 
 
     <img src="humanPiece.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()"> 
 
    </div> 
 
    </div> 
 
</div>

+0

Zrobiłem, ale to nie działa zgodnie z oczekiwaniami –

+0

@SafaaMamdouhSalem Myślę, że musisz przekazać tę funkcję 'move()' jako wywołania zwrotnego w wywołaniu onload. zaktualizuję czas oczekiwania ... – Jai

+0

@SafaaMamdouhSalem zaktualizowałem ponownie. możesz sprawdzić, czy to pomaga. – Jai