sakurapyon’s blog

sakurapyon’s blog

simkのソースを読んでの感想

れさぴょんで困ってる部分がかなりシンプルに解決されていて魅力的

  • 盤面構造は壁なしの9x9
    • 壁チェックをするのとx/yチェックをするのとどっちが高速か?
    • 壁が無ければ、全体スキャンが一重ループで済むので早いはず(手生成など)
    • 壁の厚みが足りなくて結局x/yチェックが必要になったりする
  • 壁の座標は (x-1)+(y-1)*9 [0〜81]
    • れさぴょんは x*16+y [0x11〜0x99]
    • 敵陣・自陣をまとめて処理したい場合、 x+y*9 の方が楽
      • 例えば敵陣のスキャンが 0〜26のループにて完了する
  • 手情報は from/to/koma/nari/cap/value 合計7バイト (koma削れば6バイト)
    • がんばれば4バイトに押し込められるかも...
    • 駒打ちは fromを負数にすることで表現
    • 駒種別を別に持たなくてもいい (移動の場合は盤面から情報は得られる)
  • 利き情報はその都度計算
    • 2点間の利きを算出するテーブルを持つ 駒種別/from/to の3次元
    • 盤面情報に利きを持った方がいいのかどうかは悩みどころ
      • 利き情報を持ったままだと、Moveが律速になって高速化できないと思う
      • 現状のsakurapyonでは全時間の15%をMoveが占めている。利きの計算がそのうち半分ぐらい。

続くかも