TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

Unityで将棋アプリの開発 その13(棋譜解析)

作成している将棋アプリに、対局後の棋譜解析機能を実装した。

機能内容

対局終了後に表示されるダイアログで、「棋譜解析」ボタンを押すと棋譜を解析して形勢グラフを表示する。
f:id:TadaoYamaoka:20220326121851p:plain

f:id:TadaoYamaoka:20220326122029p:plain

対局中のプレイヤー手番では、プレイヤー側の評価を非同期で行っているので、評価結果を残しておき、まずはその結果をすぐに表示する。
AI側の評価は、AIのレベルが低い場合、温度パラメータ等を変更しているため、AIの探索結果をそのまま使えないので、再評価する。
再評価は非同期で行い、解析が終わったものからグラフに反映される。

解析時間を考慮して、再評価時の探索は64プレイアウトに制限する。

棋力測定モードではAI側の探索結果がそのまま使えるので、再評価なしですぐに表示できる。

好手、悪手(10%)、悪手(20%)はマークするようにした。

局面の移動

棋譜解析では、形勢グラフのタップもしくは、ボタンで、局面の移動ができる。
局面を移動すると、512プレイアウトまで解析を行い形勢グラフに反映する。

移動した局面で、ヒントと定跡を使用して、検討ができる。

f:id:TadaoYamaoka:20220326121750p:plain

実装上苦労した点

実装には、想定以上に時間がかかった。
グラフを表示するために、線を引く必要があるが、Unityで綺麗な線が引けず試行錯誤する必要があった。
解決した方法については、別途記事にした。
UnityのLineRendererのアンチエイリアシングを有効にする - TadaoYamaokaの開発日記
また、線が折れると線が細くなる現象が起きたが、Corner Vertecesを1にすることで解決できた。


あと、スマホの画面に、形勢グラフを見やすいように収めるのに、グラフの表示領域や文字サイズの調整を繰り返す必要があった。
Unityでこの調整を行うと、確認のためにアプリを実行するのにビルドで1分くらい待たされるのでかなり効率が悪い。
デザインは、はじめにAdobe XDとかで行う方がよいと思う。

まとめ

作成している将棋アプリに棋譜解析機能を実装した。
対局後にどの指し手が悪かったか振り返ることができるので、将棋の勉強に役立つと思う。

対局中に非同期で評価を行っていて、棋譜解析の結果は待つことなく表示されるので、ストレスなく使うことができる。
このアプリを使う理由になってくれればよいと思っている。

最低限、遊べる機能は実装できたが、既存のアプリにくらべて見劣りしているので、もう少しクオリティを上げてからリリースしたい。

次は、互角局面か、手合割を実装したい。