Rocket threading between missiles game, using touch keypad, audio amp, sd card, ulcd, ulcd sd graphics
Dependencies: 4DGL-uLCD-SE MPR121_Demo SDFileSystem mbed-rtos mbed wave_player
main.cpp@1:def75d5dff9d, 2016-11-01 (annotated)
- Committer:
- atran43
- Date:
- Tue Nov 01 22:16:50 2016 +0000
- Revision:
- 1:def75d5dff9d
- Parent:
- 0:d3ee0d224bca
version1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
atran43 | 0:d3ee0d224bca | 1 | #include "mbed.h" |
atran43 | 0:d3ee0d224bca | 2 | #include "rtos.h" |
atran43 | 0:d3ee0d224bca | 3 | #include "SDFileSystem.h" |
atran43 | 0:d3ee0d224bca | 4 | #include "wave_player.h" |
atran43 | 0:d3ee0d224bca | 5 | #include "uLCD_4DGL.h" |
atran43 | 0:d3ee0d224bca | 6 | #include "mpr121.h" |
atran43 | 0:d3ee0d224bca | 7 | |
atran43 | 0:d3ee0d224bca | 8 | Mutex lcd_mutex; |
atran43 | 0:d3ee0d224bca | 9 | |
atran43 | 0:d3ee0d224bca | 10 | uLCD_4DGL uLCD(p9, p10, p12); // uLCD-144-G2 screen, (serial tx, serial rx, reset pin) |
atran43 | 0:d3ee0d224bca | 11 | int currentShipX; |
atran43 | 0:d3ee0d224bca | 12 | float x; |
atran43 | 0:d3ee0d224bca | 13 | AnalogOut DACout(p18); |
atran43 | 0:d3ee0d224bca | 14 | wave_player waver(&DACout); |
atran43 | 0:d3ee0d224bca | 15 | |
atran43 | 0:d3ee0d224bca | 16 | |
atran43 | 0:d3ee0d224bca | 17 | //8 missiles |
atran43 | 0:d3ee0d224bca | 18 | int missile0 [1][2]; // 1 row 2 col |
atran43 | 0:d3ee0d224bca | 19 | int missile1 [1][2]; |
atran43 | 0:d3ee0d224bca | 20 | int missile2 [1][2]; |
atran43 | 0:d3ee0d224bca | 21 | int missile3 [1][2]; |
atran43 | 0:d3ee0d224bca | 22 | |
atran43 | 0:d3ee0d224bca | 23 | SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card |
atran43 | 0:d3ee0d224bca | 24 | |
atran43 | 0:d3ee0d224bca | 25 | // Create the interrupt receiver object on pin 26 |
atran43 | 0:d3ee0d224bca | 26 | InterruptIn interrupt(p26); |
atran43 | 0:d3ee0d224bca | 27 | // Setup the i2c bus on pins 9 and 10 |
atran43 | 0:d3ee0d224bca | 28 | I2C i2c(p28, p27); |
atran43 | 0:d3ee0d224bca | 29 | // Setup the Mpr121: |
atran43 | 0:d3ee0d224bca | 30 | // constructor(i2c object, i2c address of the mpr121) |
atran43 | 0:d3ee0d224bca | 31 | Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); |
atran43 | 0:d3ee0d224bca | 32 | |
atran43 | 0:d3ee0d224bca | 33 | void fallInterrupt(); |
atran43 | 0:d3ee0d224bca | 34 | void gameover(); |
atran43 | 0:d3ee0d224bca | 35 | void moveShip(void const *args); |
atran43 | 0:d3ee0d224bca | 36 | void moveMissile0(void const *args); |
atran43 | 0:d3ee0d224bca | 37 | //void sd_sound(void const *args); |
atran43 | 0:d3ee0d224bca | 38 | int getRandNum(); |
atran43 | 0:d3ee0d224bca | 39 | |
atran43 | 0:d3ee0d224bca | 40 | void moveShip(void const *args){ |
atran43 | 0:d3ee0d224bca | 41 | |
atran43 | 0:d3ee0d224bca | 42 | currentShipX = 64; |
atran43 | 0:d3ee0d224bca | 43 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 44 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 45 | uLCD.set_sector_address(0x0040, 0x4083); |
atran43 | 0:d3ee0d224bca | 46 | uLCD.display_image(currentShipX, 112); |
atran43 | 0:d3ee0d224bca | 47 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 48 | |
atran43 | 0:d3ee0d224bca | 49 | while(1) { |
atran43 | 0:d3ee0d224bca | 50 | |
atran43 | 0:d3ee0d224bca | 51 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 52 | uLCD.filled_rectangle(currentShipX - 16, 112 , currentShipX , 128 ,WHITE); |
atran43 | 0:d3ee0d224bca | 53 | uLCD.filled_rectangle(currentShipX + 16, 112 ,currentShipX + 32 , 128 ,WHITE); |
atran43 | 0:d3ee0d224bca | 54 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 55 | uLCD.set_sector_address(0x0040, 0x4083); |
atran43 | 0:d3ee0d224bca | 56 | uLCD.display_image(currentShipX, 112); |
atran43 | 0:d3ee0d224bca | 57 | uLCD.filled_rectangle(currentShipX - 16, 112 , currentShipX , 128 ,WHITE); |
atran43 | 0:d3ee0d224bca | 58 | uLCD.filled_rectangle(currentShipX + 16, 112 ,currentShipX + 32 , 128 ,WHITE); |
atran43 | 0:d3ee0d224bca | 59 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 60 | |
atran43 | 0:d3ee0d224bca | 61 | } |
atran43 | 0:d3ee0d224bca | 62 | |
atran43 | 0:d3ee0d224bca | 63 | |
atran43 | 0:d3ee0d224bca | 64 | } |
atran43 | 0:d3ee0d224bca | 65 | |
atran43 | 0:d3ee0d224bca | 66 | //Move Missile 0 |
atran43 | 0:d3ee0d224bca | 67 | void moveMissile0(void const *args) { |
atran43 | 0:d3ee0d224bca | 68 | Thread::wait(1000); |
atran43 | 0:d3ee0d224bca | 69 | |
atran43 | 0:d3ee0d224bca | 70 | missile0[0][0] = getRandNum(); //x coordinate |
atran43 | 0:d3ee0d224bca | 71 | missile0[0][1] = 0; //y coordinate |
atran43 | 0:d3ee0d224bca | 72 | |
atran43 | 0:d3ee0d224bca | 73 | //draw Missile |
atran43 | 0:d3ee0d224bca | 74 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 75 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 76 | uLCD.set_sector_address(0x0040, 0x4081); |
atran43 | 0:d3ee0d224bca | 77 | uLCD.display_image(missile0[0][0], missile0[0][1]); |
atran43 | 0:d3ee0d224bca | 78 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 79 | |
atran43 | 0:d3ee0d224bca | 80 | while(1) { |
atran43 | 0:d3ee0d224bca | 81 | |
atran43 | 0:d3ee0d224bca | 82 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 83 | uLCD.filled_rectangle(missile0[0][0], missile0[0][1] ,missile0[0][0]+16 , missile0[0][1]+16 ,WHITE); |
atran43 | 0:d3ee0d224bca | 84 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 85 | uLCD.set_sector_address(0x0040, 0x4081); |
atran43 | 0:d3ee0d224bca | 86 | //Reset missile |
atran43 | 0:d3ee0d224bca | 87 | if (missile0[0][1] == 112) { |
atran43 | 0:d3ee0d224bca | 88 | missile0[0][1] = -16; |
atran43 | 0:d3ee0d224bca | 89 | missile0[0][0] = getRandNum(); |
atran43 | 0:d3ee0d224bca | 90 | } |
atran43 | 0:d3ee0d224bca | 91 | uLCD.display_image(missile0[0][0], missile0[0][1]+16);//Move missile down |
atran43 | 0:d3ee0d224bca | 92 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 93 | missile0[0][1] = missile0[0][1]+16;//Update new y value |
atran43 | 0:d3ee0d224bca | 94 | |
atran43 | 0:d3ee0d224bca | 95 | } |
atran43 | 0:d3ee0d224bca | 96 | |
atran43 | 0:d3ee0d224bca | 97 | } |
atran43 | 0:d3ee0d224bca | 98 | |
atran43 | 0:d3ee0d224bca | 99 | //Move Missile 1 |
atran43 | 0:d3ee0d224bca | 100 | void moveMissile1(void const *args) { |
atran43 | 0:d3ee0d224bca | 101 | Thread::wait(2000); |
atran43 | 0:d3ee0d224bca | 102 | |
atran43 | 0:d3ee0d224bca | 103 | missile1[0][0] = getRandNum(); //x coordinate |
atran43 | 0:d3ee0d224bca | 104 | missile1[0][1] = 0; //y coordinate |
atran43 | 0:d3ee0d224bca | 105 | |
atran43 | 0:d3ee0d224bca | 106 | //draw Missile |
atran43 | 0:d3ee0d224bca | 107 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 108 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 109 | uLCD.set_sector_address(0x0040, 0x4081); |
atran43 | 0:d3ee0d224bca | 110 | uLCD.display_image(missile1[0][0], missile1[0][1]); |
atran43 | 0:d3ee0d224bca | 111 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 112 | |
atran43 | 0:d3ee0d224bca | 113 | while(1) { |
atran43 | 0:d3ee0d224bca | 114 | |
atran43 | 0:d3ee0d224bca | 115 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 116 | uLCD.filled_rectangle(missile1[0][0], missile1[0][1] ,missile1[0][0]+16 , missile1[0][1]+16 ,WHITE); |
atran43 | 0:d3ee0d224bca | 117 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 118 | uLCD.set_sector_address(0x0040, 0x4081); |
atran43 | 0:d3ee0d224bca | 119 | //Reset missile |
atran43 | 0:d3ee0d224bca | 120 | if (missile1[0][1] == 112) { |
atran43 | 0:d3ee0d224bca | 121 | missile1[0][1] = -16; |
atran43 | 0:d3ee0d224bca | 122 | missile1[0][0] = getRandNum(); |
atran43 | 0:d3ee0d224bca | 123 | } |
atran43 | 0:d3ee0d224bca | 124 | uLCD.display_image(missile1[0][0], missile1[0][1]+16);//Move missile down |
atran43 | 0:d3ee0d224bca | 125 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 126 | missile1[0][1] = missile1[0][1]+16;//Update new y value |
atran43 | 0:d3ee0d224bca | 127 | |
atran43 | 0:d3ee0d224bca | 128 | } |
atran43 | 0:d3ee0d224bca | 129 | |
atran43 | 0:d3ee0d224bca | 130 | } |
atran43 | 0:d3ee0d224bca | 131 | |
atran43 | 0:d3ee0d224bca | 132 | //Move Missile 2 |
atran43 | 0:d3ee0d224bca | 133 | void moveMissile2(void const *args) { |
atran43 | 0:d3ee0d224bca | 134 | Thread::wait(3000); |
atran43 | 0:d3ee0d224bca | 135 | |
atran43 | 0:d3ee0d224bca | 136 | missile2[0][0] = getRandNum(); //x coordinate |
atran43 | 0:d3ee0d224bca | 137 | missile2[0][1] = 0; //y coordinate |
atran43 | 0:d3ee0d224bca | 138 | |
atran43 | 0:d3ee0d224bca | 139 | //draw Missile |
atran43 | 0:d3ee0d224bca | 140 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 141 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 142 | uLCD.set_sector_address(0x0040, 0x4081); |
atran43 | 0:d3ee0d224bca | 143 | uLCD.display_image(missile2[0][0], missile2[0][1]); |
atran43 | 0:d3ee0d224bca | 144 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 145 | |
atran43 | 0:d3ee0d224bca | 146 | while(1) { |
atran43 | 0:d3ee0d224bca | 147 | |
atran43 | 0:d3ee0d224bca | 148 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 149 | uLCD.filled_rectangle(missile2[0][0], missile2[0][1] ,missile2[0][0]+16 , missile2[0][1]+16 ,WHITE); |
atran43 | 0:d3ee0d224bca | 150 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 151 | uLCD.set_sector_address(0x0040, 0x4081); |
atran43 | 0:d3ee0d224bca | 152 | //Reset missile |
atran43 | 0:d3ee0d224bca | 153 | if (missile2[0][1] == 112) { |
atran43 | 0:d3ee0d224bca | 154 | missile2[0][1] = -16; |
atran43 | 0:d3ee0d224bca | 155 | missile2[0][0] = getRandNum(); |
atran43 | 0:d3ee0d224bca | 156 | } |
atran43 | 0:d3ee0d224bca | 157 | uLCD.display_image(missile2[0][0], missile2[0][1]+16);//Move missile down |
atran43 | 0:d3ee0d224bca | 158 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 159 | missile2[0][1] = missile2[0][1]+16;//Update new y value |
atran43 | 0:d3ee0d224bca | 160 | |
atran43 | 0:d3ee0d224bca | 161 | } |
atran43 | 0:d3ee0d224bca | 162 | |
atran43 | 0:d3ee0d224bca | 163 | } |
atran43 | 0:d3ee0d224bca | 164 | |
atran43 | 0:d3ee0d224bca | 165 | //Move Missile 3 |
atran43 | 0:d3ee0d224bca | 166 | void moveMissile3(void const *args) { |
atran43 | 0:d3ee0d224bca | 167 | Thread::wait(4000); |
atran43 | 0:d3ee0d224bca | 168 | |
atran43 | 0:d3ee0d224bca | 169 | missile3[0][0] = getRandNum(); //x coordinate |
atran43 | 0:d3ee0d224bca | 170 | missile3[0][1] = 0; //y coordinate |
atran43 | 0:d3ee0d224bca | 171 | |
atran43 | 0:d3ee0d224bca | 172 | //draw Missile |
atran43 | 0:d3ee0d224bca | 173 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 174 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 175 | uLCD.set_sector_address(0x0040, 0x4081); |
atran43 | 0:d3ee0d224bca | 176 | uLCD.display_image(missile3[0][0], missile3[0][1]); |
atran43 | 0:d3ee0d224bca | 177 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 178 | |
atran43 | 0:d3ee0d224bca | 179 | while(1) { |
atran43 | 0:d3ee0d224bca | 180 | |
atran43 | 0:d3ee0d224bca | 181 | lcd_mutex.lock(); |
atran43 | 0:d3ee0d224bca | 182 | uLCD.filled_rectangle(missile3[0][0], missile3[0][1] ,missile3[0][0]+16 , missile3[0][1]+16 ,WHITE); |
atran43 | 0:d3ee0d224bca | 183 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 184 | uLCD.set_sector_address(0x0040, 0x4081); |
atran43 | 0:d3ee0d224bca | 185 | //Reset missile |
atran43 | 0:d3ee0d224bca | 186 | if (missile3[0][1] == 112) { |
atran43 | 0:d3ee0d224bca | 187 | missile3[0][1] = -16; |
atran43 | 0:d3ee0d224bca | 188 | missile3[0][0] = getRandNum(); |
atran43 | 0:d3ee0d224bca | 189 | } |
atran43 | 0:d3ee0d224bca | 190 | uLCD.display_image(missile3[0][0], missile3[0][1]+16);//Move missile down |
atran43 | 0:d3ee0d224bca | 191 | lcd_mutex.unlock(); |
atran43 | 0:d3ee0d224bca | 192 | missile3[0][1] = missile3[0][1]+16;//Update new y value |
atran43 | 0:d3ee0d224bca | 193 | |
atran43 | 0:d3ee0d224bca | 194 | } |
atran43 | 0:d3ee0d224bca | 195 | |
atran43 | 0:d3ee0d224bca | 196 | } |
atran43 | 0:d3ee0d224bca | 197 | |
atran43 | 0:d3ee0d224bca | 198 | |
atran43 | 0:d3ee0d224bca | 199 | // Key hit/release interrupt routine |
atran43 | 0:d3ee0d224bca | 200 | void fallInterrupt() { |
atran43 | 0:d3ee0d224bca | 201 | int key_code=0; |
atran43 | 0:d3ee0d224bca | 202 | int i=0; |
atran43 | 0:d3ee0d224bca | 203 | int value=mpr121.read(0x00); |
atran43 | 0:d3ee0d224bca | 204 | value +=mpr121.read(0x01)<<8; |
atran43 | 0:d3ee0d224bca | 205 | // LED demo mod |
atran43 | 0:d3ee0d224bca | 206 | i=0; |
atran43 | 0:d3ee0d224bca | 207 | // puts key number out to LEDs for demo |
atran43 | 0:d3ee0d224bca | 208 | for (i=0; i<12; i++) { |
atran43 | 0:d3ee0d224bca | 209 | if (((value>>i)&0x01)==1) key_code=i+1; |
atran43 | 0:d3ee0d224bca | 210 | } |
atran43 | 0:d3ee0d224bca | 211 | |
atran43 | 0:d3ee0d224bca | 212 | if (key_code == 0x4 && currentShipX != 16) { |
atran43 | 0:d3ee0d224bca | 213 | currentShipX = currentShipX - 16; |
atran43 | 0:d3ee0d224bca | 214 | } |
atran43 | 0:d3ee0d224bca | 215 | if (key_code == 0x3 && currentShipX != 96) { |
atran43 | 0:d3ee0d224bca | 216 | currentShipX = currentShipX + 16; |
atran43 | 0:d3ee0d224bca | 217 | } |
atran43 | 0:d3ee0d224bca | 218 | } |
atran43 | 0:d3ee0d224bca | 219 | |
atran43 | 0:d3ee0d224bca | 220 | inline float random_number() |
atran43 | 0:d3ee0d224bca | 221 | { |
atran43 | 0:d3ee0d224bca | 222 | return (rand()/(float(RAND_MAX))); |
atran43 | 0:d3ee0d224bca | 223 | } |
atran43 | 0:d3ee0d224bca | 224 | |
atran43 | 0:d3ee0d224bca | 225 | int getRandNum() { |
atran43 | 0:d3ee0d224bca | 226 | |
atran43 | 0:d3ee0d224bca | 227 | x = random_number(); |
atran43 | 0:d3ee0d224bca | 228 | x = x * 6; |
atran43 | 0:d3ee0d224bca | 229 | x = x+1; |
atran43 | 0:d3ee0d224bca | 230 | |
atran43 | 0:d3ee0d224bca | 231 | return (((int)x) * 16); |
atran43 | 0:d3ee0d224bca | 232 | |
atran43 | 0:d3ee0d224bca | 233 | } |
atran43 | 0:d3ee0d224bca | 234 | |
atran43 | 0:d3ee0d224bca | 235 | |
atran43 | 0:d3ee0d224bca | 236 | void gameover() { |
atran43 | 0:d3ee0d224bca | 237 | |
atran43 | 0:d3ee0d224bca | 238 | uLCD.background_color(WHITE); |
atran43 | 0:d3ee0d224bca | 239 | uLCD.cls(); |
atran43 | 0:d3ee0d224bca | 240 | uLCD.background_color(WHITE); |
atran43 | 0:d3ee0d224bca | 241 | uLCD.textbackground_color(WHITE); |
atran43 | 0:d3ee0d224bca | 242 | |
atran43 | 0:d3ee0d224bca | 243 | uLCD.media_init(); |
atran43 | 0:d3ee0d224bca | 244 | uLCD.set_sector_address(0x0040, 0x4089); |
atran43 | 0:d3ee0d224bca | 245 | uLCD.display_video(0, 0); |
atran43 | 0:d3ee0d224bca | 246 | |
atran43 | 0:d3ee0d224bca | 247 | uLCD.background_color(WHITE); |
atran43 | 0:d3ee0d224bca | 248 | uLCD.cls(); |
atran43 | 0:d3ee0d224bca | 249 | uLCD.background_color(WHITE); |
atran43 | 0:d3ee0d224bca | 250 | uLCD.textbackground_color(WHITE); |
atran43 | 0:d3ee0d224bca | 251 | |
atran43 | 0:d3ee0d224bca | 252 | uLCD.printf("Gameover"); |
atran43 | 0:d3ee0d224bca | 253 | FILE *wave_file; |
atran43 | 0:d3ee0d224bca | 254 | wave_file=fopen("/sd/gameover.wav","r"); |
atran43 | 0:d3ee0d224bca | 255 | waver.play(wave_file); |
atran43 | 0:d3ee0d224bca | 256 | fclose(wave_file); |
atran43 | 0:d3ee0d224bca | 257 | } |
atran43 | 0:d3ee0d224bca | 258 | |
atran43 | 0:d3ee0d224bca | 259 | int main() { |
atran43 | 0:d3ee0d224bca | 260 | |
atran43 | 0:d3ee0d224bca | 261 | interrupt.fall(&fallInterrupt); |
atran43 | 0:d3ee0d224bca | 262 | interrupt.mode(PullUp); |
atran43 | 0:d3ee0d224bca | 263 | |
atran43 | 0:d3ee0d224bca | 264 | uLCD.baudrate(3000000); |
atran43 | 0:d3ee0d224bca | 265 | |
atran43 | 0:d3ee0d224bca | 266 | uLCD.background_color(WHITE); |
atran43 | 0:d3ee0d224bca | 267 | uLCD.cls(); |
atran43 | 0:d3ee0d224bca | 268 | uLCD.background_color(WHITE); |
atran43 | 0:d3ee0d224bca | 269 | uLCD.textbackground_color(WHITE); |
atran43 | 0:d3ee0d224bca | 270 | |
atran43 | 0:d3ee0d224bca | 271 | Thread thread0(moveShip); |
atran43 | 0:d3ee0d224bca | 272 | Thread thread1(moveMissile0); |
atran43 | 0:d3ee0d224bca | 273 | Thread thread2(moveMissile1); |
atran43 | 0:d3ee0d224bca | 274 | Thread thread3(moveMissile2); |
atran43 | 0:d3ee0d224bca | 275 | Thread thread4(moveMissile3); |
atran43 | 0:d3ee0d224bca | 276 | bool keepGoing = true; |
atran43 | 0:d3ee0d224bca | 277 | |
atran43 | 0:d3ee0d224bca | 278 | |
atran43 | 0:d3ee0d224bca | 279 | while(1) { |
atran43 | 0:d3ee0d224bca | 280 | |
atran43 | 0:d3ee0d224bca | 281 | if (((currentShipX == missile0[0][0] && missile0[0][1] == 112)|| |
atran43 | 0:d3ee0d224bca | 282 | (currentShipX == missile1[0][0] && missile1[0][1]== 112) || |
atran43 | 0:d3ee0d224bca | 283 | (currentShipX == missile2[0][0] && missile2[0][1]== 112) || |
atran43 | 0:d3ee0d224bca | 284 | (currentShipX == missile3[0][0] && missile3[0][1]== 112)) && |
atran43 | 0:d3ee0d224bca | 285 | keepGoing) { |
atran43 | 0:d3ee0d224bca | 286 | keepGoing = false; |
atran43 | 0:d3ee0d224bca | 287 | thread0.terminate(); |
atran43 | 0:d3ee0d224bca | 288 | thread1.terminate(); |
atran43 | 0:d3ee0d224bca | 289 | thread2.terminate(); |
atran43 | 0:d3ee0d224bca | 290 | thread3.terminate(); |
atran43 | 0:d3ee0d224bca | 291 | thread4.terminate(); |
atran43 | 0:d3ee0d224bca | 292 | gameover(); |
atran43 | 0:d3ee0d224bca | 293 | } |
atran43 | 0:d3ee0d224bca | 294 | |
atran43 | 0:d3ee0d224bca | 295 | } |
atran43 | 0:d3ee0d224bca | 296 | } |