5五将棋

    「5五将棋」アプリについて

     現在リリースしている「3三将棋」アプリとUI部分以外はほとんど同じソースを使って作った5五将棋アプリです。幾つかの5五将棋アプリと対戦させてみたところ、結構勝ったり負けたりのいい勝負なので機種によっては動作が重いとはいえ、そこそこ楽しめるかもしれません。アプリの仕様は3三将棋アプリとほとんど同じなので3三将棋アプリの記事を見ていただくとして、ここでは3三将棋アプリと違う点について書いておこうと思います。  

    5五将棋ならではの仕様(桂馬の扱い)

     本来の5五将棋?では敵陣一段目(後手は5段目)に駒が進むと駒が成れますが、5五将棋アプリでは初期配置によって駒が成れる段が変わる仕様にしています。使用する駒に桂馬が含まれている場合に一段目(後手は五段目)でしか駒を成れないとすると不都合が生じるからです。
     例えば以下の局面は持ち駒の桂馬を2四に打ったところですが、

    桂馬を打った局面

    打った桂馬が3二に跳ねた場合に、その時点で駒が成れないと次に駒の行き場がなくなってしまいます。通常の将棋で先手の歩が一段目に進んだ場合強制的に「と金」になりますが、それと同じで使用する駒に桂馬がある場合は二段目でも成れるようにする必要があります。そのため「初期配置に桂馬が含まれている場合は、桂馬だけでなくすべての駒が二段目(後手は四段目)で成れるルールにしています」。
     後述の初期配置編集機能で初期配置を編集した場合も、初期配置に桂馬が一枚でも含まれていれば、先手は二段目(後手は四段目)で成れるように設定され、元々桂馬が含まれていた初期配置から桂馬を除いて保存すると、先手は一段目(後手は五段目)で成るように設定保存されます。

    千日手回避

     「3三将棋」アプリでは千日手回避のために特別な処理はしていません、千日手になるのが当然の成り行きと思えるケースが多いためです1。しかし5五将棋アプリの場合は駒の損得が発生しない序盤の段階で千日手になってしまうケースがあまりにも多いので千日手回避のロジックを組み込んでいます。同じ局面が3回発生した場合にはAIの手を次善手(あくまでもアプリのAIが次善手と判断しているだけです)を指すようにして、なるべく千日手を回避するようにしています。但し次善手を指していても千日手になることもあるので、絶対千日手を避けるというわけではありません。

    瞑想モード追加

     Version1.0.0.2で瞑想モードを追加しました。「読みの深さ」のところで説明していますが、「長考」モードでは3手読みで候補手を13手に絞ってその候補手に対して5手読みを行いますが、「瞑想」モードでは候補手を絞らずに3手読みしたすべての手を評価値でソートした後に5手読みしています。読みの深さは変わっていませんので、詰みを見つけた場合等、枝刈りが効果的に働いて「長考」モードより応答が速くなることもあります。但し、ゲーム終盤に詰みを逃しにくくなったのは確かですが、自分がテストしている限りにおいては「長考」モードより強いかどうかは微妙なところです。

    瞑想モードの評価関数変更

     Version1.0.2.0から瞑想モードの評価関数が新しくなりました。瞑想モード以外は「駒得」しか考慮していない評価関数を使用していますが、瞑想モードでは「駒得」+「駒の働き」を考慮した評価関数を使用しています。人によっては対戦して棋風が違うと感じるかもしれません。少し強くなったとは思いますが、長考モードより指し手に時間をかけていることを考慮すると、強くなったと言っていいかは相変わらず微妙なところです。
     評価関数の変更がどのように作用したのかは詳しくは分かりません。評価関数の変更内容に関してはこの記事を参照してください。

    二ヶ国語対応

     Version1.0.1.0から二ヶ国語対応しました。Androidの言語設定で日本語以外を選ぶとアプリで使用するメッセージが全て英語表現になります。

    クリップボードを使った棋譜出力

     Version1.0.2.0からCSA形式(*.csa)での棋譜出力が出来るようになりました。

    棋譜出力画面

     左上のファイルアイコンをタップすると共有画面(インテント)が表示されるので、クリップボードを選ぶかテキストファイルを扱えるアプリを選択すれば棋譜データを貼り付けて保存出来ます。
     CSA形式の棋譜はヘッダ部分に駒の初期配置を定義出来る(駒落ち将棋にも対応している)ので、駒の初期配置パターンを選択出来るこのアプリに都合がいいと思ったので採用しました。但しCSA形式の規約を全て網羅しているわけではなく、必要最小限の部分だけ実装しています。Tで始まる指し手の消費時間や$で始まる棋譜情報は出力されません。以下が出力される棋譜の一例です。

    ' #5五将棋 https://play.google.com/store/apps/details?id=shogi55.io.github.happyclam 
    '
    V2.2
    N+Player
    N-AI
    P1-HI-KA-GI-KI-OU
    P2 *  *  *  * -FU
    P3 *  *  *  *  * 
    P4+FU *  *  *  * 
    P5+OU+KI+GI+KA+HI
    -
    +4544KI
    -4132KA
    +5453FU
    -2122KI
    +2534KA
    -5141HI
    +3524GI
    -1213FU
    +2413GI
    -2213KI
    +1513HI
    -0012GI
    +1312HI
    -1121OU
    +0011KI
    

    クリップボードを使った棋譜読み込み

     Version1.0.2.4からCSA形式(*.csa)の棋譜入力が出来るようになりました。

    棋譜入力画面1

     テキストボックスに棋譜テキストデータを貼り付けて読み込みボタンをタップすれば、棋譜を読み込みます。このアプリ自身が出力した棋譜データは読めますが、他のソフトから出力された棋譜データは読み込みに失敗するかもしれません。エラーが発生した場合はその行数を表示しますので、データを編集して試してください。
     ※カンマ区切りのマルチステートメントには対応していません。
     ※たとえCSA形式(*.csa)の棋譜であっても本将棋(9×9)の棋譜は読めません、5五将棋専用です。

    棋譜入力画面2

     棋譜を読み込んだ後は通常の対局通り、対局者を変更したり局面を戻して途中から指し継いだり出来ます。

    CSA形式の初期配置定義を利用する

     CSA形式の棋譜読み込みが出来るということは初期配置を自由に定義出来るということです。試しに以下のような上下左右の隅に飛車を配置した棋譜(飛車が4枚)を読み込ませてみました。

    ' #5五将棋 https://play.google.com/store/apps/details?id=shogi55.io.github.happyclam
    '
    V2.2
    N+AI
    N-AI
    P1-HI-KI-OU-GI-HI
    P2-FU *  *  *  *
    P3 *  *  *  *  *
    P4 *  *  *  * +FU
    P5+HI+GI+OU+KI+HI
    +
    

    独自定義初期盤面

     飛車4枚の盤面がちゃんと表示されました。ここで「再開」ボタンをタップすると通常通りゲームを開始できます。
     誤って「新規対局」ボタンをタップすると読み込んだ棋譜ではなく、現在「初期配置」メニューで選ばれている初期配置から新規対局が始まってしまうので気をつけてください。

    読み込みエラーの意味

     独自に編集した棋譜ファイルや他のソフトから出力したファイルを読み込む場合はエラーになる可能性があります。以下の表を参考に棋譜ファイルを編集して再度読み込みを試してみてください。

    エラー番号 エラーの意味、可能性のある原因
    01 盤面データの一行が長すぎるか短すぎます。駒のない場所はスペース+アスタリスク+スペース( * )の3バイトです。
    盤面データは一行ずつ改行する必要があります。
    02 盤面データのアルファベット2文字の駒の略号が間違えている可能性があります。
    03 持ち駒データのアルファベット2文字の駒の略号が間違えている可能性があります。
    04 盤面データの先頭Pの文字の次は、数値か+-です。
    05 指し手データの持ち駒を打つ時の記述が間違えている可能性があります。
    06 指し手データの指し手に誤りがあります。飛車(HI)が成っていないのに斜め後ろに移動している等2
    07 P+-'VT%N$以外の文字が行の先頭にあります。
    ちなみにP+-以外の文字は読み飛ばして無視しています。
    08 指し手データのアルファベット2文字の駒の略号が間違えています。
    09 手番データ(+-)は盤面データが記述された後に書かれている必要があります。

    駒に毛筆フォント

     Version1.0.5.3から駒のフォントに毛筆フォントを選べるようになりました。無料フォントの中でも「衡山毛筆フォント」のように再配布可能というものはなかなか無いと思います3

    フォント選択メニュー


    衡山毛筆フォント

    盤面反転機能追加

     Version1.0.9.0から盤面の反転(先手・後手を上下逆さま)表示機能追加しました。画面右上の回転矢印アイコンをタップすると後手を手前にして将棋盤を表示出来ます。

    盤面反転機能

     この機能追加により今までAndroid4.4以上が動作対象機種でしたが、Android5.0以上が必要になります。

    Push通知対応

     Version1.0.7.2からPush通知を受信できます。左上右側にあるアイコンをタップすると受信した最新のメッセージを再度表示します。受信したメッセージがないときは何も表示されません。

    Push通知サンプル

    局面の評価方法変更

     Version1.1.1.0から詰み判定(ゲーム終了判定)処理を導入し、局面の評価方法を変更することによってユーザーレスポンスを改善しました。AIの強さ設定「弱い」、「普通」、「強い」モードで指し手が早くなっています。「瞑想」モードの応答時間はあまり変わっていませんが、従来より一手読みが深くなってさらに強くなったと思います。
     どのように変更したかアルゴリズムに興味ある方は以下の記事を参照してください。

     評価方法を変えたため「AIの設定別の読みの深さに関する表」は削除しました。

    自動保存機能追加

     メモリ逼迫時にAndroidによってアプリが強制終了されるケースが多いので、Version1.1.2.0から一手指す毎に棋譜を自動保存する機能を追加しました。
    不意にアプリが落ちても起動後「再開」ボタンをタップすることで対局の続きが可能です。
     ※棋譜入力欄から入力された棋譜は自動保存の対象になりませんので、必要であれば棋譜出力して保存してください。
     ※万が一自動保存に失敗して何らかのエラーが発生しても、「新規開始」すれば新たにファイルが作成されるので問題ありません。それでもエラーが表示される場合は、「アプリ情報」メニューから「ストレージ」を選んで「ストレージを消去」の操作をしてください。その際には対局データは消失し各種設定も初期化されますがご了承ください。

    初期配置編集機能追加

     Version1.1.3.0から初期配置の編集機能を追加しました。編集したパターンを保存するとPattern0〜Pattern10の初期配置選択画面に反映されます。
     この機能追加により、初期配置パターンは予め用意されているというだけで自由に上書き可能なものとなりましたので、自分で初期配置を変更して遊ぶことが出来ます。また、特定の局面を再現して詰み手順の確認などにも利用出来ます4。詰将棋作成にも利用できますが、初期配置盤面を保存するには先手と後手の玉が一枚ずつ必要となりますので、「双玉の詰将棋」にするか先手玉をどこか影響が無い場所に配置する必要があります。

    初期配置編集

    • 左上のチェックマークアイコンをタップすると編集モードになります。
    • 将棋盤の空いてる場所をタップすると駒選択ダイアログが表示されるので、駒を選ぶと新しく駒が配置されます。
    • 既に駒があるマス目をタップすると駒が削除されます。
    • 持ち駒は先手・後手それぞれの駒のボタンをタップすると7枚を上限にカウントアップします。7に達した後タップするとカウントダウンします。

    初期配置保存

    • 編集モード中はメニュー操作は出来ません。盤面を編集し終えたら「初期配置保存」か「中止」を選んで下さい。保存を選ぶと画面に表示されているNo.の初期配置選択画面に上書き保存されます。「中止」を選ぶと編集は無かったことになります。

    1. 千日手になって当然に見えると言ってもその局面を迎える前にもっといい手(最善手)を逃していると思われるケースが多いのですが、同一局面の繰り返しが始まってからでは時すでに遅しとなっていて千日手を避けられなくなっているという意味です。この辺りの事情はAIの出来の悪さなので仕方がありません。3三将棋の場合は無理に千日手を避けると致命的な悪手になるので敢えてそのままにしています。 

    2. 5五将棋大会の棋譜を読み込んでテストしていたら、成りを不成で出力していると思われる棋譜も混じっていました。 

    3. svgファイルにフォントデータを埋め込んでいるため、再配布可能なフォントが必要でした。将棋の駒に使用する文字分だけなので自作も考えられますが、当然有名な書家が書いた字の方がいいでしょう。また、アプリ内にリンクを貼ったほうがいいのかどうかわからなかったので、一応権利者にも確認しました。 

    4. 今までは特定局面の検討をする場合、棋譜ファイル(CSA形式)を用意して読み込む必要がありました。