DiceChess Variant

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

JohnWoe
Posts: 491
Joined: Sat Mar 02, 2013 11:31 pm

DiceChess Variant

Post by JohnWoe »

Hello all.

Does the world need yet another chess variant? Here it comes anyway.

Image

So I got this idea while implementing Musketeer engine.
How about a really random chess variant?

Any engine/human can beat any engine/human.
But still premium engines like Stockfish/Komodo/etc will top the rating lists.
Works on any GUI. No need for proprietary software.

Tho there is some modifications to be made in engines. See the github page.

The idea is very simple:
Use the normal board.
You only add dice roll before any move to see which piece you must move.
If there's no legal moves for such a piece, you move any piece you like.

Variant rules + engine to play against: https://github.com/SamuraiDangyo/DiceChess

Here is a sample game: Notice comments { K } tells which piece a player must move.

Code: Select all

[ Variant: DiceChess ]
[ Think time: 1000 ]
[ Date: 27.12.2019 12:14:41 ]
[ White: DiceChessEngine 0.10 ]
[ Black: DiceChessEngine 0.10 ]
[ Result: 1-0 ]
{ N } b1c3 { K } d7d5 { Q } d2d4 { N } b8c6 { R } a1b1 { K } e8d7 { K } e1d2 { N } g8f6 { P } e2e3 { N } c6b4 { N } g1f3 { K } d7e8 { B } f1b5 { Q } d8d7 { P } a2a3 { R } a8b8 { N } f3e5 { K } e8d8 { N } e5f7 { R } d8e8 { Q } d1f3 { N } b4c6 { N } f7h8 { N } f6e4 { N } c3e4 { Q } d7f5 { K } d2c3 { R } b8a8 { R } h1e1 { P } d5e4 { R } e1g1 { K } e8d8 { R } g1e1 { B } c8e6 { N } h8f7 { B } e6f7 { K } c3d2 { B } f7g6 { N } f3f5 { N } c6e5 { P } d4e5 { R } a8c8 { Q } f5d7  { 1-0 }
tmokonen
Posts: 1296
Joined: Sun Mar 12, 2006 6:46 pm
Location: Kelowna
Full name: Tony Mokonen

Re: DiceChess Variant

Post by tmokonen »

Using dice to choose which piece to move is not a new idea. The rule stating "If there's no legal moves for such a piece, you move any piece you like" is one that I have not seen before, so I think this particular variant of yours is unique.

If you are into variants, then The Classified Encyclopedia Of Chess Variants is a read that I highly recommend:

https://www.jsbeasley.co.uk/encyc/encyc.pdf

This book has been around a while, but the family of the deceased author allowed the book to be available for free a year or two ago. There is a chapter on different dice chess variants.
JohnWoe
Posts: 491
Joined: Sat Mar 02, 2013 11:31 pm

Re: DiceChess Variant

Post by JohnWoe »

Thanks for feedback!

After implementing I googled and noticed it has already been invented. :lol:

But my variant is with a twist. So when there's no legal move a player can play any move. Plus details for implementing them on UCI.

I designed this variant so it can be easily implemented by chess engine authors.
I'm changing the rules a bit. So it is unique variant. Now (0/*) indicates that any move can be played.

Game with new rules.

Code: Select all

