Check out Janggi (Korean 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 ]

Comments/Ratings for a Single Item

EarliestEarlier Reverse Order LaterLatest
Apothecary Chess-Modern. Large board variant obtained through tinkering with known games.[All Comments] [Add Comment or Rating]
💡📝Aurelian Florea wrote on Wed, Jun 17, 2020 07:25 AM UTC:

@Fergus,

I'm glad to say I have managed to make it work.

Here is the code that does well:

if flag f2 and moved == K:
move $dest $origin; // Temporarily undo King move
  if sub checked $origin and not checkleap $origin $dest 1 0 or checkleap $origin $dest 1 1:
    die A King may not castle out of check.;
  endif;
move $origin $dest;
endif;

if == moved K: 
unsetflag f2;
set Kpos $dest;
endif;

if sub checked var Kpos:
  die You may not move into check.;
endif;

Later edit:

But althought the code works for white it does not work for black well, and also there is a weird side effect where a queen move on the first square generates the a king may not castle out of check error. So there is still work to do despite the progress.

2nd edit:

I think I have found the bug that generates both problems. It is the first if :

if flag f2 and moved == K:

this is either always true or always false if I move the == ahead of moved but I cannot get it to work in the intended way which is enter the condition when flag f2 of set and the K has just been moved.


Greg Strong wrote on Wed, Jun 17, 2020 02:49 PM UTC:

Should be:

if and flag f2 == moved K:

Operators come before their arguments.  I'll add parenthesis to show what's going on (although you should not use the parenthesis):

if (and (flag f2) (== moved k))

 


💡📝Aurelian Florea wrote on Wed, Jun 17, 2020 04:41 PM UTC:

I see what you say but with that I get always false. And the flag works well. I had checked.  So it is the equality. If i write if and flag f2 moved == K then it works for the king but the code enters for other pieces too which is weird.  So maybe == moved K regardless of how is written does not give the expected answer but all T or all F, which is weird. And that probably means I have trouble somewhere else.


🕸Fergus Duniho wrote on Wed, Jun 17, 2020 10:26 PM UTC:

Black pieces use lowercase labels. K is the white King, not just any King.


💡📝Aurelian Florea wrote on Thu, Jun 18, 2020 05:23 AM UTC:

I know that. This is why the error seems weird to me. I'll get back to you on that!


🕸Fergus Duniho wrote on Thu, Jun 18, 2020 08:03 PM UTC:

You're still checking the flag on f2, which is not the starting space for the Black King.


💡📝Aurelian Florea wrote on Fri, Jun 19, 2020 06:00 AM UTC:

All right, you were correct on that final point, but things are not done.

Let us start from scratch. Maybe I'll understand what is going on.

The code that greg has suggested:

if and flag f2 == moved K:

for the condition that enters the main code in question does not work although the way I see it it should.. It is always false. I have checked for the flag. That works fine so it moved be the == moved K part. But I can't see why!


🕸Fergus Duniho wrote on Fri, Jun 19, 2020 05:00 PM UTC:

Are you saying that this code is not working?

if and flag f9 == moved k:

Looking at the rest of your code, I see details that pertain only to castling, but I presume this code is not for castling. You need to understand what the code does and remove or modify what doesn't fit your purposes.


💡📝Aurelian Florea wrote on Mon, Jun 22, 2020 11:38 AM UTC:

Fergus,

I have solved it:

if flag f2:
if moved == K:
  move $dest $origin; // Temporarily undo King move
  if sub checked $origin:
    if not or checkleap $origin $dest 1 0 checkleap $origin $dest 1 1:
    die A King may not use the special moves out of check.;
  endif;
endif;
  move $origin $dest;
endif;
endif;


Carlos Cetina wrote on Mon, Jun 22, 2020 07:35 PM UTC:

@Aurelian,

At our current game I cannot make 7... b h5-f3 (bishop x wizard) because the GC program says: "A King may not use the special moves out of check. Use your browser's BACK button to go back to the previous page, then reload if necessary."

In order not to affect the current games, it would be convenient to do the tests to improve the code in a cloned preset using another settings name.


💡📝Aurelian Florea wrote on Tue, Jun 23, 2020 02:13 AM UTC:

I removed the buggy code. 

Now it should work!


