ルール
- 攻方が、王手の連続で玉を追い詰める。
- 最短最善手順で玉を詰めれば勝ち。
- 攻方は、持ち駒と詰め中に手に入れた駒を利用できる。
- 玉方は、最長最善手順をもって詰めを回避する。
- 玉方は、残りの駒を全て持ち駒として持っている。
- 玉の逃げ方で、同手数のものがあれば、相手に駒を与えないように逃げる。
領分に関して
- 携帯用アプリケーションとして配布。フリーウェアとする。
- 問題は全て古典の問題とする。
- いずれ棋士との契約による新問題を領分できれば尚良し。
開発に関して
- 最も開発コストとして重さを持つのが、AIの作成部分。汎用性を持つAIを作成することが慣用。30手程度なら総当たり方式でも良いのではないか(無理)
- 問題のモジュール化。後から問題を追加するようなシステムを開発する。
将棋アルゴリズム参考リンク
だらだらと開発メモ
AI考。王手をされた玉側の取るべき手法は3つ。
- 王が移動して相手の行動圏外に移動する。
- 王手されている駒を取得する。
- 王手している駒が飛び系の場合(桂馬除く)、間に適当な駒を貼る。
3番目のパターンが選べる状況になると、異常に手の種類が増えてしまうので結構しんどい気がする。
もし正解パターンならば、正解用の動作をすればいいので、全くAIの出る幕はない。
誤ったパターンを選択した場合に、n手詰めならば、後はユーザがどう行動しようとも
n手以内に詰めることのできない行動を適当に選択する必要がある。
アルゴリズムの計算負荷がn二乗となるので、携帯端末での計算は厳しいかもしれない。
ただ、先手の攻撃に関する条件が「王手をすること」なので、この時点で先手の行動パターンは絞られる。
誤ったパターンを選択した場合に、n手詰めならば、後はユーザがどう行動しようとも
n手以内に詰めることのできない行動を適当に選択する必要がある。
アルゴリズムの計算負荷がn二乗となるので、携帯端末での計算は厳しいかもしれない。
ただ、先手の攻撃に関する条件が「王手をすること」なので、この時点で先手の行動パターンは絞られる。
ここら辺で、AIはなしにしてみようかと考えてみたが、「間違った場所に打ってます」
なんてメッセージを出したところで説得力がないので駄目。
まぁ色々考えてみよう。つか携帯とゲームボーイってどっちが上なんやろ。
なんてメッセージを出したところで説得力がないので駄目。
まぁ色々考えてみよう。つか携帯とゲームボーイってどっちが上なんやろ。
あと、ゲームのシステムについて考える。JAVAだからクラスを使う。
取り合えず、ゲームの状態クラスを作る。盤面と、持ち駒。
あとゲームのイベントマネージャクラス。
イベント(ユーザのアクション)をマネージャに投げると、その結果を教えてくれ、状態を更新する。
もし打てない手だとしたら、エラーを返す。
表示系はマネージャからのリターンを使って描画。
常に最新リターンの状態を参照できるようフックしておく必要がある。
あとシリアライズクラス。盤面の状態をすべて直列に保持しておく。
メモリ足りるかな・・。
取り合えず、ゲームの状態クラスを作る。盤面と、持ち駒。
あとゲームのイベントマネージャクラス。
イベント(ユーザのアクション)をマネージャに投げると、その結果を教えてくれ、状態を更新する。
もし打てない手だとしたら、エラーを返す。
表示系はマネージャからのリターンを使って描画。
常に最新リターンの状態を参照できるようフックしておく必要がある。
あとシリアライズクラス。盤面の状態をすべて直列に保持しておく。
メモリ足りるかな・・。