56将棋開発ブログ

5×6マスのミニ将棋、「56将棋」で遊べるものをいろいろ開発してます。

JavaScriptで将棋のルール その4 ~ 局面の内部表現 ~

こんばんは、ただのあほです。

今回は、JavaScript将棋盤の、

局面の内部表現がどうなっているかについて書いてみようと思います。


まず、「 Position (局面)」というオブジェクトに、

どんな情報をもたせているか、ですが、


・ 盤 Board

番兵(OUT_OF_BOARD)もいれて11×11
 
9×9の将棋盤のまわりに1層の番兵をおいている


・ 持ち駒 Capture

先後、駒の種類という2つの変数がインデックスになっている配列

配列の中身がもっている駒の枚数


・ 手番 turn

true が先手、false が後手


・ 歩のフラグ FuFlg

ある筋に歩があるかないかをあらわすフラグ 二歩の判定につかう

先後、筋という2つの変数がインデックスになっている配列

その筋に歩が、true ならあり、false ならない


・ 玉の位置 blackKingPos whiteKingPos

先後それぞれの玉が、どの段、筋にいるか


というふうにしています。


ま、なにはともあれ、コードを貼ってみたいとおもいます。


gist9386134


また、このオブジェクトのプロトタイププロパティには、

do_move    動かす

undo_move   もどす

Set_default  初期配置にセット

IsControl    あるマスに先後どちらかの駒の利きがあるかどうかしらべる

CanMove     ある駒があるマスに動けるかどうかしらべる

CanDrop    歩、桂、香を打っていい段かどうか、二歩かどうかをしらべる

MakeLegalMoves 合法手を生成する

EvalPieceValue 駒割にもとづいて局面を評価、点数化する


といった関数をもたせています。

その中身は、長くなるので次回以降に。


それはそうと、メンバの頭文字が大文字だったり小文字だったりと統一感がないですね。

あまり意識せず適当につけていたのですが、(よくないですね)

よくみると、配列は大文字にしているというルールがありますね。

いま気づきました。どないやねん。


単語の区切りを大文字にする方法(キャメルケースというらしい)と、

_ で区切る方法(スネークケースというらしい)があるみたいですが、

基本はキャメルケースをつかって、

ある関数の中だけでつかう変数(ローカル変数でいいんでしょうか)は、

スネークケースをつかってます。


あと、do_move と undo_moveは、

やねうらおさんのブログに書いてあったものを

そのままマネしたのでスネークケースになっています。

Set_default もそれにひっぱられてスネークケースになっていて、

あと「 Set 」は大文字にするクセがあるのでそうなっています。

気になったかたは、ごめんなさい。


なんにせよ合理的なルールにのっとって変数名をつけるのがだいじなんでしょうね。

気をつけてプログラミングしていきたいと思います。


つぎは、「 局面 Position 」オブジェクトのプロトタイプにもたせた

それぞれの関数について書くことになると思います。


それでは。