Struct usiagent::rule::Rule[][src]

pub struct Rule {}
Expand description

合法手の列挙等を行う将棋のルールを管理

Implementations

盤面上の駒を移動する合法手をビットボードに列挙

Arguments
  • teban - 手を列挙したい手番
  • self_occupied - 手番側から見た手番側の駒の配置を表すビットボード。(後手の場合は上下逆さになっている)
  • from - 盤面の左上を0,0とし、x * 9 + yで表される駒の移動元の位置。常に先手側から見た位置になる(後手の場合も逆さまにならない)
  • kind - 移動する駒の種類

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

合法手をバッファに追加

Arguments
  • m - 盤面の左上を0,0とし、x * 9 + yで表される移動先の駒の位置。後手の手の場合は上下さかさまになっている
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 移動する駒の種類
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • inverse_position - ビットボードを上下逆さにするか否か
  • move_builder - LegalMoveを生成するためのコールバック
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

王を取る合法手をバッファに追加

Arguments
  • m - 盤面の左上を0,0とし、x * 9 + yで表される移動先の駒の位置。後手の手の場合は上下さかさまになっている
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 移動する駒の種類
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • inverse_position - ビットボードを上下逆さにするか否か
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

一マスだけ駒を動かす合法手を列挙してバッファに追加する

Arguments
  • teban - 手を列挙したい手番
  • self_occupied - 手番側から見た手番側の駒の配置を表すビットボード。(後手の場合は上下逆さになっている)
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 移動する駒の種類
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • inverse_position - ビットボードを上下逆さにするか否か
  • move_builder - LegalMoveを生成するためのコールバック
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

一マスだけ駒を動かす合法手を列挙して返す

Arguments
  • teban - 手を列挙したい手番
  • self_occupied - 手番側から見た手番側の駒の配置を表すビットボード。(後手の場合は上下逆さになっている)
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 移動する駒の種類
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • inverse_position - ビットボードを上下逆さにするか否か
  • move_builder - LegalMoveを生成するためのコールバック

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

盤面上の駒を移動する合法手のうち、角の右上に移動する手をビットボードに列挙

Arguments
  • self_occupied - 手番側の駒の配置を表すビットボード。盤面の上もしくは左方向へ移動するときは逆さまにひっくり返した配置になる。
  • opponent_occupied - 相手側の駒の配置を表すビットボード。盤面の上もしくは左方向へ移動するときは逆さまにひっくり返した配置になる。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される駒の移動元の位置。盤面の上もしくは左方向へ移動するときは逆さまにした時の位置になる。

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

盤面上の駒を移動する合法手のうち、角の右下に移動する手をビットボードに列挙

Arguments
  • self_occupied - 手番側の駒の配置を表すビットボード。盤面の上もしくは左方向へ移動するときは逆さまにひっくり返した配置になる。
  • opponent_occupied - 相手側の駒の配置を表すビットボード。盤面の上もしくは左方向へ移動するときは逆さまにひっくり返した配置になる。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される駒の移動元の位置。盤面の上もしくは左方向へ移動するときは逆さまにした時の位置になる。

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

先手の角の合法手を列挙してバッファに追加

Arguments
  • sente_self_occupied - 先手側から見た先手側の駒の配置を表すビットボード。
  • sente_opponent_occupied - 先手側から見た後手側の駒の配置を表すビットボード。
  • flip_self_occupied - 後手側から見た後手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 後手側から見た先手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 駒の種類
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • move_builder - LegalMoveを生成するためのコールバック
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

後手の角の合法手を列挙してバッファに追加

Arguments
  • self_occupied - 後手側から見た後手側の駒の配置を表すビットボード。
  • opponent_occupied - 後手側から見た先手側の駒の配置を表すビットボード。
  • flip_self_occupied - 先手側から見た先手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 先手側から見た後手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 駒の種類
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • move_builder - LegalMoveを生成するためのコールバック
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

盤面上の駒を移動する合法手のうち、飛車と香車の上に移動する手をビットボードに列挙 反転したビットボードを渡す仕様のため返されたビットボードから列挙される手は盤面をひっくり返した時の形になっていることに注意。

