Igrica Marko Spremic 2020/0066
Dependencies: mbed Adafruit_GFX
main.cpp
00001 /* 00002 *Marko Spremic 2020/0066 00003 *Igrica domaci iz pima 00004 * Pravila igre: 00005 *Pomocu potenciometara se krece tackica po ekranu. Cilj je da tackica skuplja "vockice" ( vece tackice po enranu). 00006 *Pritiskom na taster sw1 igra se zavrsava i prikazuje se rezultat na led displeju. Da bi se ponovo pokrenula igrica potrebno je opet kliknuti taster sw1. 00007 *Pritiskom na taster sw2 generise se nova vockica na ekranu. 00008 **/ 00009 #include "mbed.h" 00010 #include "Adafruit_GFX.h" 00011 #include "Adafruit_GFX_Config.h" 00012 #include "Adafruit_SSD1306.h" 00013 00014 00015 //I2C bus: 00016 #define SCL PB_13 00017 #define SDA PB_14 00018 00019 //I2C address: 00020 #define I2C_ADDRESS 0x3c 00021 #define I2C_ADD_MBED I2C_ADDRESS<<1 00022 #define I2C_freq 400000 00023 00024 //oled dimensions: 00025 #define OLED_HEIGHT_PX 64 00026 #define OLED_WIDTH_PX 128 00027 00028 //definisanje glavnih promenljivih 00029 BusOut led_dis(PA_10, PA_9, PA_8, PB_10, PB_5, PB_4, PB_3, PA_2); 00030 DigitalOut SEL2(PC_7); 00031 DigitalOut SEL1(PB_6); 00032 InterruptIn sw1(PC_9); 00033 InterruptIn sw2(PC_8); 00034 AnalogIn pot1(PA_0); 00035 AnalogIn pot2(PA_1); 00036 I2C i2c_obj(SDA, SCL); 00037 Adafruit_SSD1306_I2c myOLED(i2c_obj, PB_5, I2C_ADD_MBED, OLED_HEIGHT_PX, OLED_WIDTH_PX); 00038 //funkcija za generisanje random broja 00039 int random(int lower, int upper) 00040 { 00041 00042 return (rand() % (upper - lower + 1)) + lower; 00043 } 00044 //definisanje funkcija 00045 void error(); 00046 void write_num(int broj); 00047 void end_game(); 00048 int x, y, x_obj, y_obj; char endgame = 0; 00049 00050 //glavna funkcija 00051 int main() 00052 { 00053 sw2.fall(&error); 00054 sw1.fall(&end_game); 00055 myOLED.begin(); 00056 i2c_obj.frequency(I2C_freq); 00057 myOLED.clearDisplay(); 00058 myOLED.display(); 00059 unsigned char count = 0; 00060 srand(time(0)); 00061 x = 0, y = 0, x_obj = random(0, 127) , y_obj = random(0, 63); char check = 0, d1 = 0, d2 = 0; 00062 while(1) 00063 { 00064 //dok traje igra 00065 if(!endgame) 00066 { 00067 SEL2.write(1); 00068 SEL1.write(1); 00069 x = pot1 * 128; y = pot2 * 64; 00070 myOLED.clearDisplay(); 00071 myOLED.fillRect(x, y, 2, 2, WHITE); 00072 myOLED.fillRect(x_obj, y_obj, 4, 4, WHITE); 00073 for(int i = 0; i < 4; i++) 00074 for(int j = 0; j < 4; j++) 00075 if( x == x_obj+i && y == y_obj+j) 00076 { 00077 check = 1; 00078 break; 00079 } 00080 myOLED.display(); 00081 if(check) 00082 { 00083 x_obj = random(0, 127) , y_obj = random(0, 63); 00084 myOLED.display(); 00085 count++; 00086 d1 = count/10; d2 = count%10; 00087 d1 = (d1 == 0)? -1: d1; 00088 check = 0; 00089 } 00090 } 00091 //prikazivanje prednosti u toku pauze izmedju dve igre 00092 else 00093 { 00094 SEL2.write(1); 00095 SEL1.write(0); 00096 write_num(d1); 00097 wait_ms(8); 00098 00099 SEL2.write(0); 00100 SEL1.write(1); 00101 write_num(d2); 00102 wait_ms(8); 00103 count = 0; 00104 } 00105 } 00106 00107 } 00108 //generisanje nove vockice 00109 void error() 00110 { 00111 x_obj = random(0, 127) , y_obj = random(0, 63); 00112 } 00113 //ispisivanje vrednosti na led displeju 00114 void write_num(int broj) 00115 { 00116 switch(broj) 00117 { 00118 case 0: led_dis = 0xC0; break; 00119 case 1: led_dis = 0xF9; break; 00120 case 2: led_dis = 0xA4; break; 00121 case 3: led_dis = 0xB0; break; 00122 case 4: led_dis = 0x99; break; 00123 case 5: led_dis = 0x92; break; 00124 case 6: led_dis = 0x82; break; 00125 case 7: led_dis = 0xF8; break; 00126 case 8: led_dis = 0x80; break; 00127 case 9: led_dis = 0x90; break; 00128 default: led_dis = 0xFF; 00129 } 00130 } 00131 //zavrsavanje igrice 00132 void end_game() 00133 { 00134 endgame++; 00135 endgame = (endgame > 1) ? 0 : endgame; 00136 }
Generated on Sat Aug 27 2022 09:22:02 by
1.7.2