Andrei-Traian TĂLEANU - Game of Life

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Ce face?

Proiectul este o implementare a jocului “Game of Life”, in doua versiuni: Conway's Game of Life si High Life. Cele doua implementari au la baza niste reguli de evolutie diferite.

Care este scopul lui?

Jocul urmareste evolutia unor celule pe baza unor reguli simple. O celula are doua stari - vie sau moarta. Simularea evolutiei organismelor se face in generatii, astfel ca in fiecare etapa organismele pot supravietui, se pot naste sau pot muri, in functie de numarul de vecini.

Care a fost ideea de la care ati pornit?

Doream sa realizez un proiect pe LCD, de preferat un joc. M-am gandit ca acest joc ar fi mai interesant si mai diferit fata de ce au facut ceilalti.

Descriere generală

Schema bloc

Butonul de Start porneste jocul. Este initializata tabela de celule, iar la fiecare 500 de ms se calculeaza urmatoarea generatie de celule, dupa care este afisata. Cand se doreste resetarea jocului se apasa butonul de Reset si apoi din nou cel de Start.

Hardware Design

Lista de piese

  • WinStar Display LCD 2×16
  • Fire de legatura
  • Placuta pe care este lipit LCD-ul
  • 2 rezistente 2K2
  • 1 rezistenta 10K

Schema electrica

Diagrama de semnal

Rezultatele simularii

In urma simularii am obtinut diferite secvente de generatii in functie de numarul de reproducere, respectiv tipul jocului (Conway sau HighLife), cum era de asteptat.

Software Design

Am folosit WinAVR pentru dezvoltarea proiectului.

Header-ul “lcd.h” a fost suficient pentru lucrul cu LCD-ul. Nu am folosit algoritmi speciali pentru implementarea/optimizarea jocului, doar am urmat regulile. Nu voi preciza regulile aici, daca sunteti interesati voi pune link-uri mai jos, in Bibliografie. Am realizat 8 caractere custom, unul pentru fiecare combinatie pe care o pot avea 3 celule in cadrul unei celule de pe LCD. S-au obtinut astfel 6×16 celule.

Tabela de celule este initializata random. La fiecare pas este calculata urmatoarea generatie de celule care supravietuieste. Pentru fiecare celula se calculeaza urmatoarea sa stare in functie de starea vecinilor. Pentru acest lucru, am implementat mai multe functii si anume:

  • isAlive (va spune in ce stare curenta se afla o anumita celula)
  • checkUpper (intoarce numarul de vecini din partea de sus care vor trai in urmatoarea iteratie)
  • checkLower (intoarce numarul de vecini din partea de jos care vor trai in urmatoarea iteratie)
  • checkLeft (intoarce 1 daca vecinul din stanga va trai in urmatoarea iteratie)
  • checkRight (intoarce 1 daca vecinul din dreapta va trai in urmatoarea iteratie)
  • checkState (apeleaza functiile de mai sus)
  • transform (calculeaza starea fiecarei celule din urmatoarea generatie)

Pentru afisarea tabelei am implementat urmatoarele functii:

  • display_board (afiseaza tabela de celule)
  • check_display_state (verifica cum va arata o celula de pe LCD din iteratia curenta)

Rezultate Obţinute

Am reusit sa duc proiectul la final dupa ce am avut diverse probleme cu placa. Proiectul este functional, iar de fiecare data cand una din cele doua versiuni ale jocului se termina (ramane blocata), se reinitializeaza tabela cu cealalta versiune si jocul se reia.

Pana la PM, nu mai facusem un astfel de proiect. A fost o experienta interesanta, din care cu siguranta am invatat ceva, desi nu aveam asteptari prea mari.

Concluzii

In final, pot spune ca a meritat sa lucrez la acest proiect. Desi m-am apucat tarziu de el, am reusit sa il termin si ma bucur ca am realizat acest lucru. A fost un altfel de proiect, fata de temele pe care le-am avut de implementat pana acum si cu siguranta nu ar trebui sa se renunte la aceasta idee.

Download

Mai jos este un link catre README-ul atasat proiectului:

Mai jos este un link catre sursa proiectului ce contine 4×16 celule (4 custom):

Mai jos este un link catre sursa proiectului ce contine 6×16 celule (8 custom):

Bibliografie/Resurse

Am cumparat piesele de la Comet si Syscom

Resurse hardware

  • WinStar LCD 2×16, Pret: 20 lei
  • Fire de legatura, Pret: 4 lei
  • Placuta, Pret: 2 lei
  • Rezistente, Pret: ~2 lei

Resurse software

Datasheet ATMEGA324PA:

Informatii despre joc:

Pentru generarea caracterelor custom:

pm/prj2013/dtudose/game-of-life.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0