Clemente D'Angelo / Mbed 2 deprecated GiochinoASchermo

Dependencies:   TextLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "TextLCD.h"
00003 
00004 
00005 TextLCD lcd(D12, D11, D2, D8, D9, D10, TextLCD::LCD16x2);
00006 DigitalOut Sinistra (D6);
00007 DigitalOut Destra (D7);
00008 SPI acc(D4,D5,D3);
00009 DigitalOut cs(PA_15);
00010 
00011 int p=0; //indica la posizione della nostra macchinina sulla pista
00012 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
00013 char buffer[6];  //buffer data e float che servono nella ricezione dati dall'accelerometro
00014 int16_t data[3];
00015 float x;
00016 
00017 void PLACE(int C[16][2])  //questa funzione non fa altro che randomizzare la comparsa dei blocchi da evitare
00018 {
00019     int i= rand()%2;
00020     C[0][i]=2;
00021     return;
00022 }
00023 
00024 
00025 
00026 void Visualizza(int C[16][2])   //Interfaccia che stampa sullo schermo la nostra matrice di gioco. Per velocizzare ho messo prima i 15 blocchi
00027 {
00028     lcd.cls();                  // dopo il controllo a parte della macchina
00029     for(int i=0; i<15; i++) {
00030         for(int j=0; j<2; j++) {
00031             lcd.locate(i,j);
00032             if(C[i][j]==2)
00033                 lcd.printf("-");
00034         }
00035     }
00036     for(int i=0; i<2; i++)
00037         if(C[15][i]==1)
00038             lcd.printf("<");
00039     return;
00040 }
00041 
00042 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
00043 {
00044     for(int i=14; i>=0; i--) {
00045         if(C[i][j]==2&&C[i+1][j]==1)
00046             return false;
00047         else if(C[i-1][j]==2)
00048             C[i][j]=2;
00049         else
00050             C[i][j]=0;
00051     }
00052     return true;
00053 }
00054 
00055 
00056 
00057 
00058 void comando()  //questa è da sistemare perchè è possibile inserire il comando ogni scorrimento di blocco, verrebbe meglio con un interrupt.
00059 {
00060     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.
00061     cs=0;
00062     acc.write(0x80|0x40|0x32);
00063     for (int i = 0; i<=5; i++) {
00064         buffer[i]=acc.write(0x00);
00065     }
00066     cs=1;
00067     data[0] = buffer[1]<<8 | buffer[0];
00068     x=0.004*data[0];
00069     if(x>0.25) {
00070         Destra=1;
00071         Sinistra=0;
00072         p=0;
00073     } else if(x<-0.25) {
00074         Sinistra=1;
00075         Destra=0;
00076         p=1;
00077     }
00078 }
00079 
00080 bool Excute(int C[16][2])
00081 {
00082     int h=p;  // controllo per il cambio di posizione
00083     comando();//chiamata per vedere qual è il comando
00084     bool ok=true;
00085     if(p!=h) {
00086         if(p==0)
00087             C[15][1]=0;
00088         else
00089             C[15][0]=0;
00090         C[15][p]=1;
00091     }
00092     ok=scrol(C,0);
00093     if(ok) //se l'altra linea ha toppato qui non ci deve proprio entrare.
00094         ok=scrol(C,1);
00095     //questo ci serve per il cambio di turno
00096     if(t==false)
00097         t=true;
00098     else
00099         t=false;
00100     //riporta nel main la condizione di sconfitta
00101     if(ok==false)
00102         return false;
00103     return true;
00104 }
00105 
00106 
00107 
00108 int main()
00109 {
00110     int C[16][2]; //Questa è la matrice su cui si svolge il gioco nel caso ci sia memorizzato:
00111 //"1" indica la nostra macchinina
00112 //"2" il blocco contro cui non dobbiamo andare a sbattere.
00113 //Avrei potuto scegliere una matrice di booleani e riconoscere la nostra macchina e i blocchi a seconda della posizione sulle "x" però ho preferito
00114 //utilizzare un int nel caso in futuro volessi aggiornare il gioco con elementi bonus.
00115 
00116     cs=1;
00117     acc.format(8,3);
00118     acc.frequency(2000000);
00119     cs=0;
00120     acc.write(0x31);
00121     acc.write(0x0B);
00122     cs=1;
00123     cs=0;
00124     acc.write(0x2D);
00125     acc.write(0x08);
00126     cs=1;
00127 //comincia il gioco che va in un loop infinito
00128     while(true) {
00129         for(int i=0; i<16; i++) //ogni volta che perdi devi resettare tutte le caselle
00130             for(int j=0; j<2; j++)
00131                 C[i][j]=0;
00132         //condizioni iniziali non sono necessarie però preferisco reimpostarle ad ogni sconfitta
00133         p=0;
00134         t=0;
00135         bool ok= true;  //booleana che ci serve per la condizione di sconfitta
00136         C[15][p]=1; //piazzamento della nostra macchinina
00137         while(ok) {
00138             if(t==true) {
00139                 PLACE(C);  //funzione di piazzamento che avviene un ciclo si e uno no
00140             }
00141             ok=Excute(C);   //funzione che contiene lo scroll e il controllo della sconfitta
00142             Visualizza(C);  //funzione di visualizzazione
00143         }
00144         //se siamo usciti dal while abbiamo perso ed è bene ricordarlo allo sconfitto
00145         lcd.cls();
00146         lcd.locate(0,0);
00147         lcd.printf("GAME OVER");
00148         wait(3);
00149     }
00150 
00151 }