这段代码有什么问题?

时间:2010-11-19 09:13:02

标签: javascript

以下代码有什么问题?

   for (var x=0;x<8;x++){
      for (var y=0;y<8;y++){
        table[y][x]=new Peon("black",x,y,table);
      }
   {

我知道有一些错误,因为如果我将它从代码中删除它可以工作,如果我把它留在那里它永远不会到达第二个“警报”。

  <HTML>
    <HEAD>
      <TITLE>Chess</TITLE>
      <SCRIPT LANGUAGE="JavaScript">
      var table = [];


      function Peon(color,posX,posY,board){
        this.color=color;
        this.posX=posX;
        this.posY=posY;
        this.board=board; //reference to the game board

        this.move = function(x,y){
          /*
          board[posY][posX]=null;
          board[y][x]= this;

          posX=x;
          posY=y;
          */
          alert("x "+x+" y "+y);
        };
        this.isValidMove = function(x,y){ return false;};
        return true;
      }

      //Board Inizialization 
      for (var i=3;i<5;i++){
          table[i]=[];
      }

      for (var x=0;x<8;x++){
          for (var y=0;y<8;y++){
            table[y][x]=new Peon("black",x,y,table);
          }
      }


      var n = new Peon("black",0,0,table);


      function move(x, y) {
        alert("debug");

        n.move(x+1,y+1);
        alert("debug 2");

          //Check if there is a piece already selected
           //no Check if selection is valid
               //yes Select
               //no Do nothing
           //Click on owned piece?
               //yes Change selection if valid
               //no Is move valid?
                   //yes move/eat
                   //no Do nothing
      }


      </SCRIPT>
    </HEAD>
    <BODY>

      <INPUT id="b00" TYPE="button" style="background-color:EEEEEE" Value="Click" onClick="move(0,0)">

      <div id="writeHere"></div>
    </BODY>
  </HTML>

6 个答案:

答案 0 :(得分:2)

你确定:

for (var i=3;i<5;i++)
      table[i]=[];

因为它只会在索引3和4处创建新数组。

顺便问一下,你为什么Peon函数返回true?它应该返回一个实例,而不是真实的。

答案 1 :(得分:2)

您正在尝试将数组值分配给不存在的数组。

在此处定义“内部”数组时:

for (var i=3;i<5;i++) {
      table[i]=[];
}

您创建:

table[3]
table[4]

然后在这部分:

  for (var x=0;x<8;x++) {
      for (var y=0;y<8;y++) {
        table[y][x]=new Peon("black",y,x,table);
      }
    }

您正尝试分配:

table[0]
table[1]
table[2]
table[3]
...
table[7]

因此,对于修复,我将使用0-8,这将创建一个7x7板: 首先是初始化修复(添加了多维数组修复):

  //Board Inizialization 

      for (var i=0;i<8;i++) {
          table[i]=[];
        }
      for (var x=0;x<8;x++) {
          for (var y=0;y<8;y++) {
            table[x].push(new Peon("black",x,y,table));
                }
        }

和你的警报修复:

  function move(x, y) {
    alert("debug");

    n.move(x+1+","+y+1);
    alert("debug 2");
  }

答案 2 :(得分:1)

问题出在这里,

  for (var i=3;i<5;i++)
      table[i]=[];


  for (var x=0;x<8;x++)
      for (var y=0;y<8;y++)
        table[y][x]=new Peon("black",y,x,table);

您的第一个循环从3循环到5,但第二个循环尝试访问您从未分配的table[0][0]。将第一个循环更改为

for (var i=0;i<8;i++)

答案 3 :(得分:0)

在你的嵌套for循环中,你可以像这样调用Peon构造函数:

new Peon("black",y,x,table);

但是Peon函数期望订单不同。似乎X和Y是错误的方式:

function Peon(color,posX,posY,board

答案 4 :(得分:0)

你认为peon就像它返回一个对象但它返回的所有都是false。(var n = new Peon(“black”,0,0,table);) 之后你使用n.move(x + 1,y + 1);

答案 5 :(得分:0)

因为表不是二维数组。 JavaScript没有真正的二维数组,因此可以使用Array进行模拟。 试试这个:

var table = new Array();
table[0] = new Array();
table[1] = new Array();
table[2] = new Array();
table[3] = new Array();
table[4] = new Array();
table[5] = new Array();
table[6] = new Array();
table[7] = new Array();