Se da o imaginea patrata compusa din mai multe patrate egale amestecate. Va exista o singura patratica libera. Folosindu-se de aceasta patratica libera va trebui sa se miste celelalte patratele astfel incat sa se recompuna imaginea initiala. Patratele adiacente patratelei libere pot ocupa prin translatie stanga/dreapta/sus/jos locul liber rezultand un alt loc liber.
Placuta de extensie
Conexiunea cu placuta initiala
Nokia 3310
Componente necesare conectarii LCD-ului cu placuta de baza
=> 5 rezistente de 1k8 => 5 rezistente de 3k3 => 2 diode 1N4148 => 1 dioda Zener 3v3 (sa nu se arda ecranul daca una din rezistente nu limiteaza curentul) => 1 condensator 10uF => 5 butoane: RIGHT, LEFT, UP, DOWN, RESET => fire de legatura si pini
Nokia 3310 functioneaza la o tensiune de 2.7 - 3.3V. Am utilizat divizoare de tensiune pentru pinii SCK (clock), SDIN (data), D/C (data/cmd), SCE (enable), RES (reset). Pinul GND se conecteaza la GND-ul de pe placuta, iar pinul VOUT se conecteaza la condensatorul, conectat la masa, de 10uF. O dioda Zener de 3V3 protejeaza ecranul.
Ecranul conectat cu atmega16:
=> SCK = PC3 => SDIN = PC4 => D/C = PC5 => SCE = PC6 => RES = PC7
Butoanele conectate cu atmega16:
=> LEFT = PA5 => DOWN = PA4 => UP = PA3 => RIGHT = PA2 => RESET = PA1
Implementat in C.
Mediul de dezvoltare utilizat: Notepad++, Visual C++ 2008.
Am folosit libraria pcd8544.h
Am creat o functie care deseneaza conturul piesei. Am creat functii care deseneaza fiecare din numere.
In functia de puzzle_draw_first() se deseneaza tabla initiala si se retine fiecare piesa prin coltul stanga sus.
In functia deseneaza_s piesa() se da coltul stanga sus in care trebuie desenata piesa , se deseneaza conturul si in functie de numarul piesei se deseneaza acesta in interiorul conturului.
Functia sterge_piesa() se foloseste de coltul stanga sus dat ca parametru pentru a sterge piesa.
In functia get_card() in functie de colturile stanga sus se returneaza numarul piesei.
In functia check_win() se verifica daca piesele sunt in ordine corespunzatoare (daca se termina jocul).
In main() se initializeaza tabla. La apasarea unui buton se verifica daca se poate face mutarea. Daca se poate face atunci in functie de directie se preia coltul stanga sus al piesei cu care se face interschimbarea, se sterg ambele piese se interschimba colturile stanga sus si se redeseneaza piesele pentru noile pozitii. In cazul in care se apasa reset se revine la tabla initiala.
Nu am putut gasi ecran de Nokia 3310 si de aceea a trebuit sa impart un ecran impreuna cu alti colegi. Testarea codului s-a facut pe o placuta functionala datorita riscului arderii ecranului in cazul in care ar fi conectat la o tensiune >3.3V.
Joculetul este functional. ( Din punct de vedere software merge).