VIDI Project X #99: Game of Life - 5.0 out of 5 based on 2 votes
VIDI Project X #99: Game of Life

VIDI Project X #99: Game of Life

Uvod u Matrix

Nova zanimljiva primjena za Projekt X je prilagodba Game of Life simulacije koja se na našem razvojnom mikroračunalu besprijekorno vrti. U ovom tekstu pokušat ćemo vam objasniti kako je moguće imati simulaciju unutar simulacije.

VIDI X idealna je platforma za demonstraciju rješavanja problema koji kao rezultat imaju grafički prikaz rješenja. Game of Life čija je pravila definirao John H. Conway već desetljećima zaokuplja programere diljem svijeta za proučavanje. Do pravila, koja ćemo spomenuti kasnije u tekstu, došao je kada je istraživao kako definirati život kao kreaciju, tj. biće ili organizam koji se može reproducirati i simulirati Turingov stroj. Kada je objavio matematička pravila kojima je to moguće postići na zanimljive i nepredvidive načine, mnogi su se znanstvenici zainteresirali i iskoristili način na koji složeni obrasci mogu nastajati primjenom vrlo jednostavnih pravila.
Prvo trebate imati na umu kako mi današnje simulacije izvodimo na računalima koje u osnovi pokreću procesori. Stoga ćemo vam prvo spomenuti koje su to tri osnovne logičke funkcije i kako ih povezati u logičku cjelinu da biste se približili kreiranju jednog procesora.
Nakon toga ćemo objasniti programski kÔd koji je repezentacija „simulacije života“ napisane za VIDI Project X, a unutar te simulacije simulirat ćemo jedna od spomenutih logičkih vrata.

 

Krenimo od procesora

Procesor radi s binarnim sustavima, tj. s jedinicama i nulama. S tim jedinicama i nulama obavlja sve druge računske operacije poput zbrajanja, oduzimanja, množenja itd.
Kako bi mogli obavljati složenije operacije, potrebne su 3 osnovne logičke operacije AND, OR i NOT.

AND (i) logička vrata

Možemo ih napraviti od žice s dva prekidača A i B.

AND gate

Ako i jedan i drugi prekidač propuštaju struju, samo tada struja dolazi na drugi kraj žice. Nno u slučaju da je jedan od ta dva prekidača prekinut ili kada su oba prekinuta, reći ćemo da su u stanju 0. Struja neće teći.
Tako Logički AND daje sljedeće rezultate:

AND    
A B Q
0 0 0
0 1 0
1 0 0
1 1 1

 

OR (ili) logička vrata

Ovdje bismo imali dvije paralelne žice i na svakoj od njih prekidač. Zatvorimo li samo jedan od prekidača, struja će teći i time smo dobili „ili“ logička vrata.

OR gate

OR logička vrata daju sljedeće rezultate:

OR    
A B Q
0 0 0
0 1 1
1 0 1
1 1 1

 

NOT (ne) logička vrata

Služe nam za inverziju signala te će od jedinice napraviti nulu, a od nule jedinicu.

NOT gate

NOT logička vrata daju slijedeće rezultate:

NOT  
A Q
0 1
1 0

 

Half-Adder

Sljedeće što nam za procesor treba je logički sklop koji zovemo Half-Adder. On ima dva ulazna bita i dva izlazna bita. Napravljen je od kombinacije AND i NOT OR logičkih vrata. NOT OR logička vrata zovemo još i XOR, a napravljena su od kombinacije OR i NOT logičkih vrata što je u biti inverzni OR.

Half Adder Circuit and Its Construction


Dakle ako su oba ulazna bita 1, kao output ćemo dobiti 0 i 1.
Duplo bolji Half-Adder možemo dobiti ako kombiniramo dva takva, a na putu do procesora moramo doći i do Full Adder logičkog kruga, te sa četiri takva možemo predstaviti vrijednost od 4 bita.
Do punokrvnog procesora nedostaje još nekoliko kompleksnijih koraka koje nećemo razraditi zbog nedostatka prostora na papiru. Želite li saznati više o nastanku procesora, možete pitati Google.

Igra života (Game of life).

Sada kada ste ponešto naučili o logičkim vratima i o prvim koracima kako napraviti procesor, skočimo na programiranje igre zvane „Igra života“ (Game of Life). Pravila igre smislio je matematičar John Horton Conway, a ona glase:

