ステイルメイト
将棋なら勝ちですが、チェスの場合引き分けだそうです。
http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%86%E3%82%A4%E3%83%AB%E3%83%A1%E3%82%A4%E3%83%88
以前話題に上がったと思うけど、失礼
追記: ちょっと修正した;; 10/13
象歩将棋
Webと将棋で何か具体的なもの作って行こうとしてます。
>駒クラスは廃止
1度目のリファクタリングのとき抽象化でどの位すっきりするか試してみましたが、
結局思ったほどの成果がなく、2度目の構想を考えていました。
(実際、詰め将棋のところで汚いコードを書くはめに)
仕事と遊びに頭を占有されしばらく保留・・・とほほ
修チャンの構想をヒントに、また少しその気になってきました。
前回は将棋をチェス、チャイナ将棋、タイ将棋のように少しずつルールが異なる場合の
抽象化をやってしまったことに気が付きました。
今回の(リファクタリング)テーマは性能と疎結合化です。
日本将棋に絞り無駄な抽象化いっさいやりません。
ルールは静的に、ただし、ルールのロジックは要素(プレーヤ、盤、駒台、駒、・・・)
の構造に左右されない疎結合化を計ります。
また1から作り直しです。;;
平手の開始局面で指せる手は 30 通り
一手見つけるのに 0.026 秒 / 1,000,000
局面のコピーは 0.33 秒 / 1,000,000
局面の評価は、いったいどのくらいの時間が必要となるだろうか
某ソフトは普通の PC で一秒に三十万局面読むそうな。気になる。
http://www.geocities.jp/bonanza_shogi/
>383 駒クラス CPiece は後々コピーして使用するので
駒クラスは廃止
駒の特性を突き詰めると種類だけなので 3bit 相当のデータでしかない。
先手/後手や成りは場の属性と考えることにした。
たとえば駒のオブジェクトを 40 個用意してポインタを張ろうとか考えてたけど、
持ち駒になった場合には区別が無い。駒のインスタンス化は本質じゃ無い気がする。
やはり重要なのは場のコピー、インデクス変換、...の方だ
竜王戦の挑戦者は佐藤。
http://live.shogi.or.jp/ryuoh/kifu/070919.kif
棋譜ブラウザもよろしく;;
http://owa.as.wakwak.ne.jp/zope/coreblog/196
その通りです。流石、話が早い^^
辿り来て今だ山麓ですが、ライブラリ(ツール)として使えるものを目指してます。
モデルとしては別のアイディアもありそうですが、その場合の検証ツールとしても使えますので。
とりあえず書籍や他人のコードは見ないで作って升。
本当に面白いところは大局観をコード?で表現するところですので、そこで愉しみましょう。
やはり「着眼大局、着手小局」の言葉は有効な指針だと思います。
ポンちゃんはもう基本ライブラリの作成は済んでることと思いますので、
こちらが公開したら、いろいろ指摘してくれると有難く思います。
オープンソースな将棋ライブラリサイトを作っても良いかと思っています。
と思ったら既にありますね
http://www.google.co.jp/search?hl=ja&q=%E5%B0%86%E6%A3%8B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&btnG=%E6%A4%9C%E7%B4%A2&lr=
>月並みですが CMovesRule というクラス名
移動に関する低レベルロジックを静的なクラスにすべて入れ込む訳ですね。
そして駒や盤、駒台はモデル(データのみ)のオブジェクトにする。
また、次の一手などの高級な思考ロジックも静的なクラスにする。
ただし、思考クラスでは永続化されたデータソースをバインドすることに
より、思考が成長することを可能にする。
結局はこの形になるのでしょうか?
1) 機能通りに移動 - の基本クラスを作成中
テストとして駒数 4 個で総可能手 17 通り程のデータで時間を計測してみました。
1,000,000 回繰返して約 0.75 秒。オプティマイズ (gcc -O3) かけても 0.2 秒くらい。
果たしてこれで "300,000局面/秒" 以上読めるソフトができるのでしょうか...?
駒クラス CPiece は後々コピーして使用するのでなるべく小さく作ろうとしています。
データは駒の種類と位置だけなので現状のインスタンスサイズは 2 バイトだけど。
試しにこれを仮想クラスにしてみると、それだけで 16 バイトになってしまう。スゲー;;
C だと多分テーブルや #define の嵐になります。一方 C++ は便利だけどリソースを浪費しがち。
なんやかんや、やっぱり C/C++ は面白い^^
月並みですが CMovesRule というクラス名になっております^^
とりあえず条件 1)2)3)4) を実装する予定です。
彼の方は先ほど辞意を表明なされたようですが、
私は続けるつもりですのでご心配なさらずに居てください(笑
ロジックのみだと 1000 行くらいで済むと思うので、
ソースは完成したらご覧頂ければ幸いです。may be comming soon (;-p