Szimulációkészítés Imagine-el.

A következőkben megmutatjuk, hogyan készíthetünk egyszerű szimulációs alkalmazást az Imagine segítségével.
 

 

 

    Nézzük meg, hogyan valósíthatunk meg egy olyan szimulációt, ahol a részecskék mozognak a szimulációs térben, a válaszfalról visszapattanhatnak, sőt egymással is ütközhetnek Az alkalmazás elkészítése során betekintést nyerünk az Imagine rendszer programozásába, így később más alkalmazások készítésére is lehetőségünk nyílik.

 

Először is ki kell alakítanunk a szimulációs teret, ahol a részecskék mozogni fognak. Ez egy önálló terület, ahonnan a részecskék nem kerülhetnek ki, ezért a legegyszerűbb, ha az Imagine által felkínált panelt választjuk erre a célra. A panel egy mozgatható négyszögletes terület teknőcök és más objektumok számára, mely bárhol létrehozható egy lapon vagy akár egy másik panelen is. A paneleken lehetnek teknőcök, gombok, szövegdobozok és egyéb objektumok. Méretével és pozíciójával minden panel meghatároz egy területet a rajta élő objektumok számára: ez az a hely, ahol mozoghatnak, rajzolhatnak, vagy ahova nyomtathatnak.

 

Ilyen panelt az  ikon megnyomásával helyezhetünk el az oldalon. Alap esetben az Imagine a p1, p2, p3, stb. neveket adja a paneleknek, de mi magunk is átnevezhetjük őket, csak kattintsunk az egér jobb gombjával a panel felett, majd válasszuk ki a px változatása menüpontot, ahol a megjelenő ablakban a Név: mezőbe írjuk be a következőt: szimtér.

 

 

Ettől fogva a szimtér névvel hivatkozhatunk a panelre.

 

A panel egyelőre üres. Valahogy el kell érnünk, hogy különböző részecskékkel népesítsük be a területet. A legegyszerűbb megoldás, ha létrehozunk egy gombot, amelynek megnyomásával újabb és újabb részecskéket helyezhetünk el a panelen.

Tehát hozzunk létre egy gombot az  ikon megnyomásával. Az egér jobb gombjával kattintva a  gx változtatása menüponttal beállíthatjuk a tulajdonságait:

 

 

A Felirat mezőbe írjuk be, hogy Részecske hozzáadása. A haLenyom mezőbe pedig azt  a parancsot kell írnunk, amelynek a gomb lenyomásakor végre kell hajtódnia. A mi esetünkben az a parancs kerül ide, amely elhelyez egy részecskét a szimtér nevű panelen.

 

De ne szaladjunk ennyire előre. Egyelőre hagyjuk üresen a haLenyom mezőt, és nyomjuk meg az OK gombot. A képernyőn megjelenik a gomb, amelyet át kell méreteznünk, hogy a szöveg kiférjen rajta. Ehhez a CTRL gomb nyomva tartása mellett, az egér jobb gombjával ragadjuk meg az objektum jobb alsó sarkát, és méretezzük át a megfelelő mértékben.

Ezek után a helyére is mozgathatjuk, ha a gomb menüjéből kiválasztjuk a gx mozgatása parancsot.

 

Milyen parancs kerüljön a haLenyom mezőbe?

 

A célunk az, hogy a szimtér nevű panelen létrehozzunk egy új teknőcöt, amely egy véletlenszerűen kiválasztott pozícióban jelenik meg, és a haladási iránya is véletlenszerűen kiválasztott.

 

Hogyan hozhatunk létre új teknőcöt?

 

Új teknőcöt az  ikon megnyomásával helyezhetünk el az oldalon, vagy panelen, de most azt is meg kell tanulnunk, hogy ugyanezt Imagine parancsokkal hogyan tehetjük meg.

 

A megfelelő utasítás: új "teknőc [tulajdonságok]. Ha nem kívánunk tulajdonságokat megadni, akkor a szögletes zárójelet üresen hagyhatjuk. A tulajdonságokat egymás után kell írnunk tulajdonság1 érték1 tulajdonság2 érték2, stb. formában. Ebből következik, hogy a tulajdonságlistának csak páros számú eleme lehet, ha nem így van, hibaüzenetet kapunk.

 

De hova kerül a teknőc? Alaphelyzetben az aktuális lapra kerül, ha nem ezt szeretnénk, akkor az adott lap, vagy panel nevét a parancs elé kell írnunk, egy aposztróf jellel elválasztva.
pl.: ha  a szimtér nevű panelen akarunk teknőcöt elhelyezni, a következőket kell írnunk:

 

szimtér'új "teknőc [tulajdonságok]

 

Most lássuk hogy az általunk meghatározott részecskékre vonatkozó tulajdonságokat, hogyan fogalmazhatjuk meg az Imagine-ben.

 

Részecske tulajdonság

Imagine tulajdonság listában szereplő tulajdonság

legyen tetszőleges iránya

irány tetszőleges

Kerüljön tetszőleges pozícióra

poz tetszőleges

az alakja legyen egy töltött kör, amelynek 6 egység a sugara

alak [töltöttkör 6]

az objektum ne húzzon maga után nyomvonalat

toll tollatfel
(amennyiben az ellenkező hatásra van szükségünk: toll tollatle)

amennyiben az élőhelye (lap, vagy panel) határához ér, pattanjon vissza.

tartománystílus visszapattan

 

Tehát a megfelelő parancs a következő:

 

szimtér'új "teknőc [irány tetszőleges poz tetszőleges alak [töltöttkör 6] toll tollatfel tartománystílus]

 

