Table of Contents

Nim pe LCD

Introducere

Proiectul meu consta in realizarea jocului Nim pe o placuta ATMega328P, folosind ca display un LCD ST7735S. Nim reprezinta un joc matematic in care doi jucatori iau cu randul obiecte din multimi diferite. Pentru acest proiect am ales varianta Misere a jocului, in care pierzator este cel care ia ultimul obiect din joc, indiferent de multime.
Reguli joc: pe rand, fiecare jucator poate lua orice numar de elemente dintr-o singura multime. Nu se pot lua in aceeasi tura elemente din doua sau mai multe multimi. Jocul se termina doar atunci cand nu mai exista elemente de luat, caz in care jucatorul care a facut ultima mutare pierde.
Exemplu de joc: 2 multimi A si B cu 2 elemente fiecare, 2 jucatori, Alice si Bob.

  1. stare joc: A 2 elemente (A-2), B 2 elemente (B-2)
  2. Alice ia din A un element, stare joc: A-1 B-2
  3. Bob ia din B toate elementele, stare joc: A-1 B-0
  4. Alice ia din A un element, stare joc: A-0 B-0

Pentru ca Alice a luat ultimul element, ea a pierdut.

Scopul proiectului este unul pur recreational, realizat pentru amuzamentul utilizatorului.

Descriere generală

Pentru acest proiect, jocul are 4 multimi a cate 7 elemente fiecare. Voi utiliza 4 butoane, unul pentru fiecare heap, si un buton care sa marcheze confirmarea actiunii si trecerea la jucatorul urmator. Fiind doar un joc pe display, nu sunt necesare multe module pentru a asigura buna functionare a acestuia, importanta consta in inregistrarea inputului jucatorului si afisarea pe ecran a actiunii.

Hardware Design

Lista componente

Software Design

Proiectul va fi dezvoltat cu ajutorul PlatformIO care este integrat in MS Visual Studio Code, folosind avr-gcc.
Modulele software ale proiectului sunt:

Functionalitati principale pentru logica jocului:

Functionalitati principale pentru LCD:

In loop-ul principal, pentru jucator se verifica daca unul dintre flag-urile pentru input au fost setate. Daca da, atunci se verifica daca este apasat un buton valid, iar apoi se asteapta apasarea butonului pentru confirmarea actiunii. Pentru bot, un simplu apel de functie este de ajuns pentru modificarea datelor interne ale jocului.

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Bibliografie/Resurse

Resurse Hardware
Pentru realizarea diagramei am utilizat EasyEDA. Lista footprinturi piese:

Resurse software
Pentru realizarea diagramei bloc am utilizat PlantUML.

Export to PDF