Marius-Alexandru GRAURE (78680) - Slot Machine

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Scopul acestui proiect este de a crea un aparat ce simulează un slot machine (aparat de jocuri de noroc). Fructele din clasicele jocuri de noroc vor fi reprezentate de LED-uri RGB.

Prin intermediul butoanelor se va putea stabili soldul inițial, selecta modul de joc, selecta betul pentru fiecare rundă. Toate informațiile vor fi afișate pe un LCD. După fiecare rundă se va actualiza soldul curent. Prin intermediul unui buzzer activ, jucătorului îi este semnalat câștigul unei runde sau pierderea acesteia.

Utilitatea acestui proiect este posibilitatea de a încerca un joc de noroc.

Descriere generală

Schema bloc:

Hardware Design

Nr. piese Nume piese Link / Observații
15 Led RGB LED-uri RGB
1 Buzzer Buzzer activ
1 LCD LCD
5 Buton Butoane
1 Placa de baza cu ATMega324
43 fire de legatura Fire colorate tată-tată + Fire colorate mamă-mamă
9 Rezistente 1k - pentru LED-uri
2 Placă de test Placă de test
1 Header pini Header Pini
2 Header pini (40p) Header pini (40p)
1 Cablu alimentare Cablu alimentare
12 Distanțieri De pe strada Maica Domnului
2 Plăcuțe plexiglas De la Dedeman

Schema electrică:

Schema electrică a fost realizată în Eagle. Cele 15 leduri sunt amplasate într-o matrice de pixeli. Aceasta va ocupa 14 pini: 3R, 3G, 3B, 5 Catod. Pe fiecare legătură cu LED este o rezistență.

Folosesc 5 butoane: START (începerea jocului), GET_MONEY (jocul se termină, scoți banii), RED/BLUE (se dublează miza - mod de ghicire a culorii), DEC (scade bet-ul sau suma inițială), INC (crește bet-ul sau suma inițială).

Software Design

Mediul de dezvoltare a fost Atmel Studio 7.0, iar pentru încărcarea pe microcontroller am folosit HID Boot Flash.

Biblioteci incluse

#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

Pe lângă acestea, am inclus mai multe headere create de mine, plus fișierele pentru LCD din laborator (ușor modificat header-ul - pinii de date și cei de control).

Headere proprii

#include "turnoff.h"
#include "turnon.h"
#include "display.h"
#include "init.h"
#include "forms.h"
#include "double_game.h"
#include "game.h"

Modificări Header LCD

/*****************************************************************************\
 * Define-uri pentru parametrizarea bibliotecii LCD                          *
\*****************************************************************************/

// Portul pe care conectam pinii de date ai LCD-ului
#define LcdDATA_DDR             DDRC
#define LcdDATA_PORT            PORTC
#define LcdDATA_PIN             PINC

// Pinii de date ai LCD-ului
#define LcdD4                   PC6
#define LcdD5                   PC5
#define LcdD6                   PC4
#define LcdD7                   PC3

// Portul pe care conectam pinii de control ai LCD-ului
#define LcdCTRL_DDR             DDRA
#define LcdCTRL_PORT            PORTA
#define LcdCTRL_PIN             PINA

// Pinii de control ai LCD-ului
#define LcdRS                   PA5
#define LcdRW                   PA6
#define LcdE                    PA7

Nu am folosit anumiți algoritmi în implementare. Am implementat funcții de aprindere/stingere a fiecărui LED, funcții de aprindere/stingere linii, diverse funcții de afișare pe LCD.

void display_sold(int sold);
void display_bet(int bet);
void display_mode(char mode[]);
void display_top_line(int sold);
void display_bottom_line(int bet, char mode[]);
void display(int sold, int bet, char mode[]);
void clear_LCD();
void display_double_game();
int display_double_game_result(int right_colour, int chosen_colour);
void display_end_game(int sold);

void turnOnMatrix(int** matrix);
void tonLED11(int colour); //analog pentru celelalte LED-uri din matrice
void toffLED11(int colour); // analog pentru celelalte LED-uri din matrice

De asemenea, funcții de aprindere a LED-urilor în diferite formații specifice unui Slot Machine.

Jocul începe cu o sumă inițială (sold = 1000), pe care jucătorul poate să o crească prin intermediul butoanelor și cu o sumă pentru pariat (bet = 50), pe care jucătorul o poate modifica de asemenea.

După fiecare rundă, jucătorul poate să aleagă să își dubleze câștigul curent prin alegerea modului de joc double (jucătorul trebuie să aleagă între roșu și albastru; dacă alege culoarea bună, câștigul îi este dublat și poate să încerce din nou să îl dubleze). Desigur, există riscul de a pierde jocul double ( pierzând astfel și suma câștigată în runda normală).

Jocul se termină în momentul în care jucătorul hotărăște să nu mai joace (butonul Get Money) sau nu mai are credit.

Rezultate Obţinute

Am ales ca proiectul să se apropie cât mai mult de forma unui Slot Machine real. După prima rundă, vom vedea matricea de leduri cu “fructele” ce au apărut în runda respectivă. Dacă am câștigat ceva, suma va fi adăugată la soldul curent. Putem de asemenea să creștem suma pariată într-o rundă.

Putem alege să schimbăm modul de joc (Double). Se vor aprinde două LED-uri, unul roșu și unul albastru. Alegem ce culoare este LED-ul din mijloc. Dacă ce alegem este corect, câștigul din runda basic se dublează și putem să jucăm în continuare. Există desigur riscul de a pierde câștigul din runda basic sau cel din modul double (în cazul în care culoare aleasă de noi este greșită).

Dacă sold-ul ajunge la 0, jocul se termină. De asemenea, jucătorul poate să aleagă să se retragă, rămânând cu suma obținută până atunci.

Concluzii

Lucrul efectiv la proiect a fost interesant :-D. A fost frustrant la început, pentru că nu aveam îndemânarea necesară pentru a lipi componentele, dar am învățat în timp. Nu îmi plăcea când realizam că mai am nevoie de alte componente (fire, rezistențe) m(, neputând să fac rost în timp util de ele și trebuind să amân lucrul la proiect :-(.

Am încercat să acopăr cât mai mult din funcționalitățile normale ale unui Slot Machine. De asemeneam, am încercat să aduc și design-ul hardware-ului cât mai aproape de cel al unui Slot Machine.

Am avut câteva probleme cu pinii (PD2, iar apoi PD7), la care am conectat un buton, dându-mi seama ulterior că nu mergeau acei pini și am fost nevoit să modific schema electrică m(.

A durat ceva până m-am obișnuit cu lucrul cu matricea de LED-uri și cu LCD-ul (proiectul depășind ce făcusem în laborator). Cu toate acestea, m-am bucurat de fiecare mică reușită ;-).

Am ales la început această temă de proiect pentru că mi s-a părut interesantă ideea de a face un Slot Machine, dar în timp aceasta mi-a depășit așteptările, devenind din ce în ce mai interesantă.

Download

Jurnal

23 Aprilie Tema proiectului, lista de piese și schema bloc

6 Mai Schema electrică a proiectului

23 Mai Versiune finală (actualizare listă de piese, schemă electrică, software design, rezultate obținute, concluzii, download, bibliografie/resurse)

Bibliografie/Resurse

pm/prj2018/abirlica/marius.graure.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