Arguments
  • flip_self_occupied - 手番側の駒の配置を表すビットボード。盤面の上もしくは左方向へ移動するときは逆さまにひっくり返した配置になる。
  • flip_opponent_occupied - 相手番側の駒の配置を表すビットボード。盤面の上もしくは左方向へ移動するときは逆さまにひっくり返した配置になる。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される駒の移動元の位置。盤面の上もしくは左方向へ移動するときは逆さまにした時の位置になる。

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

盤面上の駒を移動する合法手のうち、飛車と香車の右に移動する手をビットボードに列挙

Arguments
  • self_occupied - 手番側の駒の配置を表すビットボード。盤面の上もしくは左方向へ移動するときは逆さまにひっくり返した配置になる。
  • opponent_occupied - 相手側の駒の配置を表すビットボード。盤面の上もしくは左方向へ移動するときは逆さまにひっくり返した配置になる。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される駒の移動元の位置。盤面の上もしくは左方向へ移動するときは逆さまにした時の位置になる。

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

先手の飛車の合法手を列挙してバッファに追加

Arguments
  • self_occupied - 先手側から見た先手側の駒の配置を表すビットボード。
  • opponent_occupied - 先手側から見た後手側の駒の配置を表すビットボード。
  • flip_self_occupied - 後手側から見た後手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 後手側から見た先手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 駒の種類
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • move_builder - LegalMoveを生成するためのコールバック
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

後手の飛車の合法手を列挙してバッファに追加

Arguments
  • self_occupied - 後手側から見た後手側の駒の配置を表すビットボード。
  • opponent_occupied - 後手側から見た先手側の駒の配置を表すビットボード。
  • flip_self_occupied - 先手側から見た先手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 先手側から見た後手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 駒の種類
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • move_builder - LegalMoveを生成するためのコールバック
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

先手の香車の合法手を列挙してバッファに追加

Arguments
  • flip_self_occupied - 後手側から見た後手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 後手側から見た先手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • move_builder - LegalMoveを生成するためのコールバック
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

後手の香車の合法手を列挙してバッファに追加

Arguments
  • flip_self_occupied - 先手側から見た先手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 先手側から見た後手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • nari_mask - ビットボードを用いて移動先で駒が成れるか判定するためのマスク
  • deny_move_mask - ビットボードを用いて移動先で駒が成らなくても合法手か判定するためのマスク
  • move_builder - LegalMoveを生成するためのコールバック
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

ビットボードの立っているビットのうち最下位のものの位置を返す

呼出し後、最下位にあったビットは0に更新される

盤面上の位置と駒の種別を元に合法手を列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • x - 左上を0,0とする移動元のx座標
  • y - 左上を0,0とする移動元のy座標
  • kind - 移動する駒の種類

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

ビットボードから列挙された合法手の情報からLegalMoveを生成して返す

Arguments
  • banmen - 現在の盤面
  • opponent_bitboard - 相手の駒の配置を表すビットボード。常に先手視点

盤面上の位置と駒の種別を元に合法手を列挙してバッファに追加する

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • x - 左上を0,0とする移動元のx座標
  • y - 左上を0,0とする移動元のy座標
  • kind - 移動する駒の種類
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

盤面上の位置を元に合法手を列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • x - 左上を0,0とする移動元のx座標
  • y - 左上を0,0とする移動元のy座標

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::legal_moves_allの内部から呼び出される)

盤面上の位置と駒の種別を元に合法手を列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • src - 移動元の位置

渡した引数の状態が不正な場合の動作は未定義

盤面上の位置と駒の種別を元に合法手を列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • dst - 移動元の位置

移動元の位置からさらに移動できる位置を取得するときに使う。 渡した引数の状態が不正な場合の動作は未定義

盤面上の位置と駒の種別を元に合法手を列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • dst - 移動元の位置

移動元の位置からさらに移動できる位置を取得するときに使う。 渡した引数の状態が不正な場合の動作は未定義

