Autorul poate fi contactat la adresa: Login pentru adresa
Prin acest proiect, voi incerca dezvoltarea functionalitatilor jocului Sizzling Hot, atat de prezent in salile de jocuri mecanice de noroc de peste tot din lume.
Ideea mi-a venit gandindu-ma la lucrurile monotone din societate, pe care le fac cat mai multi oameni, ce au legatura cu dispozitivele electronice. Desi au fost multe lucruri care mi-au trecut prin minte, l-am ales pe acesta stiind faptul ca oamenii in general pierd sume de bani prin astfel de jocuri, a caror implementare nu o cunosc, dar care totusi ii atrage foarte tare.
Sunt foarte curios daca feedback-ul colegilor sau al altor persoane care vor interactiona cu proiectul finalizat va fi similar, adica vor dori sa joace tot mai mult acest joc, chiar daca nu va mai fi un risc financiar la mijloc.
Fara a avea o implementare hardware dificila - 5 butoane cu diferite functionalitati care schimba starea display-ului, jocul primeaza insa prin dinamica si amploarea codului software.
Functionalitate:
Schema bloc:
Lista de piese:
Numar piese | Nume piesa | Specificatii |
---|---|---|
1 | Placa de baza | Microcontroller ATMega324 |
1 | Display | Display LCD ILI9341 |
5 | Butoane | |
1 | LE33 | |
1 | Condensator 4.7uF | |
1 | Cablaj de test aditional | |
13 | Fire legatura |
Schema electrica:
Am incercat obtinerea unui design cat mai bun al hardware-ului, incercand sa am un spatiu cat mai apropiat intre conexiuni (de exemplu, am folosit doar pinii PORT B si PORT D).
Fotografii ale partii hardware (inainte de realizarea cutiei-suport - va fi o surpriza pentru PM Fair (nu e gata, adica)):
Conexiunea pinilor pe placa de baza:
Codul a fost realizat in limbajul C. Pentru interactiunea cu display-ul, a fost folosita biblioteca specifica controller-ului ILI9341 [0].
Fiecare imagine a fost construita linie cu linie, avand dimensiunile de 40 x 40 de pixeli, in cate un fisier separat.
Implementarea are in vedere afisarea unui ecran negru, a titlului jocului - “Sizzling Hot”, a abstractizarii ecranului jocului, care randeaza 15 pictograme reprezentand simbolurile din joc, a numarului de linii pentru castig selectate, a mizei per linie, a mizei totale (= nr. linii x miza per linie) si a unui mesaj de interactiune cu utilizatorul, in functie de momentul jocului.
La apasarea BTN5, are loc o rotatie in cadrul jocului, in urma careia, pe rand se vor roti coloanele si vor aparea noi simboluri generate random (cam greu de venit cu algoritm pentru asa ceva). Se foloseste o matrice de pointeri catre functiile de randare a pictogramelor, care primesc ca parametri x si y pentru inceputul randarii. Rotatia are loc deci prin randari succesive in cadrul unei bucle 'for'. Pentru toate cele 5 coloare, se realizeaza o bucla 'for' care o cuprinde pe cealalta, deoarece efectul cu rotirile coloanelor pe rand este similar celui din realitate.
Apoi, in caz de castig, utilizatorul poate decide dublarea castigului (mai exact, cresterea lui exponentiala prin dublari succesive) prin apasarea BTN4, in urma careia este afisat un ecran negru si un mesaj pentru selectarea unei culori. In urma apasarii pe BTN2 sau BTN3, se selecteaza culoarea rosie sau neagra ca fiind cea a cartii ce va fi afisata. Se afiseaza cartea - daca are culoarea aceeasi cu cea selectata, se dubleaza castigul si se poate opta pentru o redublare prin alegerea similara a unei noi carti, altfel se poate alege incasarea castigului - prin apasarea BTN4.
Apasarea BTN1 este cel care afiseaza informatii despre joc - castiguri in functie de numarul de simboluri identice pe una din liniile selectate, in functie de simbol si de miza.
Pentru marirea sanselor de castig sau scaderea mizei, prin apasarea BTN2 se cresc sau scad numarul de linii ce vor fi considerate pentru castig (1, 3 sau 5), iar prin apasarea BTN3, se creste sau scade miza per linie (minim 1, maxim 50).
In momentul in care utilizatorul considera ca suma stransa este suficienta, poate opta pentru optiunea de Cash-out - prin apasarea butonului BTN4. Atunci, jocul ia sfarsit iar utilizatorul castiga suma din banca.
Jocul ia sfarsit si atunci cand suma din banca devine 0.
Sunt foarte multumit de cum va iesi jocul in forma sa finala - mai este putin de lucru la functionalitatea sa.
Partea grafica este exceptionala, peste ce ma asteptam sa reusesc, pictogramele fiind de o calitate foarte buna.
Feedback-ul din partea colegilor arata interes cu privire la joc si imi sporeste motivatia de a-l face cat mai bun.
Partea hardware a fost dificil de implementat, mereu fiind nevoie de o piesa care lipsea sau care se strica. Folosirea ecranului din nou a fost dificila, documentatia sa nefiind prea clara. A durat foarte mult implementarea hardware.
Partea software m-a pasionat foarte tare, fiind foarte mandru de cum se randeaza ceea ce scriu si de cum functioneaza. A compensat din plin experientele neplacute care au aparut la partea de hardware.
Sunt dezamagit ca nu am luat in calcul memoria limitata, am lucrat in plus si cam degeaba, ar fi iesit ceva si mai si.