Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Mon Jul 25 2022 03:14:54 by
1.7.2