2009-10-13 61 views
0

所以我有一個非常簡單的遊戲在這裏......現在人工智能幾乎是完美的,我希望它不時出現錯誤。玩家能夠贏得的唯一方式就是如果我放慢計算機到一個簡單易懂的程度。隨機AI /開關盒?

我的邏輯是有一個開關case語句是這樣的:

int number = randomNumber 

case 1: 
computer moves the complete opposite way its supposed to 
case 2: 
computer moves the correct way 

如何我可以把它選擇的情況下2 68%的時間(隨機百分比,只是一個例子),但仍允許一些機會使計算機失敗?切換案例是否正確?這樣,難度和速度可以保持高水平,但是當電腦出現錯誤時,玩家仍然可以獲勝。

我在iPhone上。如果有更好的/不同的方式,我願意接受。

+0

您可能根據用戶級別/難度級別有一些係數或其他方式來「縮放」 – Tim 2009-10-13 16:21:21

+0

可以用qausi-random方法以外的其他方法回答此問題的人應該獲得諾貝爾獎。 – pxl 2009-10-13 18:27:39

回答

1

Generating Random Numbers in Objective-C

int randNumber = 1 + rand() % 100; 

if(randNumber < 68) 
{ 
//68% path 
} 
else 
{ 
//32% path 
} 
+0

這實際上是錯誤的。 – 2009-10-13 16:24:07

+0

當然,這並不完美,因爲蘭特()%100由於靠近INT上端的行爲而不能創建完美的值分佈。 – 2009-10-13 16:24:09

+1

這是怎麼回事? – 2009-10-13 16:24:39

0
int randomNumber = GeneraRandomNumberBetweenZeroAndHundred() 

if (randomNumber < 68) { 
computer moves the complete opposite way its supposed to 
} else { 
computer moves the correct way 
} 
0

許多的PRNG將提供在範圍[0,1)的隨機數。如果你要生成從1到N的整數

n = randomFromZeroToOne() 

    if n <= 0.68: 
     PlaySmart() 
    else: 
     PlayStupid() 

,而不是浮動,提防在搜索結果modulo bias:您可以使用if語句來代替。

+0

我期望有一個像100這樣的小數字,模數偏差幾乎不會被察覺。通常這只是一個因素,當你進入更大的數字。 – rmeador 2009-10-13 16:57:10

+0

是的,在像休閒遊戲這樣的應用程序中,這個值很小,可能並不明顯。然而,這是許多程序員不知道的問題,因此將其提供給解決此問題的其他人可能會有所幫助。 – 2009-10-13 17:02:44

+0

大聲笑我喜歡你的功能名稱... playSmart/playStupid – pxl 2009-10-13 18:26:16