Git Product home page Git Product logo

electron-shogi's Introduction

Kubo, Ryosuke

  • 📹 Video Streaming Technology
    • go-mp4 is golang library to read/write MP4 box.
    • Antares is monitoring system for HLS and MPEG-DASH.
  • ☗☖ Computer Shogi

electron-shogi's People

Contributors

dependabot[bot] avatar foo-x avatar gyroninja avatar mizar avatar nyoho avatar paalon avatar quisette avatar sunfish-shogi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

electron-shogi's Issues

プレイヤーを抽象化する。

プレイヤーには人の場合と USI エンジンの場合があり、今後その他(CSA プロトコル、Javascript 簡易 AIなど)を増やす可能性がある。
現在は store にプレイヤー種別ごとの処理が直接実装されているが、これを抽象化して対局開始時にインスタンスを差し込むようにする。

また、プレイヤーは全て URI で識別する。

局面編集の初期配置に双玉詰将棋を追加

双玉詰将棋の初期配置が有ると良いというリクエストを Twitter で頂いた。
双玉詰将棋で使用する駒は平手と同じなのであまり気にしていなかったが、ほとんどの駒を後手の駒台に移動する必要があるため、専用のメニューがあると良さそう。

また、現状だとメニュー以外では「平手」「詰将棋」の選択しかできない状態であり、ブラウザ版では局面編集中にそれ以外を選択する方法が無い。(対局開始時に選ぶことはできる。)
全ての選択肢をボタンで並べるのは無理があるので、プルダウンメニュー等で出すようにしたい。

SFENコピー・ペースト機能

SFEN での局面コピー・ペーストに対応する。

将棋所はプレフィクス sfen を付けないが、 ShogiGUI は付けている。
どちらもペーストはプレフィクスがあっても無くても読み込むことができる。

USI のデバッグ等を考えると、シンプルな SFEN だけでなく USI の position コマンドで棋譜をペーストできた方が良いかもしれない。
なお、将棋所の棋譜コピーには SFEN の選択肢があり、これを使うと USI の position コマンドがコピーされる。

バージョン情報表示

  • Windows ではバージョン情報を表示する方法を作る。
  • Mac は "About electron-shogi" というメニューがすでにあるが、 Electron のアイコンとバージョンが表示されてしまう。

棋譜ビューの改良

  • 最大幅を大きくする(指し手コメントがある程度読める程度に)
  • 分岐の有無を色分けで表示
  • コメントの表示・非表示切り替え機能
  • 消費時間の表示・非表示切り替え機能

KIFファイルにおける、ぴよ将棋との互換性の問題

ぴよ将棋が出力した KIF ファイルにおいて先手番の指し手に「玉」ではなく「王」が使われている。
これをElectron将棋で読み込もうとするとエラーになる。

http://kakinoki.o.oo7.jp/kif_format.html によれば

玉、飛、龍、角、馬、金、銀、成銀、桂、成桂、香、成香、歩、と
龍を「竜」であらわす場合もある。
成銀を「全」、成桂を「圭」、成香を「杏」であらわす場合もある(「詰将棋パラダイス」でも使用)。

とされており、「王」を使って良いとは書かれていない。

しかし、将棋所、ShogiGUI、Kifu for Windows のどれでも読み込む事ができており、対応した方が良さそうである。

v0.1.0リリース作業

  1. Windows 動作テスト
  2. Mac 動作テスト
  3. スクリーンショット更新
  4. HOW TO USE 作成
  5. プレリリース作成
  6. 成果物添付
  7. プレリリース解除
  8. アナウンス

MultiPV有効時の形勢グラフ表示の誤り

MultiPVを有効にすると、最後に送信された評価値をグラフに表示してしまっている。
MultiPVの順位が指定されている場合は第1位の値を表示しなければならない。

Vuex をやめる。

ローカルの複雑なプロセス間通信がメインであるアプリケーションの性質上、 Vuex の恩恵を十分に享受できずむしろ扱いづらい面があるように感じる。

Vuex をやめてステートを適切に取り扱えるように設計を見直す。

特にプレイヤーを抽象化し、人やUSIエンジン、CSAプロトコルそれぞれの知識が中心部に入り込まないようにしたい。

ヘルプメニューを作る。

メニューバーに以下のサブメニュー項目を持つ「ヘルプ」を作成する。

  • 使い方を開く
  • 更新をチェック

エンジンの通信ログを出力する。

どのような方法で出力するか検討する。

レンダラーで console.log に出すのは避けたい。(Chromium の開発者ツールが重すぎる。)

エンジンのログを見るのは基本的にエンジニアなので、テキストファイルに出力して tail コマンドで見てもらえば問題ないような気もする。

成・不成の選択が部分的に押せない場合がある。

スクリーンショット (25)

1 筋や 9 筋だと画像のように成・不成選択の一部は盤からはみ出す。
このとき、周辺の UI パーツの DOM より背面に配置されているため、重なっている範囲がクリックできない。

