← Back to context

Comment by zzo38computer

2 years ago

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).