Zenbaki aleatorioak erabiltzen


ZilchScript berri bat egin dezagun: F12_BalioAleatorioak

Aldagaiei balio zehatzak esleitzea baino, zenbaki aleatorioekin lan egitea interesgarriagoa izango da. Horrela, kasu ezberdinen aurrean zer egin erabaki ahal izango dugu.
Horretarako, zenbaki aleatorien sortzaile bat beharko dugu. (Random laguntza)
    • Initialize funtzioan ondoko kodea sartuko dugu:
    function Initialize(init : CogInitializer)
    {
       Console.WriteLine("ZENBAKI ALEATORIOEKIN LANEAN!");        // Deklaratu zenbaki aleatorioen sortzailea izango den aldagaia
        var randNumGenerator:Random = Random();

        // sotzaile horri 1-etik 20-rako zenbaki bat emateko eskatuko diogu
        // balioa, zenbakia1 aldagaiari esleituko diogu        var zenbakia1 = randNumGenerator.DieRoll(20);        // Orain, 20-30 rako zenbaki bat emateko eskatuko diogu        // balioa, zenbakia2 aldagaiari esleituko diogu        var zenbakia2 = randNumGenerator.Range(20,30);        // zenbakia3 aldagaia sortuko dugu bere mota explizituki adierazi gabe        // baina balio modura aurreko bi aldagaien batura esleituko diogu. Beraz Integer+Real?       // Noski, zenbaki erreala izango da!        var zenbakia3 = zenbakia1 + zenbakia2;

        // Erakutsi lortutako zenbakia
        Console.WriteLine(zenbakia1, zenbakia2, zenbakia3);
       //Zenbaki erreal bat, oso bezala erabili daiteke as Integer ioinita izenaren ondoren        Console.WriteLine(zenbakia1, zenbakia2, zenbakia3 as Integer);    }

AZALPENAK

DieRoll eta Range, Random klaseko metodoak (edo funtzioak) dira.
DieRollek 1 eta parametro modura pasatutako zenbakiaren arteko zenbaki oso (Integer) bat emango digu. Ematen diogun zenbakia, dado baten aurpegi kopurua balitz bezala eta dadoa botako bagenu bezala funtzionatzen du.
Range funtzioak aldiz, parametroetan pasatutako bi zenbakien arteko zenbaki erreal (Real) bat emango digu.
Zenbaki "Real" bat "Integer" bezala erabili nahi izango bagenu, aldagaiaren balioaren ostean "as Integer" ipin genezake. 
Fijatu zaitezte ere, WriteLine funtzioaren erabiltzeko moduan. Datu bakarra pasatu beharrean parametro bezala, zenbait datu pasatu ahal zaizkio komaz bananduta eta berak horrela ere idatziko ditu konsolan.
Ikusi zer gertatzen den OnLogicUpdate funtzioan (giltzen artean) ondoko komando hau ipintzen baduzu:
       zenbakia1=randNumGenerator.DieRoll(20);
Akatsa ematen dizu, ez? zenbakia1 eta randNumGenerator aldagaiak ez ditu ezagutzen! 
Kasu honetan, bai randomGenerator, zenbakia1, zenbakia2 eta zenbakia3 aldagaiak "lokalak" dira, hau da, funtzioaren baitan soilik erabili daitezke eta funtzio horretatik irtenez gero aldagaiak ez dira existituko. Aldagai hauek izenak BETI letra xehez hasi behar dira.
Klase aldagaiak

Baina sortzaile hau, klase honetako hainbat funtziotan erabili nahi izanez gero, sortzaile hau klaseko aldagai bezala deklaratuko dugu, eta klase honetako edozein funtziotan erabili ahal izango dugu.
Egin dezagun, bada:
class F_BalioAleatoriak : ZilchComponent
{
       // Sortu zenbaki aleatorioen sortzailea. Klase aldagaiak lETRA LARRIZ HASI BEHAR DIRA       var RandNumGenerator:Random = Random();

Klase aldagaien izenak letra larriz hasi behar dira derrigorrez.
Aldagaia ez denez lokala, hau da funtzioan bertan definitutakoa, berari erreferentzia egiteko,  this. idatzi beharko dugu aldagaiaren izenaren aurretik.(klase honetako...)
Orain OnLogicUpdate funtzioan idatzi ondoko kodea:
function OnLogigUpdate (event : UpdateEvent)
{
       // zenbakia1-ri 30 eta 100 arteko balio aleatorio bat esleituko diogu       var zenbakia1= this.RandNumGenerator.Range(30,100);       // zenbakia4 hiru modu desberdinetan erakutsiko dugu:       Console.WriteLine(zenbakia4, Math.Round(zenbakia1),Math.Truncate(zenbakia1));

Aprobetxatu dugu zenbait funtzio matematikoren erabilpena lantzeko. Horretarako, ZilchScript-eko Math izeneko objektuaren zenbait funtzio erabiliko ditugu. Kasu honetan, Math.Round eta Math.Truncate funtzioak hain zuzen. Jakingo duzue zer egingo duten, ez?
Math objektuaren metodoak(funtzioak) dira eta biek Integer moduko zenbakiak bueltatzen dituzte.


Honek funtziona dezan, ez ahaztu Initialize funtzioan deskomentatzea (kendu //) lehen komandoa!!!
    Zero.Connect(this.Space, Events.LogicUpdate, this.OnLogicUpdate);

Honekin, esaten dioguna da Espazioak bidalitako LogigUpdate ebentoak jaso behar dituela eta jasotzerakoan, klase honetako (this.) OnLogicUpdate izeneko funtzioa exekutatu behar duela.
Ebento hori, espazioak bidaltzen du segundu bakoitzean 60 aldiz, beraz, programa geratu arte, Consolean testu piloa agertzen joango da!




iruzkinik ez:

Argitaratu iruzkina

Idatzi zure komentarioa. Laster argitaratuko dut. Mila esker!