Browse Source

I before E, except after C fails me again

master
Christopher Ramey 12 years ago
committed by cdramey
parent
commit
d55b93836c
  1. 118
      shogi.js

118
shogi.js

@ -21,24 +21,24 @@ var Shogi = {
'reigning', 'challenging'
],
desc_peice : [
desc_piece : [
'King', 'Rook', 'Bishop', 'Gold General',
'Silver General', 'Knight', 'Lance', 'Pawn'
],
peicePromoted : function(n)
piecePromoted : function(n)
{
return (n & 8) != 0;
},
peiceCanPromote : function(b, l){
var peice = b[l];
if(peice == -1){ return false; }
pieceCanPromote : function(b, l){
var piece = b[l];
if(piece == -1){ return false; }
var pe = peice & 15;
var pe = piece & 15;
if(pe < 1 || pe > 7){ return false; }
var player = this.peicePlayer(peice);
var player = this.piecePlayer(piece);
if(player == 0 && l > 26){ return false; }
if(player == 1 && l < 54){ return false; }
@ -46,62 +46,62 @@ var Shogi = {
return true;
},
peicePlayer : function(n)
piecePlayer : function(n)
{
return (n & 16) >> 4;
},
peiceName : function(n)
pieceName : function(n)
{
return this.desc_peice[n & 7];
return this.desc_piece[n & 7];
},
peiceMoves : function(b, l)
pieceMoves : function(b, l)
{
var peice = b[l];
var player = this.peicePlayer(peice);
var piece = b[l];
var player = this.piecePlayer(piece);
var moves = [];
switch(peice & 15){
switch(piece & 15){
case this.KING:
var i = l + 9;
if(i <= 80 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 9;
if(i >= 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 1;
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 1;
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 8;
if(i <= 80 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 10;
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 10;
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 8;
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
break;
@ -113,43 +113,43 @@ var Shogi = {
case this.PROMOTED_LANCE:
case this.PROMOTED_KNIGHT:
var i = l + 9;
if(i <= 80 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 9;
if(i >= 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 1;
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 1;
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
if(player){
i = l + 8;
if(i <= 80 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 10;
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
} else {
i = l - 10;
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 8;
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
}
@ -158,12 +158,12 @@ var Shogi = {
case this.KNIGHT:
var i = l + (player ? 19 : -19);
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + (player ? 17 : -17);
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
break;
@ -173,14 +173,14 @@ var Shogi = {
if(player){
for(var i = l + 9; i <= 80; i += 9){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
} else {
for(var i = l - 9; i >= 0; i -= 9){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
@ -191,49 +191,49 @@ var Shogi = {
case this.PROMOTED_ROOK:
var i = l - 10;
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 8;
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 8;
if(i <= 80 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 10;
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
case this.ROOK:
for(var i = l - 9; i >= 0; i -= 9){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
for(var i = l - 1; i % 9 != 8; i--){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
for(var i = l + 1; i % 9 != 0; i++){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
for(var i = l + 9; i <= 80; i += 9){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
@ -242,49 +242,49 @@ var Shogi = {
case this.PROMOTED_BISHOP:
var i = l + 9;
if(i <= 80 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 9;
if(i >= 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 1;
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 1;
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
case this.BISHOP:
for(var i = l - 8; i >= 0 && i % 9 != 0; i -= 8){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
for(var i = l - 10; i >= 0 && i % 9 != 8; i -= 10){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
for(var i = l + 8; i <= 80 && i % 9 != 8; i += 8){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
for(var i = l + 10; i <= 80 && i % 9 != 0; i += 10){
if(b[i] == -1){ moves.push(i); }
else if(this.peicePlayer(b[i]) != player){
else if(this.piecePlayer(b[i]) != player){
moves.push(i); break;
} else { break; }
}
@ -293,7 +293,7 @@ var Shogi = {
case this.PAWN:
var i = l + (player ? 9 : -9);
if(i >= 0 && i <= 80 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i <= 80 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
break;
@ -301,27 +301,27 @@ var Shogi = {
case this.SILVER_GENERAL:
i = l + (player ? 9 : -9);
if(i >= 0 && i <= 80 && (b[i] == -1 || this.peicePlayer(b[i]))){
if(i >= 0 && i <= 80 && (b[i] == -1 || this.piecePlayer(b[i]))){
moves.push(i);
}
var i = l - 10;
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l - 8;
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i >= 0 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 8;
if(i <= 80 && i % 9 != 8 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 8 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
i = l + 10;
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.peicePlayer(b[i]) != player)){
if(i <= 80 && i % 9 != 0 && (b[i] == -1 || this.piecePlayer(b[i]) != player)){
moves.push(i);
}
break;
@ -330,13 +330,13 @@ var Shogi = {
return moves;
},
peiceDescription : function(n)
pieceDescription : function(n)
{
var pl = (n & 16) >> 4;
var pe = n & 7;
return (this.peicePromoted(n) ? 'Promoted ' : '') +
this.peiceName(n) +
return (this.piecePromoted(n) ? 'Promoted ' : '') +
this.pieceName(n) +
(pe == this.KING ? ' (' + this.desc_king[pl] + ')' : '');
},

Loading…
Cancel
Save