# 操作モード

# 特徴

  • 対戦用のモード
  • 手番側の操作を行う
  • 一度指すとその手が最終手になる
  • 再生モードの棋譜とは独立している (再生モードの棋譜を上書きしない)

# 関連オプション

  • sp_body: AIと対戦すると仮定したときAIの指し手を反映する
  • sp_human_side: 片側の操作に絞る

# 関連イベント

# Playground

    # 例1. 次の1手クイズ

    指し手によって「正解」「不正解」を表示する

    # 手順

    1. 操作モードにする
    2. 人間が指す
    3. と同時に ev_play_mode_move で指し手を受け取る
    4. 指し手が正しいか確認する

    # コードの要点

    <shogi-player-wc
      sp_mode="play"
      sp_body="${this.source}"
      @ev_play_mode_move="${this.ev_play_mode_move}"
    ></shogi-player-wc>
    
    ev_play_mode_move(e) {
      const move = e.detail[0].last_move_info.to_kif
      if (move === this.expected) {
        alert("正解")
      } else {
        alert("不正解")
      }
    }
    

    # 例2. AIと対戦する

    • AI は角交換を望んでいる
    • 先手(人間)は角道を開けて自分から角交換すること
    • それ以外の手を指すと AI は投了する

    # 手順

    1. 操作モードにする
    2. 人間が指す
    3. と同時に ev_play_mode_move で指し手を含む棋譜を受け取る
    4. その棋譜を AI に渡す
    5. AI は受け取った棋譜を見て考え、応手を含む新しい棋譜を返す
    6. その棋譜を sp_body に指定する
      このとき人間にはAIが駒を1つ動かしただけのように見える
    7. 2 に戻る
    • ここでいう「棋譜」は「moves 付きの SFEN」を意味する
    • AIの指し手を反映させる方法として「A座標の駒をB座標に動かす」のような処理のイメージをしてしまうかもしれないがそのようなAPIがあるわけではない
    • 指し手の反映は棋譜を sp_body に指定するのみ

    # コードの要点

    <shogi-player-wc
      sp_mode="play"
      sp_body="${this.ai_sfen}"
      @ev_play_mode_move="${this.ev_play_mode_move}"
    ></shogi-player-wc>
    
    ev_play_mode_move(e) {
      this.human_sfen = e.detail[0].sfen                // 人間の指し手を受け取って
      const sfen = this.ai_best_move(this.human_sfen)   // AIに渡すと応手が返ってくるので
      this.ai_sfen = sfen                               // 局面に反映する
    }
    
    // 「☗76歩」には「☖34歩」とし「☗22角成」に「同銀」とするだけのAI
    ai_best_move(sfen) {
      if (sfen === "position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1 moves 7g7f") {
        return "position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1 moves 7g7f 3c3d"
      }
      if (sfen === "position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1 moves 7g7f 3c3d 8h2b+") {
        return "position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1 moves 7g7f 3c3d 8h2b+ 3a2b"
      }
    }
    
    Last Updated: 6/21/2023, 8:39:22 AM