1

Dependencies:   mbed TextLCD

Ovo je jednostavna igra, ne previše zanimljiva, napravljena od mbed LPC1768 mikrokontrolera, 16x2 LCD-a i jedne tipke.

/media/uploads/kyzo/shema.gif

Napravljena su 3 custom charactera za animaciju lika i izgled neprijatelja, koji se na početku koda zapisuju u memoriju LCD-a.

Priključivanjem mbed-a na napajanje kod prvo poziva funkciju čitaj iz „spremanje.cpp“ koja povlači trenutni highscore iz datoteke log.txt koja se nalazi u flashu mbeda-a, sprema ga u varijablu i prikazuje na ekranu.

Nakon toga poziva se funkcija koja zapiše custom charactere iz arraya u memoriju LCD-a. Obzirom da se jedan segment LCD-a sastoji od 5x8px, custom znakove je moguće kreirati na način da se na mjesto svakog bita u bajtu koji želimo prikazati stavi 1.

Primjer kvadrat:

1 1 1 1 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1

Od toga dobijemo niz od 8 byteova ({0x1F,0x11,0x11,0x11,0x11,0x11,0x11,0x1F})koji možemo zapisati kao custom char.

U beskonačnoj petlji istovremeno se vrši animacija i manipulacija likom, crtanje i animacija prepreke, sve dok ne dođe do kolizije i kraja igre, ispisuje se rezultat i igra se vraća na početni ekran.

Za mjerenje rezultata u sekundama je zadužen timer koji resetiramo svakom novom igrom, nakon što je igra gotova vrši se provjera da li je oboren highscore, ako je zapisuje se u log.txt u flashu putem funkcije upis.

spremanje.cpp

Committer:
kyzo
Date:
2018-11-19
Revision:
0:316948794d55

File content as of revision 0:316948794d55:

#include "spremanje.h"
#include "mbed.h"

LocalFileSystem local("local");                 // kreuranje local file system za r/w filea
int rekord;                                     // varijabla za upis()
Serial pc(USBTX,USBRX);                         // serijska komunikacija za debug


////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////Funkcija za upis rekorda//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////

void upis(int rekord) {                                         



    FILE *logFile = NULL;                       // pointer za file
    
    
 

  logFile = fopen("/local/log.txt", "w");       // otvori log.txt file za pisanje
                                     
  if (logFile == NULL) {                        // ako nije moguće otvoriti
    pc.printf("Ne mogu otvoriti file.\n");      // javi err na teraterm
    while (1) {
      wait(100);
    }
  }else (pc.printf("OTVOREN FILE."));           // inače javi da je ok
 
 
 
  
  fprintf(logFile, "%d\r\n", rekord);           // upiši var rekord u file log.txt
 
  fclose(logFile);                              // zatvori file
}


////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////Funkcija za čitanje rekorda//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
    
int citaj(void) {
    
    
    FILE *set = fopen("/local/log.txt", "r");      // otvori log.txt za čitanje
    
    fscanf(set,"%i", &rekord);                     // pročitaj i spremi u rekord var
   
    fclose(set);                                   // zatvori file 
    pc.printf("Iz varijable je procitano: %i", rekord);     // javi podatak u teraterm
    return(rekord);                                         // vrati info glavnoj funkciji
    
}