確率計算に使用したプログラムのソース
MicrosoftからVisual Studio Expressをダウンロードして30分で作成した。



#define _CRT_RAND_S
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>

//prototype
UINT F_Random(UINT maxvalue);

int main(void)
{
int i,j; // loop変数
UINT rnd; // 乱数
int cnt1 = 0, cnt2 = 0; // 条件該当回数
int loopcnt = 100000; // 試行回数
int decktotal = 60; // デッキ枚数
int deck[60], hand[7]; // デッキ・初期手札
int knd[6]; // 手札の種類

for (j=0;j<loopcnt;j++) // 条件該当回数だけ繰り返す
{
// 変数初期化
for (i=0;i<6;i++) knd[i] = 0;

// デッキ内容
// 森
for (i=0;i<12;i++) deck[i] = 1;
// アンタップイン土地(karakas, 微光地)
for (i=12;i<15;i++) deck[i] = 2;
// タップイン土地(8 post, ウギンの目もマナ出ないのでこちら扱い)
for (i=15;i<24;i++) deck[i] = 3;
// Mox Diamond
for (i=24;i<28;i++) deck[i] = 4;
// 1 mana action(SDT, ミリーの悪知恵, 明日への探索)
for (i=28;i<35;i++) deck[i] = 5;
// 2 mana action(桜族の長老, 森のレインジャー)
for (i=35;i<41;i++) deck[i] = 6;
// other
for (i=41;i<60;i++) deck[i] = 7;

// 初期手札決定
for (i=0;i<7;i++)
{
// デッキ枚数からランダムで1枚選ぶ
rnd = F_Random(decktotal - i);
// 手札にセット
hand[i] = deck[rnd];
// デッキの一番最後を抜いた箇所に移動
deck[rnd] = hand[decktotal - i];
}

// 手札内容整理
for (i=0;i<7;i++)
{
if (hand[i] == 1) knd[0]++; // 森
if (hand[i] == 2) knd[1]++; // アンタップインの無色土地
if (hand[i] == 3) knd[2]++; // タップイン土地
if (hand[i] == 4) knd[3]++; // モックスダイヤモンド
if (hand[i] == 5) knd[4]++; // 1mana
if (hand[i] == 6) knd[5]++; // 2mana
}

// 手札内容のチェック
// (森orモックスダイヤ)+1manaアクション
if (((knd[0]>0) || ((knd[0]+knd[1]+knd[2]>0) && (knd[3]>0))) && knd[4]>0)
{
cnt1++; // 条件該当回数+1
}
// アンタップイン土地+モックスダイヤ+2manaアクション
if ((knd[0]+knd[1]>0) && ((knd[0]+knd[1]+knd[2]>0) && (knd[3]>0)) && knd[5]>0)
{
cnt2++; // 条件該当回数+1
}
}

// 平均回数を表示(%)
printf("1T目に1mana actionできる確率 [%f]% ", cnt1/(double)loopcnt*100);
printf("1T目に2mana actionできる確率 [%f]% ", cnt2/(double)loopcnt*100);

return 0;
}

// 0~maxvalue-1の値を返す
UINT F_Random(UINT maxvalue)
{
UINT rndval;
rand_s(&rndval);
return (UINT)(rndval / ((double)UINT_MAX + 1) * maxvalue);
}


コメント

hやfぢ
2010年11月28日1:14

>// アンタップイン土地+モックスダイヤ+2manaアクション
>if ((knd[0]+knd[1]>0) && ((knd[0]+knd[1]+knd[2]>0) && (knd[3]>0)) && knd[5]>0)

ここのknd[0]+knd[1]+knd[2]>0をknd[0]+knd[1]+knd[2]>1にしないと
森+モックスダイヤ+2マナアクション+その他×4とかで
モックスダイヤで捨てる土地がなくてもカウントされちゃいますよ。
と言うことがあら探しの結果分かりました。

レベッカ
2010年11月28日10:00

>hやfじさん
デバッグありがとうございます! うわー恥ずかしいミスした……

最新の日記 一覧

<<  2025年6月  >>
1234567
891011121314
15161718192021
22232425262728
293012345

お気に入り日記の更新

この日記について

日記内を検索