どの相手にも同じ乱数で相手する乱数表戦略を作ってみた。

#define SIZE_OF_RND_TABLE (ROUND * 4) /* 余分に作って実際に使う部分の平均値を変動させる */

int _random_table(int round) /* 乱数表 */
{
/* 自分を含めどの相手にも同じパターンの乱数を返す */
/* 自分と対戦するときの得点は平均2.25点から平均2点に下がる */

static int table_maked = 0;
static int rnd_table[ SIZE_OF_RND_TABLE - 1 ];

/* 乱数表初期化 1回だけ実行 */
if (table_maked++ == 0 ) {
int i, tmp, r;

/* 0,1 を交互に入れておく 全体の平均値は0.5になる */

for (i = 0; i < SIZE_OF_RND_TABLE; i++ )
rnd_table[ i ] = i % 2;

/* シャッフル */
for( i= 0; i < ROUND; i++ ) {
tmp = rnd_table[ i ];
rnd_table[ i ] = rnd_table[ r = rand() % SIZE_OF_RND_TABLE ];
rnd_table[ r ] = tmp;

/* まだ乱数に癖があるようなら下を追加する */
/* rand(); rand(); */
}
}

return rnd_table[ round ];
}