[ List Earliest Comments Only For Pages | Games | Rated Pages | Rated Games | Subjects of Discussion ]
Single Comment
<P>Michel,</P>
<P>Thanks to your suggestion on how to fix the bug in Grand Chess, I fixed the bug in both <A HREF="/play/grandchess.html">Grand Chess</A> and <A HREF="/play/grandcavalier.html">Grand Cavalier Chess</A>. I did it a little differently, though. I began by creating an array of the maximum number of each piece that may be on the board. As I found each piece belonging to the same side as the player, I decremented its count in the array. Then, for any left in the array with counts above zero, I made an array of pieces that may be promoted to. Here is the new <CODE>promote</CODE> function for Grand Chess. You may use it in your version:</P>
<PRE>
// Bug-fixed by Fergus Duniho
promote: function(aGame,piece,move) {
if(piece.t==1)
return [0];
else if(piece.t==3)
return [2];
var r=geometry.R(move.t);
if((piece.t==0 && r<=9 && r>=7) || (piece.t==2 && r>=0 && r<=2)) {
var considerTypes={ 4:2, 5:2, 6:2, 7:1, 9:1, 10:1 };
for(var i=0;i<this.pieces.length;i++) {
var piece1=this.pieces[i];
if(piece1.s==piece.s // piece from our side
&& piece1.p>=0 // in play on board
&& (piece1.t in considerTypes)) // promotable piece type
considerTypes[piece1.t] = considerTypes[piece1.t] - 1;
}
var promo=[];
for(var t in considerTypes) { // create an array of types from our types map
if (considerTypes[t] > 0)
promo.push(t);
}
if(r!=0 && r!=9) {
promo.unshift(piece.t);
} else if(promo.length==0)
return null; // last line but no captured piece to promote to: move is not possible
return promo;
}
return [];
},
</PRE>