Ezt a parancsot már beírhatjuk a gomb haLenyom mezőjébe és ki is próbálhatjuk az eredményt.

 

 

Ha nem gépeltünk el semmit, akkor a gomb megnyomásával újabb és újabb részecskéket helyezhetünk el a panelen.

 

Hogyan lesz ebből szimuláció?

 

A panelen lévő részecskéket "meg kell kérnünk", hogy tegyenek valamekkora lépést előre. Ha a t1 nevű teknőcöt 10 lépéssel előre szeretnénk mozgatni, a következőt kell írnunk: t1'előre 10.

 

Ha ez a teknőc a szimtér nevű panelen helyezkedik el, akkor a következőképpen kell kiegészíteni a parancsot. szimtér't1'előre 10.

 

De mi a helyzet akkor, ha több teknőcnek is ugyanazt az utasítást kell végrehajtani. Egyszerű, meg kell kérnünk őket, hogy hajtsák végre az utasítást, vagyis a kér parancsot kell használnunk, amelynek a formátuma a következő: kér teknőclista utasításlista

 

Az Imagineben a listát [] jelek közé kell írnunk, tehát írhatjuk a következőt: kér [t1 t2][előre 10]. Ez a parancs a t1 és t2 teknőcöt is előre lépteti 10 lépéssel. Mivel a teknőcök (részecskék) a szimtér nevű panelen vannak, a következő parancsot kell használnunk: szimtér'kér [t1 t2][előre 10].

 

Akkor most fel kell sorolnom az összes teknőc nevét?

 

Nem szükséges, mert az Imagine is meg tudja mondani, hogy mely teknőcök vannak a szimtér nevű panelen, ehhez  a mindenteknőc eljárást kell használnunk. A kiír parancs segítségével ki is írathatjuk a listát:  kiír szimtér'mindenteknőc. Most már egyszerű a dolgunk, hiszen ha a szimtér panelen lévő összes részecskét mozgatni szeretnénk, a következő parancsot használhatjuk:

kér szimtér'mindenteknőc [előre 10]

 

De biztos, hogy jó, ha egy konkrét értékkel léptetjük előre a részecskéket? Nem feltétlenül. Ha pl. egy változóban tárolnánk a lépésszámot, akkor a változó értékének megváltoztatásával egyszerűen tudnánk szabályozni a részecskék sebességét. Tegyük inkább ezt. Hozzunk létre egy sebesség nevű globális változót, amelynek adjuk kezdetben a 10-es értéket: globálisváltozó "sebesség 10

A változó tartalmához úgy férhetünk hozzá, hogy a neve elé kettőspontot írunk. Pl. ha ki szeretnénk íratni a tartalmát, használhatjuk a kiír :sebesség parancsot.

 

A parancsunk így a következőképp módosul: kér szimtér'mindenteknőc [előre :sebesség]

De ezzel a paranccsal csak egy szimulációs lépést tettünk meg, jobb lenne, ha úgy működne a program, hogy ha megnyomunk egy START kapcsolót, a szimuláció elkezdődik, ha felengedjük, akkor pedig leáll.

 

De hogy érhetjük el, hogy a szimuláció addig fusson, míg le nem állítjuk? A legegyszerűbb, ha az Imagine beépített folyamatait használjuk. Ezek a folyamatok egymástól függetlenül, párhuzamosan futhatnak.

 

Pl. ha azt szeretnénk, hogy egy utasítás 0.1 másodpercenként hajtódjon végre, használhatjuk a minden 100 [parancsok] parancsot. (De miért 100-at kell írni? Azért mert ezredmásodpercben kell megadni az időzítés mértékét.)

 

Ez alapján írhatjuk a következőt:

 

minden 100 [kér szimtér'mindenteknőc [előre :sebesség]]

 

Próbáljuk ki a fenti parancsot. Láthatjuk, hogy a szimuláció működik, az általunk elindított folyamat működik. Erről úgy is meggyőződhetünk, ha kiíratjuk a háttérben futó folyamatok listáját a kiír mindenfolyamat paranccsal. Hogyan állíthatjuk meg a folyamatot? Vagy meg kell nyomnunk az  ikont , vagy a parancssorból is leállíthatjuk a folyamatot a mégsem parancs segítségével. pl.: mégsem [kér szimtér'mindenteknőc [előre :sebesség]]

 

Az egyszerűbb átláthatóság kedvéért nevet is adhatunk a folyamatainknak. Ekkor a következőképpen kell használnunk a minden parancsot. (minden időzítés [parancs] "folyamatnév)

A következő paranccsal elindítjuk a szimulációt, amely 1/10-ed másodpercenként hajtódik végre. A folyamat neve: szimuláció.

 

pl. ( minden 100 [kér szimtér'mindenteknőc [előre :sebesség]] "szimuláció )

 

Az elindított folyamatot a mégsem "szimuláció paranccsal állíthatjuk le.

 

Akkor most már minden összeállt ahhoz, hogy létrehozzuk a START kapcsolót. Hozzunk létre egy új gombot, majd a szokásos módon változtassuk meg a tulajdonságait:

 

 

Mivel most egy kapcsológombot szeretnénk létrehozni, amely a lenyomása után bekapcsolva marad, és újabb kattintással felengedhető, jelöljük be a kapcsoló jelölőnégyzetet. A Felirathoz írjuk a következőt: START.

 

A haLenyom eseményhez írhatjuk a fenti, szimulációs folyamatot elindító programsort, a haElenged eseményhez pedig a szimulációt leállító parancsot.

 

 


Következő oldal (a szimuláció továbbfejlesztése)