手番と盤面の状態を元に合法手を生成して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態

Stateの状態が不正な場合の動作は未定義

use usiagent::rule::*;
use usiagent::shogi::*;
let state = State::new(BANMEN_START_POS.clone());
let mvs = Rule::legal_moves_from_banmen(Teban::Sente,&state);
assert!(mvs.len() > 0);

手番と盤面の状態を元に合法手を生成してバッファに追加

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • mvs - 手を追加するバッファ

Stateの状態が不正な時の動作は未定義

Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let mut mvs = Vec::new();
let state = State::new(BANMEN_START_POS.clone());
Rule::legal_moves_from_banmen_with_buffer(Teban::Sente,&state,&mut mvs);
assert!(mvs.len() > 0);

手番と盤面の状態と持ち駒を元に駒を置く合法手を生成して返す

Arguments
  • t - 手を列挙したい手番
  • mc - 持ち駒
  • state - 盤面の状態

StateもしくはMochigomaCollectionsの状態が不正な時の動作は未定義

Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let state = State::new(BANMEN_START_POS.clone());
let mvs = Rule::legal_moves_from_mochigoma(Teban::Sente,&MochigomaCollections::Empty,&state);
assert!(mvs.len() == 0);

手番と盤面の状態と持ち駒を元に駒を置く合法手を生成してバッファに追加

  • t - 手を列挙したい手番
  • mc - 持ち駒
  • state - 盤面の状態
  • mvs - 手を追加するバッファ StateもしくはMochigomaCollectionsの状態が不正な時の動作は未定義
Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let mut mvs = Vec::new();
let state = State::new(BANMEN_START_POS.clone());
Rule::legal_moves_from_mochigoma_with_buffer(Teban::Sente,&MochigomaCollections::Empty,&state,&mut mvs);
assert!(mvs.len() == 0);

手番と盤面の状態と持ち駒を元に合法手を生成して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • mc - 持ち駒

StateもしくはMochigomaCollectionsの状態が不正な時の動作は未定義

Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let state = State::new(BANMEN_START_POS.clone());
let mvs = Rule::legal_moves_all(Teban::Sente,&state,&MochigomaCollections::Empty);
assert!(mvs.len() > 0);

王を取る手のうち一マスだけ駒を動かす手を返す

Arguments
  • teban - 手を列挙したい手番
  • self_occupied - 手番側から見た手番側の駒の配置を表すビットボード。(後手の場合は上下逆さになっている)
  • opponent_ou_bitboard - 手番側から見た相手の王の配置を表すビットボード。(後手の場合は上下逆さになっている)
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 移動する駒の種類

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

先手の角を動かす手で王を取れる手を返す

Arguments
  • opponent_ou_bitboard - 先手側から見た相手の王の配置を表すビットボード。
  • sente_self_occupied - 先手側から見た先手側の駒の配置を表すビットボード。
  • sente_opponent_occupied - 先手側から見た後手側の駒の配置を表すビットボード。
  • flip_self_occupied - 後手側から見た後手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 後手側から見た先手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 駒の種類

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

後手の角を動かす手で王を取れる手を返す

Arguments
  • opponent_ou_bitboard - 後手側から見た相手の王の配置を表すビットボード。
  • self_occupied - 後手側から見た後手側の駒の配置を表すビットボード。
  • opponent_occupied - 後手側から見た先手側の駒の配置を表すビットボード。
  • flip_self_occupied - 先手側から見た先手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 先手側から見た後手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 駒の種類

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

先手の飛車を動かす手で王を取れる手を返す

Arguments
  • opponent_ou_bitboard - 先手側から見た相手の王の配置を表すビットボード。
  • sente_self_occupied - 先手側から見た先手側の駒の配置を表すビットボード。
  • sente_opponent_occupied - 先手側から見た後手側の駒の配置を表すビットボード。
  • flip_self_occupied - 後手側から見た後手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 後手側から見た先手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 駒の種類

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

後手の飛車を動かす手で王を取れる手を返す