[ Variant: DiceChess ]
[ Think time: 1000 ]
[ Date: 27.12.2019 17:44:09 ]
[ White: DiceChessEngine 0.10 ]
[ Black: DiceChessEngine 0.10 ]
[ Result: 0-1 ]
{ K } d2d4 { R } d7d5 { Q } d1d3 { N } b8c6 { R } g1f3 { R } a8b8 { B } c1f4 { N } g8f6 { N } b1c3 { P } e7e6 { Q } d3e3 { K } e8d7 { * } f3e5 { P } d7e8 { * } c3b5 { B } f8b4 { B } e1d1 { K } e8f8 { K } d1c1 { B } b4d6 { R } h1g1 { K } f8e7 { P } g2g3 { N } f6e4 { R } g1g2 { K } e7f8 { K } c1b1 { K } f8g8 { K } b1c1 { P } g7g5 { R } g2g1 { B } d6e5 { P } d4e5 { * } d8e7 { P } a2a4 { * } g5f4 { P } g3f4 { B } g8f8 { K } c1b1 { K } f8e8 { B } f1g2 { * } a7a6 { Q } e3h3 { Q } e7c5 { K } b1c1 { N } e4f2 { R } g1d1 { B } c8d7 { P } b2b4 { P } a6b5 { B } g2h1 { Q } c5b4 { N } h3e3 { N } f2d1 { * } c1d1 { P } b5a4 { Q } e3d2 { P } b7b5 { * } d2b4 { B } d7c8 { R } a1a4 { K } e8d7 { P } f4f5 { N } c6b4 { B } h1d5 { N } b4d5 { * } a4d4 { B } c8b7 { P } e2e4 { * } e6f5 { K } d1d2 { * } f5e4 { N } d4e4 { N } d5b6 { P } e5e6 { N } f7e6 { N } e4f4 { Q } b6c4 { B } d2c3 { R } h8f8 { P } h2h4 { * } f8f4 { B } h4h5 { N } c4e5 { N } c3b3 { P } h7h6 { N } b3b2 { K } d7d6 { K } b2c1 { B } b7f3 { K } c1b1 { K } d6c5 { R } b1c1 { P } b5b4 { Q } c1b1 { K } c5d4 { B } b1b2 { Q } f3h5 { R } b2b3 { Q } f4f2 { K } b3b2 { * } b4b3 { Q } b2c1 { R } f2f1 { R } c1d2 { K } d4c4 { K } d2e3 { B } h5f3 { B } e3f4 { Q } e5d3 { Q } c2d3 { K } c4d4 { K } f4g3 { * } b8g8 { N } g3h4 { Q } f1h1  { 0-1 }
User avatar
hgm
Posts: 27807
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: DiceChess Variant

Post by hgm »

In the game Einstein Würfelt Nicht, when you throw the number of a piece you do not have, you can choose between moving the next-higher or the next-lower piece. (Pieces that are still on the board can always move there, as you are allowed to capture your own pieces.)

I have been wondering for some time whether CECP ('WB protocol') should be extended to facilitate dice variants. Leaving the dice throw to the engine is a bit unsatisfactory, as there is no guarantee the engine doesn't cheat. I equiped my EWN engine with a mode where it asks the user for the result of a die roll (through the 'askuser' command) before its starts thinking, so that an external die can be used. But then of course the user can cheat. And in engine-engine games human intervention would be needed on every move. (And the engine's clock runs while waiting for the roll.)

So it would be nice if an engine could request a random number from the GUI through some CECP command. Which would then be sent to the opponent as well, so that it can check legality of the entered move. E.g. an engine could send

dice 6

to the GUI to request the roll of a single 6-sided die, which would then reply with

roll N

where N is a number from 1 to 6. (Or perhaps "roll 6:N" to confirm it rolled a 6-sided die.) The arguments of these commands could be space-separated lists; e.g. "dice 6 6 6" would request three dice rolls, and could be replied to with (say) "roll 5 2 6". The 'roll' command would go to an engine opponent as well, or be shown to the user (e.g. in the message field) in a human-engine game. The engine could also request 'out-of-turn' dice rolls, on behalf of its opponent. This would be ignored in engine-engine games, but the opponent's identical command would be honored, and would make the GUI send the expected reply anyway. In human-engine games the out-of-turn request would be honored, and the result shown to the user, so that the GUI also rolls the dice on his behalf.
JohnWoe
Posts: 491
Joined: Sat Mar 02, 2013 11:31 pm

Re: DiceChess Variant

Post by JohnWoe »

