Fazan

Introducere

Descriere generală a proiectului

Acest proiect are ca scop implementarea jocului “Fazan” pe un ecran LCD

Reguli

  • Jocul presupune minim 2 jucatori şi se bazează pe rostirea alternativă a unor cuvinte de vocabular
  • Dacă sunt mai mult de doi jucători, aceştia se vor aşeza în formă de inel
  • Iniţial, unul dintre jucători este ales să înceapă în gând alfabetul.
  • Jucătorul din dreapta lui va zice “STOP” și primul jucător va spune cu voce tare litera din alfabet la care ajunsese până în acel moment. Aceasta reprezintă litera cu care trebuie să se înceapă primul cuvânt.
  • Jucătorul care a spus “STOP” trebuie să spună un cuvânt cu litera rostită de către primul jucător.
  • În sens trigonometric, fiecare jucător trebuie să spună un cuvânt care începe cu ultimele două litere ale cuvântului precedent.
  • În cazul în care unul dintre jucători nu reuşeşte să găsească un cuvânt care să respecte regula, se spune că “a fost închis” şi i se scade una din cele cinci vieţi iniţiale (sau în limbajul specific jocului primeşte o literă din cuvântul “Fazan”, de ex. dacă a fost închis a doua oară se spune că este “Fa”)
  • În momentul în care un jucător a fost închis, acesta va începe să spună alfabetul în gând la fel ca şi primul jucător, iar jocul se va relua la fel ca la început
  • Dacă un jucător a fost închis de cinci ori (“este Fazan”), el va fi eliminat din joc
  • Ultimul jucător care rămâne în joc este declarat câştigător
  • O regulă spune că toate cuvintele folosite în joc trebuie să fie distincte, altfel nu vor fi luate în considerare
  • Conform unei alte reguli, în prima tură completă după rostirea alfabetului, jucătorii nu au voie să folosească un cuvânt care “închide”
  • De asemenea, cuvintele nu trebuie să fie prepoziţii, nume proprii sau interjecţii; se poate însă stabili de la început o arie tematică care să înlocuiască această regulă (de ex. acronime din lumea calculatoarelor)

Hardware Design

Tastatura este simulată prin 19 leduri şi 5 senzori de lumină. S-a ales această metodă în locul unei matrice de butoane atât datorită uşurinţei în implementare, cât şi ca un model de alternativă (se elimină efectul de bouncing specific butoanelor).

Piesele folosite sunt:

  • 19 leduri roşii pentru tastatură
  • 5 fotodiode pentru citirea simbolurilor de pe tastatură
  • o rezistenţă de 100 ohmi + una de 1k folosite în paralel pentru conectarea led-urilor
  • LCD cu afişare pe două rânduri, câte opt caractere pe rând

Conectarea ecranului cu pinii ATmega32:

  • pinii PC0-PC6

Conectarea ledurilor cu pinii ATmega32:

  • ledurile au o configuraţie prestabilită şi vor fi tot timpul aprinse, astfel că sunt doar conectate la VCC printr-o rezistenţă de aprox 90 ohmi

Fotodiodele sunt conectate pe portul A ne interesează valorile exacte înregistrate - folosim convertorul analog-digital.

Placuţa iniţială:

Schema este următoarea:

Proiectul în forma finală arată ca mai jos:

img_0290_fazan013.jpg

Se observă dispunerea celor 19 leduri astfel încât un grup de câte patru leduri indică o literă a alfabetului. Prin plasarea grupului de senzori deasupra unui astfel de grup şi folosirea senzorului de selecţie, se va putea alege o literă pentru construcţia cuvântului.

După cum se poate vedea, cei patru senzori se află pe o plăcuţă separată şi cu ajutorul lor se poate selecta litera dorită. Un cuvânt se termină prin alegerea simbolului ”.”. De asemenea există posibilitatea de a cere o sugestie (un hint) prin selectarea simbolului ”?”.

Software Design

S-a pornit de la sursa Laboratorului 1 pentru că era deja implementată interfaţarea cu ecranul LCD.

Din cauză ca distingerea unui led aprins de către un senzor de lumină depinde de lumina ambientală, în prima fază este nevoie de o “calibrare”: i se va cere utilizatorului să ţină câteva secunde placuţa cu senzori pe litera “A” pentru a determina valoarea pentru poziţia “stins”. Valoarea înregistrată de către ATmega32 va constitui referinţă pentru distingerea poziţiilor “stins” şi “aprins”.

Software-ul realizează următoarele acţiuni:

  • Imediat după pornirea programului se calibrează senzorii de lumină
  • Jocul este început de către AI. Acesta începe alfabetul (afişează succesiv literele pe ecran) iar în momentul în care primul utilizator uman a acoperit senzorul ultima literă va ramâne afişată pe ecran.
  • De la tastatura de leduri acelaşi utilizatorul uman (HP) va alege literă după literă până se va completa cuvântul. Terminarea unui cuvânt este determinată de selectarea simbolului ”.”. În situaţia în care cuvântul nu există în dicţionar, va apărea pe ecran un mesaj care va specifica acest lucru şi utilizatorului i se va cere să reintroducă un alt şir de caractere. În cazul în care utilizatorul uman renunţă, negăsind un cuvânt potrivit, va selecta caracterul ”-”. Tasta pentru ştergerea unei litere este “spaţiu”.
  • Jucătorul uman poate cere o sugestie prin apăsarea tastei ”?”, ceea ce se traduce prin introducerea unei litere dintr-un cuvânt găsit aleator în dicţionar de către program, care să respecte regulile.
  • De fiecare dată când “se spune” alfabetul, se vor oferi informaţii despre situaţia jucătorilor

Rezultate obţinute

Jocul este funcţional însă nu am apucat să terminăm şi dicţionarul de cuvinte pe SD card.

Concluzii

Cele mai dificile au fost întocmirea planului de acţiune şi partea de gameplay a codului.

Din cauză ca distingerea unui led aprins de către un senzor de lumină depinde de lumina ambientală (altfel se poate juca doar dacă lumina ambientală şi-ar păstra valoarea pe întreg parcursul jocului), în prima fază ar fi nevoie de o “calibrare”: i se poate cere utilizatorului să ţină câteva secunde placuţa cu senzori pe litera “A” pentru a determina valoarea pentru poziţia “stins”. Valoarea înregistrată de către ATmega32 ar constitui referinţă pentru distingerea poziţiilor “stins” şi “aprins”.

Pentru că în Isis nu se pot folosi pinii PC6 şi PC7 ca pini de output, pentru simulare LCD-ul trebuie cuplat pe portul D.

Download

Bibliografie/Resurse

pm/prj2011/lpestritu/fazan.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