← Back to context

Comment by ramly

2 years ago

Are you referring to the images in the post or the actual game? Looks good on my side, might be the unexpected extra traffic. Sorry about that! In any case, you can try the game directly here: https://echochess.com/

The rules are really simple:

1) You are playing White, there's no opponent. You must capture all pieces to win.

2) You become the "echo" of any piece you capture. Captured a bishop? Become that bishop.

3) You can’t pass through red obstacles. Find the best move order to clear the board.

You can play it on any device, just drag and drop the white piece to move around. Let me know if you have any issues.

p.s. love that you just made your own!

I can't "play it on any device". It doesn't work on my computer. (It is why I asked if there is some way to access the FEN, in case of it won't work and you want to play game on another computer, or by actual chess pieces on a board instead of on the computer, etc)

I read the rules like you wrote it here too, it is same thing, and I understand that. Nevertheless, it does not answer all of the questions (e.g. pawns promotion). From the example, it seems to not be check/mate, but I that short explanation won't explain everything. Capture all pieces? Do you mean capture the black pieces only? You cannot capture the white pieces, isn't it (otherwise there won't be any to capture it)? Is the code I wrote, the correct rules of the game?

  • Yes, I found those rules unclear.

    My version:

    1. The goal is to capture all the black pieces, which never move.

    2. Move one white piece each turn, using the basic rules of chess piece movement. You can't move through red obstacles. Pawns don't promote. There is no check.

    3. When you capture a piece (black or white), your white piece turns into the type of piece you just captured.

    • Here is the updated code. Push D to destroy the selected white piece (if it meets the criteria for being destroyed).

        ; Echo Chess
        
        (InputXY)
        
        (Control
          (INIT $Cursor 1 1 0 0 Create =@cur)
        )
        
        ($Cursor
          Player
          (Image "Cursor0" "Cursor1")
          (DefaultImage ())
          (Density -10)
          (CREATE LOOP 0 1 50 Animate)
        )
        
        ($Tile
          (Image "Tile0" "Tile1")
          (Density 10)
          (INIT Loc + 1 band =Image)
          (CLICK @cur ,ObjBelow #Move Loc ,Send . 1)
        )
        
        ($White
          Input
          (Image "P" "N" "B" "R" "Q" "K")
          (CLICK @cur Loc ,MoveTo)
          (#Move
            ,:movable
            if
              Arg1 Arg2 MoveTo .
              Arg3 if
                From ,Image =Image
                From ,Destroy .
                (=P $Black) lnot if WinLevel then
              then
              @cur Loc ,MoveTo .
            then
          )
          (:movable
            Image (case
              (0 :pawn)
              (1 :knight)
              (2 :bishop)
              (3 :rook)
              (4 :queen)
              (5 :king)
            )
          )
          (:pawn Yloc Arg2 1 + eq Xloc Arg1 Delta Arg3 eq land)
          (:knight Xloc Arg1 Delta dup * Yloc Arg2 Delta dup * + 5 eq)
          (:bishop Xloc Arg1 Delta Yloc Arg2 Delta eq if =:queen else 0 then)
          (:rook Xloc Arg1 Delta Yloc Arg2 Delta land if 0 else =:queen then)
          (:queen From Seek =%d Loc begin %d NewXY over over ObjTopAt dup From eq if . . ret then ,Class $Tile ne until . . 0)
          (:king From Chebyshev 1 eq)
          (#Destroy
            From Self ne if
              From #Move Loc 1 ,SendEx .
            then
            Destroyed lnot
          )
          ('D
            @cur Coloc if
              $White #Destroy Loc BroadcastAnd .
            then
          )
        )
        
        ($Black
          (Image "PB" "NB" "BB" "RB" "QB" "KB")
          (CLICK @cur ,ObjBelow #Move Loc 1 ,SendEx . 1)
        )
      

      It is also possible to add more pieces e.g. Chinese cannon, or other kind of changes if desired.

    • Yes, that is much better.

      Then, the code that I wrote is OK (I think) except I did not implement capturing white pieces (although if white pieces can capture white pieces and change into the same piece, then effectively the white piece can become vacant if it can reach another white piece).