
Semplice giochino su uno schermo 16x2
Revision 0:bdc469070965, committed 2016-12-05
- Comitter:
- Frileux
- Date:
- Mon Dec 05 18:55:46 2016 +0000
- Commit message:
- Gioco
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Mon Dec 05 18:55:46 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#308d188a2d3a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Dec 05 18:55:46 2016 +0000 @@ -0,0 +1,151 @@ +#include "mbed.h" +#include "TextLCD.h" + + +TextLCD lcd(D12, D11, D2, D8, D9, D10, TextLCD::LCD16x2); +DigitalOut Sinistra (D6); +DigitalOut Destra (D7); +SPI acc(D4,D5,D3); +DigitalOut cs(PA_15); + +int p=0; //indica la posizione della nostra macchinina sulla pista +bool t=false; // poichè usiamo due linee abbiamo la necessità di inserire un blocco da evitare una volta si e una no questa variabile ci serve a questo +char buffer[6]; //buffer data e float che servono nella ricezione dati dall'accelerometro +int16_t data[3]; +float x; + +void PLACE(int C[16][2]) //questa funzione non fa altro che randomizzare la comparsa dei blocchi da evitare +{ + int i= rand()%2; + C[0][i]=2; + return; +} + + + +void Visualizza(int C[16][2]) //Interfaccia che stampa sullo schermo la nostra matrice di gioco. Per velocizzare ho messo prima i 15 blocchi +{ + lcd.cls(); // dopo il controllo a parte della macchina + for(int i=0; i<15; i++) { + for(int j=0; j<2; j++) { + lcd.locate(i,j); + if(C[i][j]==2) + lcd.printf("-"); + } + } + for(int i=0; i<2; i++) + if(C[15][i]==1) + lcd.printf("<"); + return; +} + +bool scrol(int C[16][2],int j) //questa funzione ci permette di fare uno scroll di tutti i blocchi e un controllo sulla sconfitta +{ + for(int i=14; i>=0; i--) { + if(C[i][j]==2&&C[i+1][j]==1) + return false; + else if(C[i-1][j]==2) + C[i][j]=2; + else + C[i][j]=0; + } + return true; +} + + + + +void comando() //questa è da sistemare perchè è possibile inserire il comando ogni scorrimento di blocco, verrebbe meglio con un interrupt. +{ + wait(0.5); //Questo è il tempo che regola tutto il gioco, sarebbe carino inserire un potenziomentro esterno tramite il quale appunto velocizzare o diminuire il tutto. + cs=0; + acc.write(0x80|0x40|0x32); + for (int i = 0; i<=5; i++) { + buffer[i]=acc.write(0x00); + } + cs=1; + data[0] = buffer[1]<<8 | buffer[0]; + x=0.004*data[0]; + if(x>0.25) { + Destra=1; + Sinistra=0; + p=0; + } else if(x<-0.25) { + Sinistra=1; + Destra=0; + p=1; + } +} + +bool Excute(int C[16][2]) +{ + int h=p; // controllo per il cambio di posizione + comando();//chiamata per vedere qual è il comando + bool ok=true; + if(p!=h) { + if(p==0) + C[15][1]=0; + else + C[15][0]=0; + C[15][p]=1; + } + ok=scrol(C,0); + if(ok) //se l'altra linea ha toppato qui non ci deve proprio entrare. + ok=scrol(C,1); + //questo ci serve per il cambio di turno + if(t==false) + t=true; + else + t=false; + //riporta nel main la condizione di sconfitta + if(ok==false) + return false; + return true; +} + + + +int main() +{ + int C[16][2]; //Questa è la matrice su cui si svolge il gioco nel caso ci sia memorizzato: +//"1" indica la nostra macchinina +//"2" il blocco contro cui non dobbiamo andare a sbattere. +//Avrei potuto scegliere una matrice di booleani e riconoscere la nostra macchina e i blocchi a seconda della posizione sulle "x" però ho preferito +//utilizzare un int nel caso in futuro volessi aggiornare il gioco con elementi bonus. + + cs=1; + acc.format(8,3); + acc.frequency(2000000); + cs=0; + acc.write(0x31); + acc.write(0x0B); + cs=1; + cs=0; + acc.write(0x2D); + acc.write(0x08); + cs=1; +//comincia il gioco che va in un loop infinito + while(true) { + for(int i=0; i<16; i++) //ogni volta che perdi devi resettare tutte le caselle + for(int j=0; j<2; j++) + C[i][j]=0; + //condizioni iniziali non sono necessarie però preferisco reimpostarle ad ogni sconfitta + p=0; + t=0; + bool ok= true; //booleana che ci serve per la condizione di sconfitta + C[15][p]=1; //piazzamento della nostra macchinina + while(ok) { + if(t==true) { + PLACE(C); //funzione di piazzamento che avviene un ciclo si e uno no + } + ok=Excute(C); //funzione che contiene lo scroll e il controllo della sconfitta + Visualizza(C); //funzione di visualizzazione + } + //se siamo usciti dal while abbiamo perso ed è bene ricordarlo allo sconfitto + lcd.cls(); + lcd.locate(0,0); + lcd.printf("GAME OVER"); + wait(3); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Dec 05 18:55:46 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/d75b3fe1f5cb \ No newline at end of file