wiki:Satunnaisluvut
Last modified 6 years ago Last modified on 2012-12-28 21:26:48

Jypelin käyttöohjeet » Miten saan peliini satunnaisuutta?

Jypelin satunnaislukugeneraattorilla (RandomGen) voi arpoa monentyyppisiä asioita. Satunnaisen arvon voi arpoa tyypillisesti metodilla, jonka alkuosa on Next ja loppuosa arvottavan tyypin nimi (esimerkiksi Double).

KokonaislukuDesimaaliluku
int luku = RandomGen.NextInt( 100 ); (pienempi kuin 100)
int luku = RandomGen.NextInt( 50, 1000 ); (väliltä 50-999)
double luku = RandomGen.NextDouble( 5.0, 120.0 ); (väliltä 5,0 - 120,0 )
VäriTotuusarvo
Color vari = RandomGen.NextColor();bool totuusarvo = RandomGen.NextBool();
SuuntaKulma
Direction suunta = RandomGen.NextDirection();Angle kulma = RandomGen.NextAngle()

Satunnaisen vektorin luominen

Esimerkiksi, vektori, jonka pituus on korkeintaan 1000 ja suunta satunnainen:

Vector voima = Vector.FromLengthAndAngle( RandomGen.NextDouble( 0.0, 1000.0 ), RandomGen.NextAngle() );

Satunnainen piste pelikentältä

Jos halutaan helposti satunnainen piste pelikentältä, siihen on olemassa Jypelissä valmis keino:

Vector kentanPiste = Level.GetRandomPosition();

GetRandomPosition palauttaa satunnaisen kohdan kentän reunojen sisäpuolelta Vector-oliona.

Satunnainen vaihtoehto

RandomGen-luokan SelectOne-aliohjelmalla voidaan arpoa nopeasti yksi vaihtoehto useista annetuista. SelectOne ottaa ns. tyyppiparametrin (kulmasuluissa <>) joka kertoo, mitä tyyppiä arvottavat otukset ovat. Tyyppi voi olla esimerkiksi string (arvotaan merkkijonoja), double (lukuja) tai GameObject (ruudulla näkyviä peliolioita).

Joitain esimerkkejä SelectOnen käytöstä:

string elain = RandomGen.SelectOne("kissa", "koira", "jänis");
Color vari = RandomGen.SelectOne(Color.Black, Color.Red, Color.Green, Color.Blue);
PhysicsObject pelaaja = RandomGen.SelectOne(pelaaja1, pelaaja2);

Huom. jos saat tällaisen virheen

  • The type arguments for method 'Jypeli.RandomGen.SelectOne<T>(params T[])' cannot be inferred from the usage. Try specifying the type arguments explicitly.

niin sen saa pois lisäämällä SelectOne-metodille tyyppimäärityksen kulmasuluissa tähän tyyliin:

Shape muoto = RandomGen.SelectOne<Shape>( Shape.Circle, Shape.Rectangle );