Check out Atomic Chess, our featured variant for November, 2024.


[ Help | Earliest Comments | Latest Comments ]
[ List All Subjects of Discussion | Create New Subject of Discussion ]
[ List Earliest Comments Only For Pages | Games | Rated Pages | Rated Games | Subjects of Discussion ]

Single Comment

Chess. Play Chess with Jocly.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Wed, Apr 20, 2016 12:28 AM UTC:
<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>