hgm wrote: Sun Dec 29, 2019 9:17 am In the game Einstein Würfelt Nicht, when you throw the number of a piece you do not have, you can choose between moving the next-higher or the next-lower piece. (Pieces that are still on the board can always move there, as you are allowed to capture your own pieces.)

I have been wondering for some time whether CECP ('WB protocol') should be extended to facilitate dice variants. Leaving the dice throw to the engine is a bit unsatisfactory, as there is no guarantee the engine doesn't cheat. I equiped my EWN engine with a mode where it asks the user for the result of a die roll (through the 'askuser' command) before its starts thinking, so that an external die can be used. But then of course the user can cheat. And in engine-engine games human intervention would be needed on every move. (And the engine's clock runs while waiting for the roll.)

So it would be nice if an engine could request a random number from the GUI through some CECP command. Which would then be sent to the opponent as well, so that it can check legality of the entered move. E.g. an engine could send

dice 6

to the GUI to request the roll of a single 6-sided die, which would then reply with

roll N

where N is a number from 1 to 6. (Or perhaps "roll 6:N" to confirm it rolled a 6-sided die.) The arguments of these commands could be space-separated lists; e.g. "dice 6 6 6" would request three dice rolls, and could be replied to with (say) "roll 5 2 6". The 'roll' command would go to an engine opponent as well, or be shown to the user (e.g. in the message field) in a human-engine game. The engine could also request 'out-of-turn' dice rolls, on behalf of its opponent. This would be ignored in engine-engine games, but the opponent's identical command would be honored, and would make the GUI send the expected reply anyway. In human-engine games the out-of-turn request would be honored, and the result shown to the user, so that the GUI also rolls the dice on his behalf.
Thanks for feedback!

Yes leaving that dice roll to engines results cheating too easily.

In UCI that dice-roll number is sent before any move.
Like this:
position startpos moves 1 e2e4 0 b8c6 5

I modified the rules that Queen is now Dragon. So DiceChess Variant is now unique.
That of course destroys all backward compatibility.

Sample game:

Code: Select all

[ Variant: DiceChess ]
[ Think time: 100 ]
[ Date: 29.12.2019 15:35:47 ]
[ White: DiceChessEngine 0.2 ]
[ Black: DiceChessEngine 0.2 ]
[ Result: 1-0 ]
{ N } b1c3 { * } e7e5 { K } d2d4 { K } e8e7 { B } c1e3 { K } e7e8 { K } e1d2 { N } b8c6 { K } d2c1 
{ B } f8d6 { B } e3d2 { * } e5d4 { K } c1b1 { D } d8e6 { P } e2e3 { * } d4c3 { N } g1f3 { N } g8f6 
{ P } b2c3 { N } f6e4 { N } f3d4 { K } e8e7 { * } d4e6 { P } d7e6 { D } d1f3 { B } d6h2 { D } f3e4 
{ * } h2e5 { B } f1b5 { K } e7f8 { P } f2f4 { * } f7f5 { K } b1b2 { K } f8g8 { B } b5c6 { D } f5e4 
{ P } f4e5 { N } b7c6 { * } h1h4 { N } a8b8 { D } b2a3 { N } h7h5 { N } h4e4 { B } c8a6 { B } d2e1 
{ B } a6f1 { R } e4a4 { D } f1g2 { P } c3c4 { K } g8f7 { N } a4a7 { N } b8a8 { B } e1b4 { P } c6c5 
{ R } a7a8 { K } f7g6 { * } a8h8 { B } g2h3 { N } b4c5 { P } c7c6 { N } a1g1 { B } h3g4 { B } c5f8 
{ * } g6f7 { K } a3b4 { D } f7g6 { R } g1g2 { N } g6f7 { D } g2f2 { N } f7g6 { D } h8g8 { D } g6h6 
{ K } b4c5 { R } g4f5 { N } f2g2 { D } f5g4 { N } g8g7 { P } h5h4 { N } g7g4 { P } h6h5 { D } g4g5  
{ 1-0 }