Arguments
  • opponent_ou_bitboard - 後手側から見た相手の王の配置を表すビットボード。
  • self_occupied - 後手側から見た後手側の駒の配置を表すビットボード。
  • opponent_occupied - 後手側から見た先手側の駒の配置を表すビットボード。
  • flip_self_occupied - 先手側から見た先手側の駒の配置を表すビットボード。
  • flip_opponent_occupied - 先手側から見た後手側の駒の配置を表すビットボード。
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 駒の種類

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

先手の香車を動かす手で王を取れる手を返す

Arguments
  • opponent_ou_bitboard - 先手側から見た相手の王の配置を表すビットボード。
  • flip_self_occupied - 手番側の駒の配置を表すビットボード。逆さになっているものを渡す
  • flip_opponent_occupied - 相手番側の駒の配置を表すビットボード。逆さになっているものを渡す
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

後手の香車を動かす手で王を取れる手を返す

Arguments
  • opponent_ou_bitboard - 後手側から見た相手の王の配置を表すビットボード。
  • flip_self_occupied - 手番側の駒の配置を表すビットボード。逆さになっているものを渡す
  • flip_opponent_occupied - 相手番側の駒の配置を表すビットボード。逆さになっているものを渡す
  • from - 盤面の左上を0,0とし、x * 9 + yで表される移動元の駒の位置

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

王を取れる手のうち一マスだけ駒を動かす合法手を列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • x - 盤面左上を0,0とする移動元のx座標
  • y - 盤面左上を0,0とする移動元のy座標
  • kind - 駒の種類

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

王を取れる手のうち一マスだけ駒を動かす合法手を列挙してバッファに追加する

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • x - 盤面左上を0,0とする移動元のx座標
  • y - 盤面左上を0,0とする移動元のy座標
  • kind - 駒の種類
  • mvs - 手を追加するバッファ

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

盤面上の位置を元に王を取れる合法手のみを列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • x - 盤面左上を0,0とする移動元のx座標
  • y - 盤面左上を0,0とする移動元のy座標

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::win_only_movesの内部から呼び出される)

盤面上の位置を元に王を取れる合法手のみを列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • src - 移動元の位置

渡した引数の状態が不正な場合の動作は未定義

盤面上の位置を元に王を取れる合法手のみを列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • dst - 移動元の位置

移動元の位置からさらに移動できる位置を取得するときに使う。

盤面上の位置を元に王を取れる合法手のみを列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • dst - 移動元の位置

移動元の位置からさらに移動できる位置を取得するときに使う。

手番と盤面の状態を元に王を取れる合法手のみを生成して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態

Stateの状態が不正な時の動作は未定義

Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let state = State::new(BANMEN_START_POS.clone());
let mvs = Rule::win_only_moves(Teban::Sente,&state);
assert!(mvs.len() == 0);

盤面上の位置を元に王を取れる手か王手の合法手のみを列挙して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • mc - 持ち駒
  • x - 左上を0,0とする移動元のx座標
  • y - 左上を0,0とする移動元のy座標

渡した引数の状態が不正な場合の動作は未定義(通常,Rule::oute_only_moves_allの内部から呼び出される)

手番と盤面の状態と持ち駒を元に王を取れる手か王手の盤面上の駒を動かす合法手のみを生成して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • mc - 持ち駒

StateもしくはMochigomaCollectionsの状態が不正な時の動作は未定義(通常,Rule::oute_only_moves_allの内部から呼び出される)

Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let state = State::new(BANMEN_START_POS.clone());
let mvs = Rule::oute_only_moves_from_banmen(Teban::Sente,&state,&MochigomaCollections::Empty);
assert!(mvs.len() == 0);

手番と盤面の状態と持ち駒を元に駒を置く王手の合法手のみを生成して返す

Arguments
  • t - 手を列挙したい手番
  • mc - 持ち駒
  • state - 盤面の状態

StateもしくはMochigomaCollectionsの状態が不正な時の動作は未定義(通常,Rule::oute_only_moves_allの内部から呼び出される)

Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let state = State::new(BANMEN_START_POS.clone());
let mvs = Rule::oute_only_moves_from_mochigoma(Teban::Sente,&MochigomaCollections::Empty,&state);
assert!(mvs.len() == 0);