前面にするだけでは周りのボタンをご操作しそうなので、ダイアログを使うようにしても良いかもしれない。

あるいは、端からはみ出さないようにする。(1筋9筋のときだけ内側に0.5マス分表示位置をずらす。)
将来のスマホ対応を考えてもはみ出さない方が良い気もする。

USIエンジン設定項目の日本語表記対応

http://shogidokoro.starfree.jp/translate.html

将棋所では _ja.txt というサフィックスを付けることで、日本語の表記を指定できるとされています。

2022/05/01 現在の対応状況

  • エンジン
    • 技巧2: YES
    • やねうら王: NO
    • Apery: NO
    • Sunfish4: NO
  • GUI
    • 将棋所: YES
    • ShogiGUI: NO

個人的には、よく使われる名前(Threads とか MultiPV など)に対して Electron 将棋側で変換辞書を持ってしまっても良いのではないかと思っています。

Ponder

概要

USI プロトコルの Ponder をサポートする。

USI Ponder の仕様

Ponder を使用する条件

  • bestmove <move1> ponder <move2> の形式でエンジンが予想手を送ってくること

Ponder で使用されるコマンド

エンジンから以下の順でコマンドが送られる。

  1. position
  2. go ponder
  3. 予想的中 => ponderhit / 予想ハズレ => stop

予想が外れたにも関わらず、エンジンは stop 受信後に bestmove を送らなければならない。

エンジンの予想手が外れた場合
この場合、GUIはエンジンにstopを送ります。
>stop
エンジンはこれに対し、思考中ならすぐに思考を打ち切って、現時点で最善と考えている手をbestmoveで返します。既に思考が終わっていたなら、探索済みの指し手をbestmoveで返します。(bestmoveのあとにponderで相手の予想手を追加しても構いませんが、いずれにしろ無視されます。)

何のためにあるのか何度読み返してもわからない。
なお、 Sunfish は bestmove resign を送っている。(どうせ無視されるので局面に応じで変わる値を送るのが面倒)

エンジンが予想手を 1 つに絞らない場合

なお、先読みをする時に、予想手を一つではなく複数考えたいということがあるかもしれません。そのような場合は、USIの本来の使い方からは外れますが、bestmove ponder ではなく、単にbestmove だけを返し、相手の手番中に勝手に先読みするようにして下さい。

エンジンが bestmove に ponder を付けてこなかった場合、 info で送られてきた pv は現在の局面からのものと解釈し、 ponder を付けてきた場合には予想手を指したあとの局面からのものと解釈するのが正しいと思われる。

USI_Ponder 設定

setoption コマンド

USI_Ponder オプションはエンジン側が使用していなくても、将棋所では常に設定画面に表示され、エンジンに値が送られるとされている。
なお、 USI_Hash も同様である。

将棋所はもともと対局開始のダイアログの中に USI_Ponder と USI_Hash の設定を表示していた。
しかし、現在はエンジンの設定画面の中に追いやっている。

USI_PonderとUSI_Hashに関しては、将棋所4.0.2までは対局ダイアログ内に設定項目がありましたが、将棋所4.1.0からは、エンジン設定ダイアログを開いた時に上部に表示される「相手の手番中に先読み(USI_Ponder)」と「ハッシュメモリ(USI_Hash)」で設定するようになりました。
この二つに関しては、エンジンが起動時にoptionコマンドで返さなくても、将棋所で対局を開始するときに必ず送るようにしてあります。

おそらく、以前との互換性のために必ず送るようにしているのだと思う。
2022/6/14 現在、 USI_Ponder と USI_Hash を明示的していないが送られてきたら使うというエンジンは発見できていない。
したがって、将棋所と同じ実装を Electron 将棋がする必要性は無いと思う。
ただ、 USI_Ponder と USI_Hash が無ければ追加するというのは簡単に実装できるのでやっても良いかもしれない。

go ponder コマンドの有無

USI_Ponder が false の場合に将棋所は go ponder コマンドを送らない。

つまり、 go ponder が送られるのは、 USI_Ponder が true でありなおかつ bestmove で ponder が指定された場合だけである。

USI Ponder の利用状況

  • 使用するエンジン
    • やねうら王
    • Apery
    • Sunfish4(予想手を送っているが内部では使わずに前の局面で置換表を溜め込んでいる。 info も送っていない。)

Stochastic Ponder

やねうら王系は Stochastic Ponder 設定を有効にすると予想手を送った上で前の局面から思考しているらしい。
https://yaneuraou.yaneu.com/2021/05/04/the-function-of-stochastic-ponder-in-shogi-ai/
ただ、この場合は PV の表示や評価値の表示に問題が出る。

一方で白ビールは予想手自体を送っていない。

依存モジュールのライセンスレポートの修正

npm run license:report を実行した際に devDependencies を除外しているが、PCアプリに使われる electron や electron-builder が入ってこないので、成果物を公開する前に生成フローを改善する。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.