Mancala este o familie de jocuri din categoria boardgame ce isi au originea in Africa.
Palah Mancala este o varianta simplificata a jocului Kalah, numit si Socotește și Capturează, care apartine jocurilor de strategie Mancala.
Regulile jocului original - Kalah Mancala:
Exista 2 jucatori, fiecaruia fiindu-i asociate 6 celule cu seminte si o celula de scor. La inceputul jocului fiecare celula (cu exceptia celor de scor) contine cate 4 seminte. Scopul fiecarui jucator este de a adauga cat mai multe seminte in celula sa de scor (aflata in partea dreapta a tablei de joc pentru fiecare jucator).
La inceputul turei sale jucatorul trebuie sa selecteze una dintre celulele nevide controlate de el. Din aceasta se vor extrage toate semintele existente si se vor imparti cate una in celulele succesoare (inclusiv celula sa de scor, dar nu si celula de scor a adversarului) in sens invers acelor de ceasornic pana la epuizarea lor.
Daca ultima samanta cade in celula de scor a jucatorului, acesta primeste inca o mutare bonus. De asemenea, daca ultima samanta cade intr-o celula goala a jucatorului, iar celula opusa ei contine seminte, atat ultima samanta, cat si semintele din celula opusa, sunt capturate si adaugate in celula de scor a jucatorului.
Jocul se termina atunci cand unul dintre jucatori a colectat peste jumatate din numarul total de seminte in casuta sa de scor sau atunci cand unul dintre jucatori controleaza doar celule goale, caz in care adversarul sau colecteaza toate semintele ramase in celulele sale si le adauga la scor. Castiga cel cu scorul cel mai mare (cele mai multe seminte in celula de scor).
Scopul proiectului
Ideea proiectului a fost inspirata de o tema pe care am implementat-o in anul II la PP. Intotdeauna am fost fascinata de inteligenta artificiala si de dezvoltarea ei pana in punctul in care sa invinga campioni mondiali la jocuri de strategie, de aceea sunt bucuroasa ca pot utiliza informatiile obtinute in cadrul acestei facultati pentru implementarea unui mijloc de divertisment incitant si intuitiv.
Utilizatorul va interactiona cu jocul prin intermediul a 3 butoane:
- un buton pentru a deplasa selectia celulei spre stanga
- un buton pentru a deplasa selectia celulei spre dreapta
- un buton pentru a alege celula
Fiecare celula este reprezentata pe LCD printr-un numar ce reprezinta cantitatea de seminte aflate in acea celula.
- realizarea placutei de baza
- conectarea LCD-ului si a butoanelor la placuta de baza
- utilizarea API-ului din laborator pentru afisarea tablei de joc
- simularea selectarii unei celule prin alternarea unei casute pline cu cifra corespunzatoare ei
- implementarea unui joc fara AI (mutarile adversarului se fac random)
- implementarea unui joc de dificultate scazuta (se prioritizeaza alegerea celulelor ce ofera mutari bonus)
- implementarea unui joc de dificultate mai mare (se utilizeaza o euristica mai complexa)
- pentru reglarea contrastului LCD-ului a trebuit sa schimb valoarea rezistentei R4 din 1k in 2k, pentru a schimba valoarea VO data de divizorul de tensiune din ~0.4 V in ~0.8V
- pentru aprinderea backlight-ului LCD-ului a trebuit sa schimb valoarea rezistentei R16 din 1k in 100 ohmi sau mai putin
Aceste lucruri sunt particulare pentru modelul de LCD folosit de mine. Alti colegi care au utilizat tot LCD text 16 x 2, dar alt model, nu au avut aceleasi probleme.
Pentru implementare si compilare am instalat WinAVR, iar IDE-ul utilizat este Programmer's Notepad.
Pentru incarcarea codului pe placuta am folosit HIDBootFlash, utilizat si in cadrul laboratorului.
De asemenea, am folosit biblioteca aferenta lcd-ului text 16×2 din resursele de laborator.
Detalii despre joc:
Jocul incepe cu afisarea tablei, fiind selectata implicit cea mai din stanga casuta.
Pe masura ce evolueaza jocul, se afiseaza mesaje utile pentru utilizator:
- Your turn
- Computer's turn
- You won!
- You lost!
- Tie game!
Pentru a executa o miscare jucatorul trebuie sa aleaga casuta cu ajutorul butoanelor stanga / dreapta si sa o selecteze cu ajutorul butonului din mijloc. Cand nu este randul jucatorului, acestuia ii este oprit controlul butoanelor.
De asemenea, am implementat functionalitatea de a aprinde / stinge backlight-ul LCD-ului prin apasarea butonului BTN de pe placa de baza.
- in momentul in care am incercat sa dezlipesc rezistenta R4 pentru a o inlocui, intrucat nu am avut la dispozitie o tresa sau alt instrument care sa ma ajute, mi s-a desprins o parte a circuitului de pe placa (cercul de pe marginea gaurii) si nu am mai reusit sa lipesc acel picior al noii rezistente, motiv pentru care am fost nevoita sa fac contact direct de la R4 la R7 cu un fir
- pentru a nu repeta problema, in cazul rezistentei R16 am ales sa leg o rezistenta de 100 ohmi pe spatele placii, in paralel cu cea pe care o lipisem deja, obtinand astfel o valoare de ~90 ohmi
Pentru mai multe detalii puteti descarca arhiva proiectului care contine atat codul sursa, cat si schemele si alte informatii.