将棋の駒を置ける位置の計算を考えてみる
こんにちは。なおキーヌです。
ブログ毎日更新は303日目になります。
前回は将棋の基本的なつくり方を考えてみました。
今度は駒を置けるパターンの洗い出しを考えてみましょう。
相手に取られるとかそういうのを抜きとして純粋に選択した駒が
現在どの位置にいるのか、そしてその駒の動ける先の
どこがいけるのかだめなのかを知るための考え方になります。
駒を選択したらまずは移動可能エリアを絞る
前回も軽く説明しましたが、カーソルを駒に合わせて選択した時に
動かせるエリアを見つける必要があります。
歩であれば前方にしかいけないので処理は凄い楽なのですが、
王や金になると結構面倒くさそうです。
基本的に桂馬以外は進行方向に自駒があると動かせません。
(最近覚えたばっかりなので間違ってたらすみません。)
相手の駒の場合はとることが出来ますがそこで止まらなければいけません。
それでも移動は出来るので今回の処理のNGにはならないですね。
それでは金が右端に居る状態で左に歩が居る場合の動ける位置判定をしてみましょう。
金が動ける範囲は自分が5の場所にいる場合、キーボードのテンキーでいう4・7・8・9・6・2でしたね。
プログラミング的に左上から見ていくのが楽そうなので、7からみていきましょう。
7:何も無いので動けますね。=TRUE
8:これも何もないので動くことが出来ます。=TRUE
9:条件盤面の右端に居るので右斜め上に行くことは不可能です。=FALSE
4:左には歩が居るので動けませんね=FALSE
6:これも右端に居るので動けません=FALSE
以上のことから動けるのは7と8だけになります。
この際移動可能表示を青とした場合、移動不可エリアは赤とかにすると親切です。
もしくは移動できないマスは何も色を付けなくてもいいかもしれません。
これで基本的な移動処理は完成しましたね。
関数化しておくと相手の時にも使えます。
AIを作るときはこの何パターンも考えないといけない地獄
プレイヤー同士の場合はどこをどう動かすかはプレイヤー次第なので計算処理を作る必要性はないです。
先ほど書いた移動できるエリア処理さえしっかりしてしまえばゲームになります。
ですがNPCとしてAIにやらせようとした場合一気にプログラミングの難易度があがります。
ファミコン時代の将棋でも、内部で有効な攻め手を計算する処理がありました。
その際は機械的にならないように敵が考察中のような顔をしたりしてました。
いくらファミコンが低性能だとは言え、それでもコンピューターなので人間の思考よりは早いです。
将棋の名人さんは、もしかするとファミコンより処理が早いかもしれません(笑)
現在のAIの場合はこの歩がここにいる場合はこう動けばこうなるというデータベースが蓄積されまくって、
その中で何手先も進めて勝ち確になったデータを引っ張り出して打つといった感じなのでしょう。
これを手動でプログラミングするとなるとかなり骨の折れる作業になります。
そしてAIを作る場合はその攻め方を知っておかなければいけません。
なので今の私には将棋のAIを手動で作ろうと思ってもできないわけですね。
恐らくパターンをつかんでしまえばプログラミングすれば不可能ではないかもしれません。
世の中には将棋のプログラムを公開している人もいると思いますし
書籍にも将棋プログラムの作り方は何冊かみかけましたのでそれを見て勉強しようと思います。
プログラマ視点で将棋を考えてみるとすごく楽しくなってきました。
これを機に将棋をしっかりと覚えてしまうのもありかもしれません。
一度覚えてしまえばずっと遊べるゲームとして確立するのでワクワクしてきましたね。
将棋のルールと考え方をしっかりと身に付ければ他のゲームを作る土台にもなりますし一石二鳥です。
それでは。