Table of Contents

Alina-Teodora MIRION - Battleship Game

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Prezentarea pe scurt a proiectului vostru:

  • Implementeaza celebrul joc Battleship pe un LCD
  • Scopul jocului e de a bate adversarul
  • Am discutat impreuna cu colega mea de proiect, Andrada Bosinceanu si ne-am gandit ca ar fi interesant
  • Este util pentru noi deoarece am invatat multe lucruri implementandu-l, iar pentru ceilalti e o cale de a se distra

Descriere generală

Battleship (sau Battleships sau Sea Battle) e un joc de ghicit facut pentru doi jucatori. Se joaca folosind o bucata de hartie si una de creion. Dateaza din Primul Razboi Mondial. In 1930 a fost publicat de diverse companii si a aparut ca boardgame in 1967.

Cum se joaca?

Se joaca pe patru seturi de grid-uri, doua pentru fiecare jucator. Gridurile au aceeasi dimensiune (10×10) si csunt identificate dupa litera si numar. Pe una din grid-uri jucatorul seteaza navele si tine un log al loviturilor adversarului. Pe cea de-a doua va tine un log al loviturilor intreprinse de el.

Inainte sa inceapa jocul, fiecare jucator isi aranjeaza navele fara ca celalalt sa stie pe grid-ul primar. Fiecare nava ocupa un numar consecitiv de patratele pe grid, aranjat fie vertical, fie orizontal. Numarul de patratele care formeaza o nava este determinat de tipul navei. Navele nu se pot suprapune (adica o singura nava poate ocupa un singur patratel din grid). Fiecare jucator are voie sa plaseze pe grid acelasi numar de nave (care depinde de reguli).

Conform versiunii lui Milton Bradley, navele sunt urmatoarele:

Tip de nava Dimensiune
Aircraft carrier 5
Battleship 4
Submarine 3
Destroyer 3
Patrol Boat 2

Dupa ce navele au fost pozitionate, jocul se desfasoara in runde. In fiecare runda, fiecare player anunta patratelul pe care-l va lovi. Oponentul va spune daca patratelul target-at face parte dintr-o nava. Daca da, atunci va anunta ca este lovit si va marca patratelul corespunzator pe grid-ul sau. Atacantul va tine un log in ceea ce priveste “hit”-urile si “miss”-urile.

Dupa ce toate patratelele au fost nimerite se scufunda nava. Daca toate navele au fost nimerite, s-a terminat jocul.

Schema bloc

Hardware Design

Lista piese

Piese Număr Preț Sursa
LCD 2×16 1 44 lei www.robofun.ro
Butoane 5 1 leu www.robofun.ro
Placa test 1 9 lei www.robofun.ro
Bareta 40 de pini mama 2 5 lei www.robofun.ro
Cablu Panglica 1 1 leu www.robofun.ro
Plăcuța PM2014 1 PM lab

Schema electrica

Software Design

Medii de dezvoltare folosite:

  • ISIS Professional Release 7.6 (Build 8404)
  • Programmer's notepad2, version 2.0.8.718-basie
  • AVR-USB Bootloader Flash Tool, v. 1.0.

Headers:

  • #include <avr/io.h>
  • #include <stdio.h>
  • #include <stdint.h>
  • #include <util/delay.h>
  • #include “lcd.h” (oferit de echipa de PM in cadrul laboratorului)

Functii:

  • Initializarea LCD-ului considerand o interfatare cu 4 pini de date. (void LCD_init(void))
  • Executarea secventei de citire a unui octet de date de la LCD. (uint8_t LCD_read(void))
  • Citerea starii LCD-ului (contine busy flag). (uint8_t LCD_readStatus(void))
  • Citerea unui octet din ultima memorie folosita (DDRAM sau CGRAM). (uint8_t LCD_readData(void))
  • Returnarea starii LCD-ului: 1 - busy, 0 - available (uint8_t LCD_isBusy(void))
  • Asteaptarea pana cand LCD-ul devine disponibil pentru o noua comanda. (void LCD_waitNotBusy(void))
  • Trimiterea unei instructiuni de control catre LCD. (void LCD_writeInstr(uint8_t instr))
  • Trimiterea unei instructiuni de scriere date catre LCD. (void LCD_writeData(uint8_t data))
  • Afisarea caracterului pe LCD la adresa curenta. (void LCD_putChar(char c))
  • Afiserea caracterului pe LCD la adresa primita. (void LCD_putCharAt(uint8_t addr, char c))
  • Afisarea string-ul pe LCD incepand de la adresa curenta. (void LCD_print(const char* msg))
  • Afiseaza string-ul pe LCD incepand de la adresa primita. (void LCD_printAt(uint8_t addr, const char* msg))

Rezultate Obţinute

Concluzii

Partea cea mai complicata a fost construirea efectiva a hardware-ului. Desi s-a dovedit un task dificil, am reusit sa ma bucur de experienta oferita. Placutiada a fost un moment cheie in dezvoltarea proiectului intrucat am luat contact cu mai multi entuziasti din echipa de PM. De asemenea, am reusit sa mai prind o fereastra, doua, in timpul week-endului in care am mai lipit la proiect sub indrumarea asistentului Ioan Deaconu. Din cauza unor deficitati hardware nu am reusit sa implementez software tot ce mi-am dorit, dar m-am bucurat de fiecare etapa a proiectului.

Download

battleship.zip

Bibliografie/Resurse