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 #include "spremanje.h" 00004 00005 00006 TextLCD lcd(p19, p20, p21, p22, p23, p24); //rs,e,d0,d1,d2,d3 Definiranje lcd pinova 00007 00008 //////////////////////////////////////////////////////////////////////////////////////// 00009 ////////////////////////// Definiranje custom charactera//////////////////////////////// 00010 //////////////////////////////////////////////////////////////////////////////////////// 00011 char custom_char[4][8] = { 00012 {0x0C,0x0C,0x00,0x0E,0x1C,0x0C,0x1A,0x13}, // čovječuljak trk 1 00013 {0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x0C,0x0E}, // čovječuljak trk 2 00014 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // prazan char 00015 {0x00,0x01,0x02,0x7C,0x81,0x7C,0x02,0x01} // neprijatelj 00016 00017 }; 00018 00019 00020 //////////////////////////////////////////////////////////////////////////////////////// 00021 ///////////////////////////// Definiranje varijabli, I/O//////////////////////////////// 00022 //////////////////////////////////////////////////////////////////////////////////////// 00023 00024 BusOut Lcd_pins(p21, p22, p23, p24); // d4, d5, d6, d7 Definiranje lcd sabirnice za upis charactera 00025 Timer timer1; // Timer za izračun rezultata 00026 DigitalOut rs_pin(p19); // LCD pin rs (register select.) 00027 DigitalOut e_pin(p20); // LCD pin e (enable). 00028 DigitalIn tipka(p14); // Tipka za kontrolu 00029 int red = 1; // Varijabla za trenutačni red 00030 int tempRed= 0; // pomoćna temp varijabla za stanje reda 00031 int stupac = 15; // broj stupaca u igri 00032 int rezultat = 0; // varijabla za rezultat u igri 00033 int highScore = 0; // varijabla za highscore (čitanje/upis -> local/log.txt) 00034 float brzinaLika = 0.20; // brzina lika/neprijatelja 00035 bool posBit = false; // flag za lokaciju lika na ekranu 00036 bool gameOver = true; // flag za kraj igre 00037 00038 00039 void igra(void); // funkcija igre 00040 00041 00042 00043 //////////////////////////////////////////////////////////////////////////////////////// 00044 // funkcija za upis custom charactera u memoriju lcd-a, u 2 koraka jer se piše 4+4 bita/ 00045 //////////////////////////////////////////////////////////////////////////////////////// 00046 00047 void writePort(int value) { // slanje u 2 koraka jer koristimo 4bit na lcd 00048 00049 Lcd_pins = value >> 4; // shiftaj 4 bita u desno 00050 wait(0.000040f); 00051 e_pin = 0; 00052 wait(0.000040f); 00053 e_pin = 1; 00054 Lcd_pins = value; 00055 wait(0.000040f); 00056 e_pin = 0; 00057 wait(0.000040f); 00058 e_pin = 1; 00059 } 00060 00061 ///////////////////////////////////////////////////////////////////////////////////////////////////////// 00062 /////////////////////////////////////////////Pojava prepreka///////////////////////////////////////////// 00063 ///////////////////////////////////////////////////////////////////////////////////////////////////////// 00064 00065 void prepreka(void){ 00066 00067 00068 00069 tempRed = red; //pospremi aktualnu vrijednost reda u temp(radi manipulacije likom) 00070 red = 1; //prebaci se u donji red 00071 00072 ///////////////punjenje donjeg reda///////////////// 00073 lcd.locate(stupac+1,red); //lociraj se na sljedeći stupac 00074 lcd.putc(2); //obriši znak/ stavi prazan char 00075 lcd.locate(stupac,red); //lociraj se na sljedeći stupac 00076 lcd.putc(3); //stavi char neprijatelja 00077 00078 00079 00080 00081 red = tempRed; //radi povratka u main vrati staru vrijednost reda 00082 stupac = stupac--; //umanji vrijednost stupca za 1 00083 00084 if(stupac == 0 && posBit == false){ //ako je neprijatelj na poziciji i lik je gore = (udarac u lika) 00085 00086 rezultat = timer1.read_ms()/1000; // pročitaj vrijednost timera i spremi kao rez 00087 lcd.cls(); // briši ekran 00088 lcd.locate(3,0); // postavi kursor 00089 lcd.printf("Game over!"); // poruka 00090 lcd.locate(3,1); // kursor novi red 00091 lcd.printf("Rezultat:%i", rezultat); // poruka 00092 00093 00094 wait(2); // pričekaj da se poruka stigne pročitati 00095 00096 if(rezultat > highScore){ // ako je trenutni rez veći od rekorda spremi ga kao novi rekord 00097 highScore = rezultat; 00098 upis(highScore); 00099 lcd.cls(); 00100 00101 00102 lcd.locate(0,0); // postavi kursor 00103 lcd.printf("Novi highscore!!"); // ispiši novi rekord 00104 lcd.locate(6,1); 00105 lcd.printf("%i",highScore); 00106 wait(2); // pričekaj da se poruka stigne pročitati 00107 00108 } 00109 00110 rezultat = 0; // poništi trenutni rezultat 00111 gameOver = true; // aktiviraj gameover flag 00112 00113 igra(); // skoči u funkciju igra i kreni ispočetka 00114 00115 00116 } 00117 00118 //////////////////////////////////////////////////////////////////////////////////////// 00119 ///////////////brisanje zaostalih znakova/////////////////////////////////////////////// 00120 //////////////////////////////////////////////////////////////////////////////////////// 00121 00122 if(stupac < 0){ //ako je kursor došao na prvo mjesto(0) 00123 00124 lcd.locate(0,1); //lociraj se na sljedeći stupac 00125 lcd.putc(2); 00126 lcd.locate(4,0); //lociraj se na sljedeći stupac 00127 lcd.putc(2); 00128 stupac = 15; //vrati ga natrag na početak 00129 00130 00131 } 00132 00133 } 00134 00135 //////////////////////////////////////////////////////////////////////////////////////// 00136 /////////////////////////////////////////////Funkcija igre////////////////////////////// 00137 //////////////////////////////////////////////////////////////////////////////////////// 00138 00139 void igra(void){ 00140 00141 00142 lcd.cls(); 00143 wait(0.010); 00144 lcd.locate(1,0); // postavi kursor 00145 lcd.printf("Pritisni tipku"); // ispiši poruku 00146 lcd.locate(4,1); 00147 lcd.printf("za start"); 00148 00149 while(tipka != 1){ // ne radi ništa dok se ne pritisne tipka za start 00150 } 00151 00152 lcd.cls(); 00153 wait(0.010); 00154 gameOver = false; // resetiraj gameover flag 00155 00156 timer1.reset(); // resetiraj timer za rezultat 00157 timer1.start(); // ponovo ga pokreni 00158 00159 while(gameOver == false){ // vrti petlju dok god nije kraj igre 00160 00161 //////////////////////////////////////////////////////////////////////////////////////// 00162 ///////////////////////////////Animacija lika/////////////////////////////////////////// 00163 //////////////////////////////////////////////////////////////////////////////////////// 00164 lcd.locate(1,red); 00165 lcd.putc(0); 00166 wait(brzinaLika); 00167 lcd.locate(1,red); 00168 lcd.putc(1); 00169 wait(brzinaLika); 00170 00171 //////////////////////////////////////////////////////////////////////////////////////// 00172 //////////////////////////////Manipulacija likom//////////////////////////////////////// 00173 //////////////////////////////////////////////////////////////////////////////////////// 00174 00175 if(tipka == 1){ //ako je pritisnuta tipka 00176 lcd.locate(1,red); //zadrži lokaciju na liku 00177 lcd.putc(2); //obriši ga (upiši prazan char) 00178 red = 0; //skoči u gornji red 00179 posBit = true; //aktiviraj flag za poziciju 00180 } 00181 00182 if(tipka != 1 && posBit == true){ //ako tipka više nije aktivna, a posBit je (bio je u gornjem redu) 00183 lcd.locate(1,red); //zadrži lokaciju na liku 00184 lcd.putc(2); //obriši ga (upiši prazan char) 00185 posBit = false; //resetiraj posbit 00186 red = 1; //vrati lika u donji red 00187 } 00188 00189 //////////////////////////////////////////////////////////////////////////////////////// 00190 ////////////////////Poziv funkcije za pojavu prepreka/////////////////////////////////// 00191 //////////////////////////////////////////////////////////////////////////////////////// 00192 00193 prepreka(); 00194 00195 00196 00197 00198 } 00199 00200 } 00201 00202 //////////////////////////////////////////////////////////////////////////////////////// 00203 /////////////////////////////////Main funkcija////////////////////////////////////////// 00204 //////////////////////////////////////////////////////////////////////////////////////// 00205 00206 int main() { 00207 00208 highScore = citaj(); // pročitaj aktualni rekord iz log.txt i spremi u varijablu 00209 lcd.cls(); 00210 lcd.locate(2,0); // postavi kursor 00211 lcd.printf("Ucitavanje.."); 00212 wait(2); 00213 lcd.cls(); 00214 lcd.locate(2,0); 00215 lcd.printf("Highscore:%d", highScore); // ispiši highscore 00216 wait(2); 00217 00218 00219 //////////////////////////////////////////////////////////////////////////////////////// 00220 /////////////////////////////Upis custom charactera u mem lcd-a///////////////////////// 00221 //////////////////////////////////////////////////////////////////////////////////////// 00222 00223 for (int j=0; j<8; j++) { 00224 00225 rs_pin = 0; // slanje komande 00226 00227 00228 writePort(0x40+8*j); // 0x40 je početna adresa, za svaki char je potrebno 8 mem lokacija 00229 00230 00231 00232 rs_pin = 1; // slanje charova 00233 00234 00235 for (int i=0; i<8; i++) { 00236 writePort(custom_char[j][i]); 00237 } 00238 } 00239 00240 00241 00242 lcd.cls(); 00243 wait(0.010); 00244 00245 00246 lcd.locate(0,1); 00247 00248 igra(); // skoči u funkciju igre 00249 00250 00251 00252 }
Generated on Thu Jul 14 2022 14:13:35 by
1.7.2