💡📝Aurelian Florea wrote on Tue, Jun 23, 2020 06:43 AM UTC:
files=10 ranks=12 holdingsType=1 promoZone=3 promoChoice=!P*N*B*C*W*R2*J2*Q1*D1*G1 graphicsDir=../graphics.dir/alfaerie/ whitePrefix=w blackPrefix=b graphicsType=gif squareSize=54 symmetry=mirror shuffle=G:BD,:BN,GDQ hole::::a1,b1,c1,i1,j1,,a12,b12,c12,i12,j12 pawn:p:ifmnDfmWfceF:pawn:a4,b4,c4,d4,e4,f4,g4,h4,i4,j4,,a9,b9,c9,d9,e9,f9,g9,h9,i9,j9 rook::::a2,j2,,a11,j11:1 queen::::e3,,e10:1 bishop:B:B:bishop:d3,g3,,d10,g10 knight:N:NmHmA:knight:c3,h3,,c10,h10:1 wizard:W:FL:mage:d1,g1,,d12,g12 champion:C:WAD:champion:e1,h1,,e12,h12:1 joker:J:fI:fool:f1,,f12 dragon:D:FyafsF:dragon:i3,,i10 griffin:G:WyafsW:gryphon:b3,,b10 king:K:KimbsLimbsN:king:f3,,f10

💡📝Aurelian Florea wrote on Wed, Jun 24, 2020 01:55 AM UTC:

@Fergus,

I have moved the buggy code back to the old testing ground:

https://www.chessvariants.com/play/pbm/play.php?game=Apothecary+Chess+1&settings=Apothecary1working&submit=Edit

if flag f2:
if moved == K:
  move $dest $origin; // Temporarily undo King move
  if sub checked $origin:
    if not or checkleap $origin $dest 1 0 checkleap $origin $dest 1 1:
    die A King may not use the special moves out of check.;
  endif;
endif;
  move $origin $dest;
endif;
endif;

The way this goes wrong is that other pieces other than the king are affected by it. Any idea why?


H. G. Muller wrote on Wed, Jun 24, 2020 06:40 AM UTC:

I implemented 'repeated shuffling' in the diagram now, where the shuffle parameter accepts a comma-separated list of shuffles, which are then performed in order. I also added a new shuffle limitation: a piece prefixed with ':' (colon) will not be shuffled to different shades (like a '!' prefix would do), but to symmetric locations. (Which, on boards with an even number of files, should also have opposit shades.) Better make sure to apply it only to an even number of pieces on a set of symmetrically distributed locations!

I think this should allow you to do the shuffling you want, through a trick: When you shuffle (say) Knights and Bishops with :BN specification, it can only leave them as they were, or swap the N and B on both wings. Otherwise the Bishops would no longer be symmetrically positioned.

So what you can do is start the Bishops in the d- and g-file, and (say) A and C on the b- and i-file, and then shuffle A:BC. This will make the B end up either on d/g or b/i, with 50-50 chance. After that you shuffle B and N (which started on c- and h-file), as :BN, to randomize those while preserving symmetry. Finally you shuffle ACQ without limitations. So the specification would be shuffle=A:BC,:BN,ACQ .


💡📝Aurelian Florea wrote on Wed, Jun 24, 2020 08:10 AM UTC:

I have tested it by pressing restart and it does not go well. The queen and knigt get swaped. But not the way I described in the rules. My code is here:


<script type="text/javascript" src="../membergraphics/MSinteractive-diagrams/betza.js"></script>
<div style="float:left;margin:0 40px 20px 0;">
<div class="idiagram">
files=10
ranks=12
holdingsType=1
promoZone=3
promoChoice=!P*N*B*C*W*R2*J2*Q1*D1*G1
graphicsDir=../graphics.dir/alfaerie/
whitePrefix=w
blackPrefix=b
graphicsType=gif
squareSize=54
symmetry=mirror
shuffle=G:BD,:BN,GDQ
hole::::a1,b1,c1,i1,j1,,a12,b12,c12,i12,j12
pawn:p:ifmnDfmWfceF:pawn:a4,b4,c4,d4,e4,f4,g4,h4,i4,j4,,a9,b9,c9,d9,e9,f9,g9,h9,i9,j9
rook::::a2,j2,,a11,j11:1
queen::::e3,,e10:1
bishop:B:B:bishop:d3,g3,,d10,g10
knight:N:NmHmA:knight:c3,h3,,c10,h10:1
wizard:W:FL:mage:d1,g1,,d12,g12
champion:C:WAD:champion:e1,h1,,e12,h12:1
joker:J:fI:fool:f1,,f12
dragon:D:FyafsF:dragon:i3,,i10
griffin:G:WyafsW:gryphon:b3,,b10
king:K:KimbsLimbsN:king:f3,,f10
</div></div>

