Minesweeper

Nume: Ştefan Diana Maria
Grupa: 332CC

Introducere

  • Proiectul implementează jocul clasic Minesweeper pe o placă Arduino, folosind un display LCD, butoane și un joystick pentru interacțiune. Jocul se desfășoară pe o grilă împărțită în pătrățele. Scopul este să dezvălui toate pătrățelele care nu conțin mine, bazându-te pe indicii numerice.
  • Proiectul are ca scop oferirea unei experiențe de joc interactive.

Descriere generală

Minesweeper este un joc puzzle single-player, în care obiectivul este să dezvălui un câmp minat ascuns fără a detona vreo mină.

  • Jocul se desfășoară pe o grilă dreptunghiulară plină cu pătrățele.
  • Sub o parte din pătrățele sunt ascunse mine. Dacă pășești pe o mină, pierzi jocul.
  • Restul pătrățelelor afișează numere care indică numărul de mine din jurul acelui pătrățel specific (inclusiv pătrățelele adiacente în diagonală).
  • Dând click dreapta pe un pătrat, poți plasa un steguleț, marcându-l ca locație suspectă a unei mine, iar dând click stânga pe un pătrat pentru a dezvălui ce se află sub el.

Proiectul utilizeză:

  • Ecran LCD: Afisează o grilă care reprezintă câmpul minat, dezvăluind treptat pătrățelele și numerele asociate pe măsură ce jucătorul progresează.
  • Butoane: Oferă o modalitate de a marca locațiile suspectate sau de a dezvălui pătrățelele considerate sigure.
  • Joystick: Facilitează navigarea prin grila Minesweeper, pentru a selecta celulele dorite.
  • Leduri: Se aprind in functie de rezultatul jocului.

Schema bloc

Hardware Design

Lista de piese necesare:

Piesa Cantitate
Arduino Nano 1
Joystick 1
1.8 TFT Display 1
Buton 2
Led colorat 2
Rezistenta 2k2 5
Rezistenta 330 1
Rezistenta 220 2
Breadboard 830 puncte 1

Schema electrica

Software Design

Mediu de dezvoltare: Arduino IDE
Biblioteci utilizate: TFT.h SPI.h

Conexiuni Pin

  • Ecran TFT

→ CS (Chip Select): Pin 10
→ DC (Data/Command): Pin 9
→ RST (Reset): Pin 12
→ Joystick → VRX (X-axa): A0
→ VRY (Y-axa): A1
→ SW (Buton): Pin 7

  • Butoane

→ Buton roșu: Pin 3
→ Buton albastru: Pin 2

  • LED-uri

→ LED roșu: Pin 4
→ LED albastru: Pin 5

Constante și Variabile

  • Culori

Diverse culori sunt definite pentru confort.

  • Praguri

Valori analogice pentru detectarea mișcării joystick-ului.

  • Dimensiuni

Lățimea și înălțimea ecranului.

  • Câmp de mine

O grilă de 8×10 cu 10 mine.

  • Poziție

Poziția curentă a cursorului.

Explicația Codului

Setup

→ Funcția setup inițializează ecranul TFT, setează modurile pin pentru butoane și LED-uri și afișează meniul de start.

Loop

→ Funcția loop conține logica principală a jocului:
→ Verifică condiția de câștig.
→ Citește starea butoanelor și a joystick-ului.
→ Dacă jocul nu a început, verifică dacă butonul de start este apăsat.
→ Dacă jocul este în desfășurare:
→ Gestionează plasarea stegulețelor.
→ Gestionează dezvăluirea celulelor.
→ Gestionează mișcarea cursorului.

Alte funcții

  • initializeminefield()

→ Inițializează câmpul de mine cu celule goale.

  • placeMines()

→ Plasează aleatoriu mine pe câmpul de mine.

  • calculateNumbers()

→ Calculează numerele care indică numărul de mine adiacente.

  • printminefield()

→ Afișează câmpul de mine pe monitorul serial.

  • displayminefield()

→ Afișează câmpul de mine pe ecranul TFT.

  • drawBomb()

→ Desenează o bombă pe ecranul TFT.

  • drawFlag()

→ Desenează un steguleț pe ecranul TFT.

  • emptySpace()

→ Dezvăluie toate spațiile goale conectate.

  • lose()

→ Afișează mesajul de pierdere și aprinde LED-ul roșu.

  • win()

→ Afișează mesajul de câștig și aprinde LED-ul albastru.

  • revealCell()

→ Dezvăluie o celulă și verifică pentru mine.

  • displayGrid()

→ Desenează grila pe ecranul TFT.

  • move()

→ Mișcă cursorul pe baza intrării de la joystick.

  • draw_menu()

→ Afișează meniul de start.

Jocul afișează “YOU LOST” și aprinde LED-ul roșu dacă o mină este dezvăluită.
Jocul afișează “YOU WON” și aprinde LED-ul albastru dacă toate celulele care nu sunt mine sunt dezvăluite.

Rezultate Obţinute


Concluzii

Proiectul Minesweeper pe Arduino a fost finalizat cu succes, atingând toate obiectivele propuse și demonstrând viabilitatea și funcționalitatea acestuia. Experiența acumulată în cadrul acestui proiect a fost extrem de valoroasă, oferind o bază solidă pentru proiecte viitoare și dezvoltarea continuă a abilităților tehnice.

Posibile Îmbunătățiri:
Extinderea Funcționalităților: Adăugarea de nivele de dificultate sau opțiuni suplimentare pentru utilizatori ar putea îmbunătăți experiența de joc.
Optimizări de Performanță: Analizarea și optimizarea codului pentru a asigura o performanță mai bună și un răspuns mai rapid al interfeței.
Design Ergonomic: Îmbunătățirea designului fizic pentru a facilita o interacțiune mai confortabilă și intuitivă.

Download

Arhiva se poate descarca aici.

Jurnal

05 mai: Alegerea temei proiectului
Decizia de a dezvolta jocul Minesweeper pe Arduino.
Identificarea componentelor necesare.
15 mai: Sosirea componentelor și asamblarea hardware
16 mai: Finalizarea asamblarii hardware-ului: ecran TFT, joystick, butoane, LED-uri.
18 mai: Implementarea matricei de joc și a logicii de bază
20 mai: Dezvoltarea interfeței de joc și a funcțiilor principale
21 mai: Crearea meniului de start și finalizarea proiectului
Testarea finală și ajustările finale.

Bibliografie/Resurse

pm/prj2024/alucaci/diana.stefan0106.txt · Last modified: 2024/05/23 17:37 by diana.stefan0106
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