2009-10-13 8 views
0

Donc, j'ai un jeu très simple qui va ici ..., en ce moment l'IA est presque parfaite et je veux qu'elle fasse des erreurs de temps en temps. La seule façon que le joueur peut gagner est de ralentir l'ordinateur jusqu'à un niveau facilement angoissant.Aléatoire AI/Switch case?

Ma logique est d'avoir une déclaration de cas de commutation comme celui-ci:

int number = randomNumber 

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

Comment puis-je avoir sélectionner le cas 2 68% (pourcentage aléatoire, juste un exemple) du temps, mais encore permettre une chance faire échouer l'ordinateur? Un boîtier de commutateur est-il la bonne solution? De cette façon, la difficulté et la vitesse peuvent rester élevées mais le joueur peut toujours gagner lorsque l'ordinateur fait une erreur.

Je suis sur l'iPhone. S'il y a un meilleur/différent, je suis ouvert à ça.

+0

Il est probable que vous ayez un coefficient ou une autre façon de «monter» selon le niveau d'utilisateur/niveau de difficulté – Tim

+0

la personne qui peut répondre à cette question autrement qu'avec une méthode aléatoire-aléatoire devrait recevoir un prix Nobel. – pxl

Répondre

1

Generating Random Numbers in Objective-C

int randNumber = 1 + rand() % 100; 

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

C'est en fait faux. –

+0

Ce n'est pas parfait, bien sûr, car rand()% 100 ne crée pas une distribution parfaite des valeurs due au comportement proche de l'extrémité supérieure de INT. –

+1

Comment est-ce mal? –

0
int randomNumber = GeneraRandomNumberBetweenZeroAndHundred() 

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

Beaucoup PRNGs offriront un nombre aléatoire dans l'intervalle [0,1). Vous pouvez utiliser une instruction if au lieu:

n = randomFromZeroToOne() 

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

Si vous allez générer un nombre entier de 1 à N, au lieu d'un flotteur, méfiez-vous des modulo bias dans vos résultats.

+0

Je m'attendrais avec un si petit nombre que 100, polarisation modulo serait presque imperceptible. Habituellement, ce n'est qu'un facteur lorsque vous entrez dans des nombres beaucoup plus importants. – rmeador

+0

Oui, il serait probablement imperceptible avec une valeur aussi petite, dans une application comme un jeu occasionnel; Cependant, c'est un problème que beaucoup de programmeurs ne connaissent pas, alors cela pourrait être utile à quelqu'un d'autre qui rencontre cette question. –

+0

lol j'aime les noms de vos fonctions ... playSmart/playStupid – pxl