以下代码有什么问题?
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>
答案 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();