手番と盤面の状態と持ち駒を元に王を取れる手か王手の合法手のみを生成して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • mc - 持ち駒

StateもしくはMochigomaCollectionsの状態が不正な時の動作は未定義

Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let state = State::new(BANMEN_START_POS.clone());
let mvs = Rule::oute_only_moves_all(Teban::Sente,&state,&MochigomaCollections::Empty);
assert!(mvs.len() == 0);

手番と盤面の状態と持ち駒を元に王手に応ずる合法手のみを生成して返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態
  • mc - 持ち駒

StateもしくはMochigomaCollectionsの状態が不正な時の動作は未定義 王手がかかってない状態で呼ばれると手を適用した結果相手に王を取られない手が列挙される

Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let state = State::new(BANMEN_START_POS.clone());
let mvs = Rule::respond_oute_only_moves_all(Teban::Sente,&state,&MochigomaCollections::Empty);
assert!(mvs.len() > 0);

盤面の状態を管理するビットボードを手を適用した状態に更新して返す

Arguments
  • state - 盤面の状態
  • t - 手を列挙したい手番
  • m - 適用する手 StateもしくはAppliedMoveの状態が不正な時の動作は未定義
Examples
use usiagent::rule::*;
use usiagent::shogi::*;
let state = State::new(BANMEN_START_POS.clone());
let m = Move::To(KomaSrcPosition(1,7),KomaDstToPosition(1,6,false)).to_applied_move();
let p = Rule::apply_move_to_partial_state_none_check(&state,Teban::Sente,&MochigomaCollections::Empty,m);
let mut banmen = BANMEN_START_POS.clone();
banmen.0[6][8] = KomaKind::Blank;
banmen.0[5][8] = KomaKind::SFu;
assert_eq!(State::new(banmen).get_part(),&p);

現在の局面に手を適用した結果を返す。合法手か否かのチェックは行わない。

Arguments
  • state - 盤面の状態
  • t - 手を列挙したい手番
  • mc - 持ち駒
  • m - 適用する手 StateもしくはAppliedMoveの状態が不正な時の動作は未定義

現在の局面に手を適用した結果を返す。適用対象は盤面と持ち駒のみでStateは返さない。

Arguments
  • state - 盤面の状態
  • t - 手を列挙したい手番
  • mc - 持ち駒
  • m - 適用する手 StateもしくはAppliedMoveの状態が不正な時の動作は未定義

手が合法かどうかを返す

Arguments
  • state - 盤面の状態
  • t - 手を列挙したい手番
  • mc - 持ち駒
  • m - 適用する手 Stateが不正な時の動作は未定義

手が合法かチェック後現在の局面に手を適用して返す。

Arguments
  • state - 盤面の状態
  • t - 手を列挙したい手番
  • mc - 持ち駒
  • m - 適用する手 Stateが不正な時の動作は未定義
Errors

この関数は以下のエラーを返すケースがあります。

現在の局面に手のシーケンスを適用して返す

Arguments
  • state - 盤面の状態
  • teban - 手を列挙したい手番
  • mc - 持ち駒
  • m - 適用する手
  • mhash - 局面を表すハッシュ(第一キー)
  • shash - 局面を表すハッシュ(第二キー)
  • kyokumen_map - 千日手を検出するためのマップ
  • oute_kyokumen_map - 連続王手の千日手を検出するためのマップ
  • hasher - 局面のハッシュを計算するためのオブジェクト 引数の状態が不正な場合の動作は未定義

現在の局面に手のシーケンスを適用しつつコールバックを呼び出して結果を返す

Arguments
  • state - 盤面の状態
  • teban - 手を列挙したい手番
  • mc - 持ち駒
  • m - 適用する手
  • r - コールバックから返されて最終的にこの関数からの返却値の一部となる値
  • f - コールバック関数 引数の状態が不正な場合の動作は未定義

入玉宣言勝ちが成立しているかどうかを返す

