JavaScript:蛇和梯子游戏中的问题

JavaScript: Problems in Snakes and Ladders Game

本文关键字:游戏 问题 JavaScript      更新时间:2023-09-26

我是JavaScript新手。我正在制作"蛇和梯子"游戏。我在代码方面遇到了一些问题。

  1. 首先,我无法存储玩家的当前位置,因此我可以计算下一个目的地
  2. 骰子在游戏开始时以1开始,这导致玩家从第二个单元格开始
  3. 显示在板上的大蛇和梯子潜水器无法自动适应板的大小

这是我到目前为止写的代码蛇和梯子游戏

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 = '100';
    var firstRow = rows[9].getElementsByTagName('td');
    firstRow[0].id = '1';
    return gameBoard;
  }
};
gameBoard.createBoard(10, "#grid");
function intialPosition() {
  $("#1").append($("#player1"));
  $("#1").append($("#player2"));
  var currentPosition = parseInt($("#1").attr('id'));
  return currentPosition;
}
var w = intialPosition();
var face1 = new Image()
face1.src = "http://s19.postimg.org/fa5etrfy7/image.gif"
var face2 = new Image()
face2.src = "http://s19.postimg.org/qb0jys873/image.gif"
var face3 = new Image()
face3.src = "http://s19.postimg.org/fpgoms1vj/image.gif"
var face4 = new Image()
face4.src = "http://s19.postimg.org/xgsb18ha7/image.gif"
var face5 = new Image()
face5.src = "http://s19.postimg.org/lsy96os5b/image.gif"
var face6 = new Image()
face6.src = "http://s19.postimg.org/4gxwl8ynz/image.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;
}
var random1 = rollDice();
var destination = w + random1;
function move() {
  $('#' + destination).append($("#player1"));
  var x = parseInt($('#' + destination).attr('id'));
  var random = rollDice();
  destination = x + random;
  //alert(x);
  return destination;
}
$(document).ready(function() {
  //$('#' + destination).delay(100).fadeOut().fadeIn('slow');
  $('#' + destination).fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100);
});
var next = move();
/*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;
}
#100 {
  background-image: url('http://s19.postimg.org/ceioc1g8v/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%;
}
<body>
  <div id="game">
    <div id="gameBoardSection">
      <div id="grid"></div>
      <div id="ladder">
        <img src="http://s19.postimg.org/otai9he2n/oie_e_RDOY2iqd5o_Q.gif" />
      </div>
      <div id="bigSnake">
        <img src="http://s19.postimg.org/hrcknaagz/oie_485727s_RN4_KKBG.png" />
      </div>
      <div id="player1" style="position:absolute; top:10px; left:10px;">
        <img src="http://s19.postimg.org/t108l496n/human_Piece.png" />
      </div>
      <div id="player2" style="position:absolute; top:15px; left:5px;">
        <img src="http://s19.postimg.org/l6zmzq1dr/computer_Piece.png" />
      </div>
    </div>
    <div id="diceAndPlayerSection">
      <div id="reset">
        <button type="button" name="newGame" onClick="gameVM.newGame();">New Game</button>
      </div>
      <div>
        <button type="button" name="reset" onClick="gameVM.defaultSetup()">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;">
      </div>
    </div>
  </div>
</body>

有人能帮我吗?提前感谢

  1. 要存储用户当前位置,请维护用于存储diff播放器目的地的单独变量
  2. 要从1开始播放,请删除initialPosition()并使var w=0,因此一旦调用rolldice(),它将从0开始
  3. 为了根据屏幕大小的变化自动调整,请使用bootstrapdiv,它可以自动调整div的大小http://getbootstrap.com/css/#grid