我正在尝试使用JS和p5.js编写国际象棋游戏,但是我的代码中有一个问题,我有几天无法解决。
代码如下:
function setup() {
// some other stuff: init canvas & board, set noStroke()
let wp1 = new Piece('white', ['a', 2], 'p', board);
wp1._draw();
}
我在let wp1 = new Piece('white', ['a', 2], 'p', board);
遇到错误。它来自构造函数。我那里还有许多其他代码,但这是出现错误的部分:
switch (type) { // "type refers to the third argument, 'p', from the code above
case 'p':
this.type = new Pawn(this.color, this.square);
case 'r':
this.type = new Rook(this.color, this.square);
case 'n':
this.type = new Knight(this.color, this.square);
case 'b':
this.type = new Bishop(this.color, this.square);
case 'k':
this.type = new King(this.color, this.square);
case 'q':
this.type = new Queen(this.color, this.square);
default:
console.error(`Expected piece type as a one-letter string, but got "${type}".`);
}
即使我将'p'传递给函数,也很明显,'p' === 'p'
却使错误从最底部出现,因此应该没有错误。
我尝试了几种不同的方法来解决此问题。首先,我尝试使用以下格式将代码重写为if
语句而不是switch
语句:
if (type == 'p') {
this.type = new Pawn(this.color, this.square);
} else if (type == 'r') {
// same as above but with Rook()
} // ... and as such for all the other piece types
else {
console.error(`Expected piece type as a one-letter string, but got "${type}".`);
}
...但我仍然收到错误消息!
我还尝试用所有其他片段类型('r','n','b','q'和'k')替换字符串'p'都无效。
为什么这不起作用?我看不出有什么错吗?
答案 0 :(得分:3)
每MDN:
与每个case标签关联的可选break语句可确保一旦执行匹配的语句,程序就退出switch并在switch之后的语句处继续执行。如果省略break,程序将在switch语句的下一个语句处继续执行。
如果您不希望脚本继续执行switch语句中的行直到到达break
,则需要添加console.error
语句。
赞:
switch (type) { // "type refers to the third argument, 'p', from the code above
case 'p':
this.type = new Pawn(this.color, this.square);
break;
case 'r':
this.type = new Rook(this.color, this.square);
break;
case 'n':
this.type = new Knight(this.color, this.square);
break;
case 'b':
this.type = new Bishop(this.color, this.square);
break;
case 'k':
this.type = new King(this.color, this.square);
break;
case 'q':
this.type = new Queen(this.color, this.square);
break;
default:
console.error(`Expected piece type as a one-letter string, but got "${type}".`);
}
这是使用switch
语句的预期模式。
答案 1 :(得分:1)
您只需要在每种情况的底部添加一个break;
语句。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch)
当前,因为您没有break语句,所以将检查所有情况,包括默认情况。