08/01/27 19:03:38
先手黒から見た評価関数の一部の例
>>366での
for (i = 0; i < n; i++) {
move (i);
v = -minmax (-max, -min);
undo ();
の部分だと思います
─────────────────────
/* ネット上の拾いものの解説 */
while( 打てる手がある ){
①手を差して次の盤面を作る;
②val = minimax( 盤面, depth - 1 ); 一手先を読む再帰。3手まで読んでみるつもり
③盤面を1手戻す;
─────────────────────
/* 上記を例に作ってみた */
blackturn( int **board , depth ) 2次元配列のポインタと、3手読みたいので3を貰う
{
int val;
if( depth == 0 ) return 評価値(盤面);
for( y=1; y<=BOARD_SIZE; y++ ) { 盤面全部を検索し置ける場所を8*8全部調べる
for( x=1; x<=BOARD_SIZE; x++ ) {
① if( 自作関数1 ) { board[x][y]に石が置けるならひっくり返してみる
ターンを次にする;
色を変える;
② val = blackturn( &board , depth - 1 );
③問題点 ここの処理がスタックを用いておらず出来ません。通常どのように行って居るのでしょうか?
長々と見ずらく申し訳ないですが伝わって頂ければ幸いです