2013-03-18 41 views
1

我正在模擬爲MATLAB編寫的Yahtzee遊戲模擬滾動5個骰子,但我遇到了我的代碼似乎沒有生成任何yahtzees之後的問題運行1000多次迭代。我是否正在使用一個函數來保證Yahtzee(5個相同數字)被滾動?爲Yahtzee遊戲模擬5個模具卷

while rounds<=13 
    fprintf('Rolling the dice...\n'); 
    roll=randi(6,1,5); 
    roll=sort(roll); 
    fprintf('You rolled:'); 
    disp(roll); 
    rollCount=rollCount+1; 

    for x=rule 
     if roll==rule{1}; 
      fprintf('Condition Met'); 
      break; 
     end 
    end 
    rounds=rounds+1; 

end 

這基本上只通過13輪軋製的迭代並檢查靠在輥「規則{1}」,這是包含數組[1 1 1 1 1]。 3,有時4 1秒似乎沒有問題,但我不能得到5。有什麼建議嗎?

+2

6^5是7776.你不應該經常在1000次迭代中預期結果[1111]。 – 2013-03-18 22:38:27

+0

Doh。我想你是對的。是不是認爲這是一個概率低。我將其更改爲10000次迭代,並且在得到正確的序列後我可以看到它停止。謝謝您的幫助。 – Seldom 2013-03-18 22:49:25

回答

0

Ryan Cavanaugh指出,沒有足夠的樣本來完成想要的結果。我提高了模擬運行10000次,並按預期工作。

+0

你的代碼也存在缺陷。你說「如果roll == rule {1}」,但它需要是「if roll == x {1}」。 – 2013-03-18 22:51:43

+0

嗯,如果我改變你的建議,我會得到一個錯誤「矩陣尺寸必須同意。」規則是一個數組數組,roll是一個5位數組的數組。循環試圖做的是逐步遍歷規則中的每個數組,並查看roll是否匹配它。你能修整整塊來使它像那樣工作嗎?我不確定我的代碼是否可以。 – Seldom 2013-03-18 22:56:56

+0

現在,您的代碼會重複檢查您的規則{1},而不是檢查每條規則。如果您發現它抱怨矩陣維度,則應檢查所有規則是否已輸入正確的維度 - 也就是說,您沒有將某些規則作爲行向量插入,而是將某些規則插入列向量。 另外值得檢查的是你是否需要大括號 - 它可能只需要「如果roll == x」。我使用Octave,它需要大括號索引,但我不知道Matlab是否。 – 2013-03-18 23:25:04