Arguments
  • state - 盤面の状態
  • teban - 手を列挙したい手番
  • mc - 持ち駒
  • limit - 持ち時間を使い切った時点の時間 Stateの状態が不正な場合の動作は未定義

王手に応じたか否か

Arguments
  • state - 盤面の状態
  • t - 手を列挙したい手番
  • mc - 持ち駒
  • m - 適用する手 StateもしくはAppliedMoveの状態が不正な場合の動作は未定義
Errors

この関数は以下のエラーを返すケースがあります

手が打ち歩詰めか否かを返す

Arguments
  • state - 盤面の状態
  • teban - 手を列挙したい手番
  • mc - 持ち駒
  • m - 適用する手 StateもしくはAppliedMoveの状態が不正な場合の動作は未定義

手が王を取る手か否かを返す

Arguments
  • state - 盤面の状態
  • teban - 手を列挙したい手番
  • m - 適用する手 StateもしくはAppliedMoveの状態が不正な場合の動作は未定義

相手が詰んでいるか否かを返す

Arguments
  • t - 手を列挙したい手番
  • state - 盤面の状態 Stateが不正な場合の動作は未定義

相手が詰んでいるか否かビットボードと移動元座標と駒の種類から返す

Arguments
  • t - 手を列挙したい手番
  • ps - 盤面の状態を表すビットボード
  • x - 盤面左上を0,0とした時の移動元のx座標
  • y - 盤面左上を0,0とした時の移動元のy座標
  • kind - 駒の種類 引数が不正な場合の動作は未定義

相手が詰んでいるか否かビットボードと移動元座標(x*9+y)と駒の種類から返す

Arguments
  • t - 手を列挙したい手番
  • ps - 盤面の状態を表すビットボード
  • from - 盤面左上を0,0とし、x * 9 + yで表される移動元の駒の位置
  • kind - 駒の種類 引数が不正な場合の動作は未定義

相手が詰んでいるか否かビットボードから返す(香車、飛車、角のいずれかで詰むケースのみ)

Arguments
  • t - 手を列挙したい手番
  • ps - 盤面の状態を表すビットボード PartialStateが不正な場合の動作は未定義

相手の手番側が詰んでいるか否か手の適用後のビットボードと手の適用前の盤面と手番側の打った手から返す

Arguments
  • t - 手を列挙したい手番
  • banmen - 手の適用前の盤面
  • ps - 相手の手番側の手の適用後の盤面の状態を表すビットボード
  • m - 相手の手番側が打った手 引数が不正な場合の動作は未定義

千日手検出用マップの更新関数

Arguments
  • teban - 手を列挙したい手番
  • mhash - 局面を表すハッシュ(第一キー)
  • shash - 局面を表すハッシュ(第二キー)
  • kyokumen_map - 千日手検出用のマップ

現在の局面が千日手か否かを返す

Arguments
  • teban - 手を列挙したい手番
  • mhash - 局面を表すハッシュ(第一キー)
  • shash - 局面を表すハッシュ(第二キー)
  • kyokumen_map - 千日手検出用のマップ

連続王手の千日手検出用マップの更新関数

Arguments
  • teban - 手を列挙したい手番
  • mhash - 局面を表すハッシュ(第一キー)
  • shash - 局面を表すハッシュ(第二キー)
  • oute_kyokumen_map - 千日手検出用のマップ

現在の局面が連続王手の千日手か否かを返す

Arguments
  • teban - 手を列挙したい手番
  • mhash - 局面を表すハッシュ(第一キー)
  • shash - 局面を表すハッシュ(第二キー)
  • oute_kyokumen_map - 千日手検出用のマップ

現在の持ち時間を更新して返す(フィッシャークロックルール対応)

Arguments
  • limit - 持ち時間
  • teban - 現在の手番
  • consumed - 手番中の現在までの経過時間

持ち駒の状態を平手初期局面の時の駒を全部持ち駒にした状態で返す。

返されるのはHashMap<MochigomaKind,u32>なので先手後手それぞれについて呼び出す必要がある

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.