2010-11-19 4 views
0

Что случилось со следующим кодом?что с этим кодом?

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> 
+1

скобки, пожалуйста! также вы вызываете его с помощью y, x, но конструктор ожидает x, y – nickf

+0

. Я не получаю никакого вывода на всех http://jsfiddle.net/JYgJC/ – mpen

+0

Спасибо всем, я должен был это увидеть –

ответ

2

Вы уверены:

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

Как это будет только создавать новые массивы с индексом 3 и 4.

Кстати, почему вы действуете возвращение Peon правда? Он должен возвращать экземпляр, а не true.

0

В вашей вложенной цикл вы называете конструктор Peon так:

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

но функция Peon ожидает, что для того, чтобы быть разными. X и Y является неправильным путем вокруг него, кажется:

function Peon(color,posX,posY,board 
0

Ты обращаешься поденщик, как он возвращает объект, но все это возвращает истинно ложные (вар п = новый батрак («черные», 0,0,. таблица);) позже вы используете n.move (x + 1, y + 1);

+0

'Peon()' возвращает true, но 'new Peon()' всегда возвращает объект – Gareth

+0

ах, интересно – Rob

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"); 
    } 
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(); 
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++) 
Смежные вопросы