新棋吧 关注:7,042贴子:282,829
  • 5回复贴,共1
想实现一个功能
1.棋子A移动后,升变为棋子B
2.选择任意棋子C给他套个标记d
3.选择任意棋子E给他升变为棋子F
123是同一个棋子的棋步
我尝试过用加棋步的功能,但好像加不了第三步,而且即使是加棋步好像也只能操作自己的棋子,不能选对面棋手的棋,请问


IP属地:浙江来自Android客户端1楼2024-04-12 06:21回复
    直接移动到空格处,或者空格处有友方棋子时交换位置,我写的代码如下
    (define castling (
    (verify (in-zone? play-zone))
    $1
    (verify not-enemy?)
    cascade
    from
    (opposite $1)
    add
    ))
    刚开始写好的时候没问题,后来就开始报错,找了好久才发现是这条报错,而且只是提示非法移动,并不影响我继续玩,请问该怎么处理不让他报错啊


    IP属地:浙江3楼2024-04-14 22:07
    收起回复
      移动后升变
      (define shift-Scout (
      $1
      (verify (in-zone? $3))
      (verify not-friend?)
      (prisoner-check)
      (if enemy?
      (first-empty)
      (convert-prisoner)
      )
      (create $2)
      (add-partial move-2nd)
      ))
      设置标记
      (define curse (
      (verify last-to?)
      $1
      (while (in-zone? play-zone)
      (if (and not-empty?(not-flag? bCurse)(not-piece? Princess))
      from
      (set-flag bCurse true)
      add-partial move-3rd)
      $1
      )
      ))
      选棋子升变
      (define switch (
      (verify (or last-to?
      (and (last-from? 1i)(not-friend? 1i)(piece? Rook 1i)此处省略一大串检测)
      ))
      $1
      (while (in-zone? play-zone)
      (if (and friend? (not-piece? Princess))
      from
      (if (piece? Rook) (change-type Ambush_Rook))此处省略一大串升变
      add)
      $1
      )
      ))


      IP属地:浙江4楼2024-04-14 23:44
      收起回复
        嘶,才发现我理解错了,说明书说这个棋子的行动是
        1.选择其他棋子E升变为F,自身升变为B
        2.棋子A左右移动
        3.选择任意棋子C套个flag d
        下班后重写吧=_=


        IP属地:浙江来自Android客户端5楼2024-04-15 07:27
        回复
          升变其他子,自身也升变
          (define scout (
          (if (or (and (not-friend? 3iv)(piece? Rook 3iv))此处省略一大串检测
          )
          (change-type $2)
          $1
          (while (in-zone? play-zone)
          (if (and enemy? (not-piece? Princess))
          from(if (piece? Rook) (change-type Ambush_Rook))此处省略一大串升变
          (add-partial frame))
          $1)
          )))
          追加的frame移动
          (define shift-Scout (
          (verify not-last-to?)
          $1
          (verify (in-zone? $2))
          (verify not-friend?)
          (if (not-piece? Princess)
          (prisoner-check))
          (if enemy?
          (first-empty)
          (convert-prisoner)
          )
          (add-partial move-2nd)
          ))
          设置标记
          (define curse (
          (verify last-to?)
          $1
          (while (in-zone? play-zone)
          (if (and not-empty?(not-flag? bCurse)(not-piece? Princess))
          from
          (set-flag bCurse true)
          add-partial move-3rd)
          $1
          )
          ))
          还是之前的问题,升变其他棋子之后,最后增加棋步的我判断不在原来的棋子上了,所以第二步左右移动执行不了


          IP属地:浙江6楼2024-04-15 22:05
          收起回复
            我又来了
            (define curse (
            to-prison
            to-board;回到棋盘最角落
            (while (on-board? n)
            mark
            (while (on-board? e)
            (set-curse);注释见下
            e
            )
            (set-curse);注释见下
            back
            n
            )
            (while (on-board? e)
            (set-curse);注释见下
            e
            )
            (set-curse);注释见下
            e
            ))
            (define set-curse
            (if (and not-empty?(not-piece? King))
            (if (friend? curse-flag)
            from
            flip
            cascade
            to-remove
            add-copy
            else
            from
            flip
            flip
            cascade
            to-remove;移动到curse-flag这个格子
            add-copy
            )))
            目的是选棋盘一个棋子,把它复制一个curse-flag这个格子里充当标记,碰到的问题是1.我需要点curse-flag这个格子而不是点对应的棋子,2.己方的棋子能正常复制一份,敌方的棋子就直接丢进去了


            IP属地:浙江7楼2024-05-18 01:05
            回复