Svaka ćelija (element) polja može imati dva stanja: ćelija je živa – 1 ili ćelija je mrtva – 0.
Za svaku igru zadaje se početno stanje igre prema nekim pravilima ili predlošcima.

  1. Svaka živa ćelija s manje od dva živa susjeda umire zbog slabe naseljenosti.
  2.  Svaka živa ćelija s više od tri živa susjeda umire zbog prenaseljenosti.
  3. Svaka živa ćelija s dva ili tri živa susjeda ostaje živjeti bez promjene.
  4. Svaka mrtva ćelija s točno tri živa susjeda postaje živa.

S vremenom su programeri otkrili razne likove unutar te igre koji ispunjavaju uvjete za beskonačni nastavak „života“.
Tako je jedan od tih oblika Gosper’s glider gun koji stvara oblike nazvane “gliders”, a isto tako taj „glider gun“ može nastajati iz uzorka koji je nazvan „breather“.
Iz tih uzoraka moguće je dobiti simulaciju nekakvog stroja kao na slici.

Conways game of life breeder

 

 


No za potpuni doživljaj sliku treba pogledati u animiranom obliku.

Color coded racetrack large channel



Na Vidi X pločici pokazat ćemo vam simuaciju jednog dijela AND logičkih vrata koja se u biti odvijaju unutar „Igre života“. Simuliranjem i ostalih logičkih vrata AND, NOT i OR možete simulirati kompletan Full Adder te ga multiplicirati da dobijete onoliko bitova koliko želite i time ste dobili simulaciju procesora.
Taj biste simulirani procesor opet mogli isprogramirati tako da pokreće „Igru života“.

 

Kôd

Kôd koristi Adafruit ILI9341 driver za TFT zaslon koji ćete instalirati tako da otvorite Manage Libraries (CTRL + SHIFT + I) iz izbornika „Alati“ te u tražilicu upišete ILI9341. Ovdje možete odabrati verziju te biblioteke. Mi smo instalirali verziju 1.5.3 te smo odabrali opciju instaliranja drugih pripadajućih biblioteka kako kompajliranje koda ne bi javljalo greške.

IMG 20200114 124343

Osnovni Game of Life kôd za kreiranje svijeta preuzet je s „Adafuit“ bloga i, iako kôd radi kao što možete isprobati na VIDI X mini računalu, potkrala im se jedna greškica koju nismo ispravljali, već ju ostavljamo vama. Naime, svijet u kojem se odvija Game of Life je ograničen, a ideja je da ne bude ograničen kako bi se ćelije mogle pravilno razvijati.
Kôd smo obogatili dodatnim opcijama, na počeku smo postavili predefinirani uzorak koji je dio AND logičkih vrata, a desno smo postavili jedan od svemirskih brodova koji će otputovati u beskonačnost ili dok ne naiđe na prepreku.
Ovako ćete naučiti kako popuniti polje dvodimenzionalnog niza.


uint8_t world [RAW][COL]={
{0, 0, 0, 0},
{0, 0, 1, 1},
{0, 0, 0, 1}
};


Naučit ćete i kako gumbi A i B moraju biti definirani kao INPUT_PULLUP


pinMode(inPin, INPUT_PULLUP);


Kompletan kôd potražite na našem GitHub repozitoriju https://github.com/VidiLAB-com/Vidi-X/tree/master/Game-Of-Life_v2

Kako bi kôd prebacili na VIDI X, u Arduino IDE s izbornika Alati odaberite ODRIOD ESP32 pločicu te odaberite pripadajući COM port, a zatim kliknite na strelicu za upload ili kombinaciju tipki CTRL+U.
Komentirajte kôd i njegove iteracije na Vidi forumu https://forum.vidi.hr/

 

large

Na slici vidimo strukture koje su nastale iz ranije opisanih oblika, a ispuna tih pravokutnih oblika nastaje s mnogo „glider“ oblika pa su neki pravokutnici ispunjeni u potpunosti tim gliderima što bi označavalo živu ćeliju, dok drugi nisu ispunjeni te označavaju mrtvu ćeliju. Ovi napola ispunjeni su ili u nastajanju ili umiru. Sve se odvija u skladu s pravilima koja poštuju „Game of Life“ pravila.
Time smo unutar simuacije života kreirali procesor koji je u stanju izračunati stanje ćelija prema definiranom algoritmu te to stanje prikazati.
Koliko simulacija je moguće odvrtiti jednu unutar druge na taj način, ostavljamo vama na razmišljanje.

Ocijeni sadržaj
(2 glasova)

// možda će vas zanimati

Newsletter prijava


Kako izgleda naš posljednji newsletter pogledajte na ovom linku.

Copyright © by: VIDI-TO d.o.o. Sva prava pridržana.