I had tested it be pressing restart a few times on the diagram. Refresh gives me the initial position.


H. G. Muller wrote on Wed, Jun 24, 2020 08:15 AM UTC:

OK, I see that my trick did not work for swapping b and d, as these are same shade, so that the B must get automatically to opposit halves, and the : adds nothing extra. I changed the meaning of : now to explicitly mean "mirror-image location", and adapted the Diagram script for that. This should make your diagram work as you have it, with the updated script.


💡📝Aurelian Florea wrote on Wed, Jun 24, 2020 08:25 AM UTC:

I'm not sure why but the diagram still does not work.

It behaves the same way.

I'm wondering if you have not tried to put a bishop over an already occupied square. Would this be an error?


H. G. Muller wrote on Wed, Jun 24, 2020 08:33 AM UTC:

I think caching again is broken on this website. I uploaded a new Diagram script, but when I read it back from the website, it shows the old text. Only when I suffix the URL with some random suffix, like ?t=1234, I get to see the newly uploaded text.

So this is what you can do as a work-around too: suffix the URL to betza.js in your comment to make it betza.js?nocache=true , to make sure it will use the new script. You still would have to flush your browser cache. When I tried the current script locally on your diagram, the shuffling works as it should.

BTW, note that when you specify symmetry=mirror (as you must, to preserve vertical symmetry during shuffling), there is no need to mention the location of the black pieces, as the Diagram would automatically add those. So you could leave out the double comma and everything behind it, even for the holes.


💡📝Aurelian Florea wrote on Wed, Jun 24, 2020 11:42 AM UTC:

@HG,

Indeed HG, now the diagram works as expected for me too!...

Thanks!


💡📝Aurelian Florea wrote on Thu, Jun 25, 2020 01:33 PM UTC:

@Fergus,

I have remade the code to work as expected for the king to not be able to use the special moves out of check:

/play/pbm/play.php?game%3DApothecary+Chess+1%26settings%3DApothecary1working

The relevant piece of code for white  is:

if flag f2:
if == moved K:
  if sub checked $origin:;
    if not or checkleap $origin $dest 1 0 checkleap $origin $dest 1 1:
    die A King may not use the special moves out of check.;
  endif;
endif;
endif;
endif;

There is still the problem that the special moves are displayed as legal when a king is in check. Is that solvable?


🕸Fergus Duniho wrote on Thu, Jun 25, 2020 04:22 PM UTC:

As long as you evaluate actual moves in the Post-Move sections, you have to bear in mind that potential moves are evaluated before a move would be made, and actual moves are evaluated after a move has been made. This means that you have to sometimes use different code for potential and actual moves. That's true of the King here. You should use both a function and a subroutine for the King's movement. The function should handle only potential moves, and it should stop a King from making its special move out of check before it makes its move. The subroutine should handle actual moves, and it should undo a King's special move after it has been made to make sure the King didn't move out of check with that move, then redo it if it was legal.


💡📝Aurelian Florea wrote on Fri, Jun 26, 2020 08:50 AM UTC:

 have written the following code but I don't know where to call the subroutine.

sub King from to

    move #to #from;
    if sub checked #from:
    verify or checkleap #from #to 1 0 checkleap #from #to 1 1;
    else:
    verify fn King #from #to;
    endif;
    move #from #to;

endsub;

;


💡📝Aurelian Florea wrote on Fri, Jun 26, 2020 09:47 AM UTC:

To the editors.

Can a piece set be changed or it needs to be redone from the beginning?

I want to change in the apothecary chess standard piece set the bird with the dragon.


🕸Fergus Duniho wrote on Fri, Jun 26, 2020 11:57 AM UTC:

Since your function has to allow special moves but stop the illegal ones, you should not be calling your function from your subroutine. They should be independent from each other. How to call the subroutine is described in the Fairychess include file tutorial under "A Real Example from Chess".

The tutorial also describes how you can use different pieces with the same notation. Although you cannot modify a set within Game Courier, you can change which pieces you use and what notation you will use for them. I recommend reviewing this tutorial every now and then.


🕸Fergus Duniho wrote on Fri, Jun 26, 2020 12:52 PM UTC:

While I could add code to Game Courier for enabling GAME Code programs to modify the images in piece sets, it would not work in Edit mode. So, if you want to use piece images that are not in your current set, you should change it to use a different set.


25 comments displayed

EarliestEarlier Reverse Order LaterLatest

Permalink to the exact comments currently displayed.