和製最強探索部みたいのを目指して書き始めた

週末の電竜戦で実質の負け確から「やっぱ勝ちたい」と思ったのですが。

まあ、一番人気が予想される「みずうら王」も賢い人が組んでいるわけだし、自分のスキル(技術/仕事能力の意)で何ができるかというと地道な設計が一番得意なので、早く結果が欲しいと求められる現場仕事で突貫工事能力を上げて組み上げた将棋ベーシック改よりも、純粋な探索機能で採用されているやねうら王探索部よりもエンジンに採用されるような探索部を書いたらええんちゃうと思ってVC立ち上げました。 

class ShogiBoard {public: ShogiBoard(); ~ShogiBoard();
enum TEBAN { SENTE = 0, GOTE, };
enum KOMAKIND{ OU = 1, // 王将 HIS, // 飛車 KAK, // 角 KIN, // 金 GIN, // 銀 KEI, // 桂馬 KYO, // 香車 HU, // 歩 RYU, // 龍 UMA, // 馬 NARIGIN, // 成銀 NARIKEI, // 成桂 NARIKYO, // 成香 TO, // と BLANK, // 空白 };
union KOMAOBJ { TEBAN teban; KOMAKIND kind; };
KOMAOBJ m_board[81];};

実は整理するとデータ構造これだけで良くないかと。やねうら王も海外のチェスサイトで新版が出るたびにパクってきて改造して解読した結果を日本語解説するという開発手法でやっているように見受けたので(違ったらごめんなさい)

純和製でも丁寧に将棋に必要なデータを1ビットずつ割り出せば必要最小限になってVC++コンパイラ最適化を信用するならこのデータ構造が一番速いはず。

実は数字で描いている将棋ベーシック改とほぼ同じデータ構造なのですが、マジックナンバー使いまくりでプログラム中に数字が出てくる行儀の悪いのより、VC++での参加者が多いならVC++のコードで書いたほうが良いのかなと。

あ、今読み返したら「81」も数字やけど、これは流石に「分かれや」です。

しかし今から3日で探索部として仕上げて電竜戦に間に合わせるのはちょっと厳しいかもだぜ。まあ今後も大会があって開発者も読みに来てくれたら何かの役に立つかも。

あと盤面だけでなく手駒もデータ構造いりますね。また書き足します。


🄫1999-2023 id:karmen