Connect4
Autor
Introducere
Scopul proiectului este de a implementa, folosind un ecran LCD, jocul Connect4
Connect4 este un joc 1 vs. 1. Fiecare jucător își alege o culoare la început, după care, rând pe rând, dă drumul unui disc într-un grid.
Scopul jucătorului este de a conecta pe orice rând, coloană sau diagonală 4 discuri, încercând în același timp să îl încurce pe adversar.
Ideea de pornire a fost implementarea unui joc 1 vs. 1 care să fie cât de cât interactiv.
Modul de control al jocului va fi: butonul verde, fiind un buton de selecție, va fi folosit pentru a selecta meniurile jocului și pentru a selecta coloana în care jucătorul va dori să dea drumul discului. Pentru a schimba coloana, jocătorul va apăsa pe butonul roșu din stânga sau pe butonul roșu din dreapta.
Poză descriptivă
Descriere generală
Schemă bloc
Funcționalitate
Plăcuța va primi input de la 3 butoane de control:
un buton care va reprezenta schimbarea coloanei spre stânga
un buton care va reprezenta shimbarea coloanei spre dreapta
un buton care va reprezenta selectarea coloanei
Jocul se va desfășura astfel:
pentru început, va exista un meniu de start. Pentru a începe jocul, se apasă butonul verde
primul jucător este cel reprezentat de culoarea roșie
jucătorul curent este specificat și pe ecran cu ajutorul unui mesaj și culoarea sa
discul jucătorului curent este colorat în mod corespunzător (roșu sau galben)
fiecare jucător se miscă în tura sa stânga sau dreapta, după care dă drumul unui disc
dupa ce un jucător câștigă, pe ecran vor fi afișate doar chenarul jocului și câștigătorul, fără alte informații care erau afișate de-a lungul jocului
dupa câteva secunde, jucătorii sunt anunțați că pot da replay la joc apăsând butonul verde
butonul de replay duce jocul în starea inițială (meniul principal de unde se poate alege începerea jocului)
Outputul va fi realizat cu ajutorul:
Hardware Design
Listă de piese
Arduino
Modul LCD SPI 128×160
3 butoane de control
buzzer pasiv
leduri
2 x breadbord
Schema conectare LCD - Uno r3 și butoane
Pin LCD | Pin Arduino |
LED | 3.3V |
SCK | 13 |
SDA | 11 |
A0 sau DC | 9 |
RESET | 8 |
CS | 10 |
GND | GND |
VCC | 5V |
Software Design
Diagrama stărilor
BEGIN: se afișează pe ecran mesajul: Press green to play
GAMEPLAY: fiecare jucător, rând pe rând, se mișcă stânga dreapta cu cele 2 butoane roșii. Selectează coloana preferată cu butonul verde. Pe ecran este afișat un grid de 6×7, discul care urmează a fi pus in grid, cât și un mesaj care informează despre rândul curent. Acest mesaj este: Player turn: 0/1, unde 0 și 1 sunt colorate corespunzător. După ce discul este pus, noul disc se va repoziționa în mijlocul gridului
WIN SCREEN: după ce un jucător căștigă, după un delay, se șterge rândul curent și se afișează cine este câștigătorul printr-un mesaj intermitent. Totodată, câștigul este anunțat printr-o melodie
REPLAY SCREEN: dupa câteva secunde, pe ecran apare: PRESS GREEN TO PLAY. După ce se apasă pe butonul verde, jocul repornește, iar starea va deveni starea inițială, adică BEGIN
Implementare
Pe baza butoanelor, jocul poate fi urmărit ca un automat de stări.
În loop se pot observa aceste stări: GAME_INIT, GAME_BEGINS, GAME_STARTED, cât și alte variabile de stare: player_switched (care imi spune dacă un player și-a realizat tura, eu ar trebui să afișez pe ecran ceea ce el a făcut, iar următorul jucător poate continua)
Am ales să folosesc destul de multe variabile de stări, înafară de acestea, deoarece am dorit să nu desenez la fiecare apel de loop încontinuu aceleași forme care oricum erau desenate.
În funcție de starea jocului, în anumite situații, am ales să redesenez ceea ce voiam să șterg cu culoarea background-ului, deoarece era mai costisitor să dau clear la ecran, după care să redesenez totul (în primul rând ar fi trebui să țin minte ce am desenat și în al 2-lea rând ecranul ar fi făcut un flicker constant, ceea ce ar fi fost urât).
Se poate observa că în cod sunt foarte multe define-uri, deoarece am vrut să economisesc cât mai multă memorie, define-urile fiind folosite doar in etapa de preprocesare
Rezultate Obţinute
Concluzii
Download
Jurnal
Bibliografie/Resurse