A implementation of a simple bomberman game
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player
Fork of rtos_basic by
main.cpp@7:12f7fd2b1a13, 2016-10-31 (annotated)
- Committer:
- apcastelein
- Date:
- Mon Oct 31 19:33:11 2016 +0000
- Revision:
- 7:12f7fd2b1a13
- Parent:
- 3:c92e21f305d8
Published bomberman game;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emilmont | 1:491820ee784d | 1 | #include "mbed.h" |
apcastelein | 7:12f7fd2b1a13 | 2 | #include "SDFileSystem.h" |
apcastelein | 7:12f7fd2b1a13 | 3 | #include "wave_player.h" |
apcastelein | 7:12f7fd2b1a13 | 4 | #include "myBMP.h" |
apcastelein | 7:12f7fd2b1a13 | 5 | #include <string> |
apcastelein | 7:12f7fd2b1a13 | 6 | #include "navSwitch.h" |
apcastelein | 7:12f7fd2b1a13 | 7 | #include <mpr121.h> |
emilmont | 1:491820ee784d | 8 | #include "rtos.h" |
apcastelein | 7:12f7fd2b1a13 | 9 | |
apcastelein | 7:12f7fd2b1a13 | 10 | float gameTime = 0.0; |
apcastelein | 7:12f7fd2b1a13 | 11 | |
apcastelein | 7:12f7fd2b1a13 | 12 | string startText = "Loading"; |
apcastelein | 7:12f7fd2b1a13 | 13 | |
apcastelein | 7:12f7fd2b1a13 | 14 | bool gameRestart = false; |
apcastelein | 7:12f7fd2b1a13 | 15 | |
apcastelein | 7:12f7fd2b1a13 | 16 | SDFileSystem sd(p11, p12, p13, p16, "sd"); //SD card |
apcastelein | 7:12f7fd2b1a13 | 17 | |
apcastelein | 7:12f7fd2b1a13 | 18 | AnalogOut DACout(p18); |
apcastelein | 7:12f7fd2b1a13 | 19 | |
apcastelein | 7:12f7fd2b1a13 | 20 | wave_player waver(&DACout); |
apcastelein | 7:12f7fd2b1a13 | 21 | |
apcastelein | 7:12f7fd2b1a13 | 22 | uLCD_4DGL uLCD(p28,p27,p30); |
apcastelein | 7:12f7fd2b1a13 | 23 | |
apcastelein | 7:12f7fd2b1a13 | 24 | int BACK = 0x2E0059; |
apcastelein | 7:12f7fd2b1a13 | 25 | |
apcastelein | 7:12f7fd2b1a13 | 26 | char grid[7][7]; |
apcastelein | 7:12f7fd2b1a13 | 27 | |
apcastelein | 7:12f7fd2b1a13 | 28 | int o_p1I=0, o_p1J=0, o_p2I=6, o_p2J=6; |
apcastelein | 7:12f7fd2b1a13 | 29 | int p1I=0, p1J=0, p2I=6, p2J=6; |
apcastelein | 7:12f7fd2b1a13 | 30 | |
apcastelein | 7:12f7fd2b1a13 | 31 | Nav_Switch myNav( p17, p6, p7, p5, p8); |
apcastelein | 7:12f7fd2b1a13 | 32 | bool navUpPress = false, navLeftPress = false, |
apcastelein | 7:12f7fd2b1a13 | 33 | navRightPress = false, navDownPress = false, navFirePress = false; |
apcastelein | 7:12f7fd2b1a13 | 34 | |
apcastelein | 7:12f7fd2b1a13 | 35 | I2C i2c(p9, p10); |
apcastelein | 7:12f7fd2b1a13 | 36 | Mpr121 pad(&i2c, Mpr121::ADD_VSS); |
apcastelein | 7:12f7fd2b1a13 | 37 | |
apcastelein | 7:12f7fd2b1a13 | 38 | bool padUpPress = false, padLeftPress = false, |
apcastelein | 7:12f7fd2b1a13 | 39 | padRightPress = false, padDownPress = false, padFirePress = false; |
apcastelein | 7:12f7fd2b1a13 | 40 | |
apcastelein | 7:12f7fd2b1a13 | 41 | struct Bomb { |
apcastelein | 7:12f7fd2b1a13 | 42 | float createTime; |
apcastelein | 7:12f7fd2b1a13 | 43 | int playerId; |
apcastelein | 7:12f7fd2b1a13 | 44 | int startI, startJ; |
apcastelein | 7:12f7fd2b1a13 | 45 | int power; |
apcastelein | 7:12f7fd2b1a13 | 46 | int minX, maxX, minY, maxY; |
apcastelein | 7:12f7fd2b1a13 | 47 | bool exploded, soundPlayed; |
apcastelein | 7:12f7fd2b1a13 | 48 | float cookTime, expTime; |
apcastelein | 7:12f7fd2b1a13 | 49 | int decay,color; |
apcastelein | 7:12f7fd2b1a13 | 50 | int o_decay; |
apcastelein | 7:12f7fd2b1a13 | 51 | }; |
apcastelein | 7:12f7fd2b1a13 | 52 | |
apcastelein | 7:12f7fd2b1a13 | 53 | Bomb bombs[10]; |
apcastelein | 7:12f7fd2b1a13 | 54 | int bombIndex=0, numBombs = 0; |
apcastelein | 7:12f7fd2b1a13 | 55 | int bufferSize = 10; |
apcastelein | 7:12f7fd2b1a13 | 56 | |
apcastelein | 7:12f7fd2b1a13 | 57 | int p1Bombs=1, p2Bombs=1; |
apcastelein | 7:12f7fd2b1a13 | 58 | int p1Power=1, p2Power=1; |
apcastelein | 7:12f7fd2b1a13 | 59 | |
apcastelein | 7:12f7fd2b1a13 | 60 | void resetVars(){ |
apcastelein | 7:12f7fd2b1a13 | 61 | gameRestart = false; |
apcastelein | 7:12f7fd2b1a13 | 62 | |
apcastelein | 7:12f7fd2b1a13 | 63 | o_p1I=0; |
apcastelein | 7:12f7fd2b1a13 | 64 | o_p1J=0; |
apcastelein | 7:12f7fd2b1a13 | 65 | o_p2I=6; |
apcastelein | 7:12f7fd2b1a13 | 66 | o_p2J=6; |
apcastelein | 7:12f7fd2b1a13 | 67 | p1I=0; |
apcastelein | 7:12f7fd2b1a13 | 68 | p1J=0; |
apcastelein | 7:12f7fd2b1a13 | 69 | p2I=6; |
apcastelein | 7:12f7fd2b1a13 | 70 | p2J=6; |
apcastelein | 7:12f7fd2b1a13 | 71 | |
apcastelein | 7:12f7fd2b1a13 | 72 | numBombs = 0; |
apcastelein | 7:12f7fd2b1a13 | 73 | bombIndex = 0; |
apcastelein | 7:12f7fd2b1a13 | 74 | |
apcastelein | 7:12f7fd2b1a13 | 75 | p1Bombs = 1; |
apcastelein | 7:12f7fd2b1a13 | 76 | p1Power = 1; |
apcastelein | 7:12f7fd2b1a13 | 77 | p2Bombs = 1; |
apcastelein | 7:12f7fd2b1a13 | 78 | p2Power = 1; |
apcastelein | 7:12f7fd2b1a13 | 79 | } |
apcastelein | 7:12f7fd2b1a13 | 80 | |
apcastelein | 7:12f7fd2b1a13 | 81 | bool outOfBounds(int i, int j){ |
apcastelein | 7:12f7fd2b1a13 | 82 | return i < 0 || i > 6 || j < 0 || j > 6; |
apcastelein | 7:12f7fd2b1a13 | 83 | } |
apcastelein | 7:12f7fd2b1a13 | 84 | |
apcastelein | 7:12f7fd2b1a13 | 85 | bool valid(int i, int j) |
apcastelein | 7:12f7fd2b1a13 | 86 | { |
apcastelein | 7:12f7fd2b1a13 | 87 | if(outOfBounds(i,j)){ |
apcastelein | 7:12f7fd2b1a13 | 88 | return false; |
apcastelein | 7:12f7fd2b1a13 | 89 | } |
apcastelein | 7:12f7fd2b1a13 | 90 | |
apcastelein | 7:12f7fd2b1a13 | 91 | return grid[i][j] != 'b' && grid[i][j] != 's'; |
apcastelein | 7:12f7fd2b1a13 | 92 | } |
apcastelein | 7:12f7fd2b1a13 | 93 | |
apcastelein | 7:12f7fd2b1a13 | 94 | int getX(int j) |
apcastelein | 7:12f7fd2b1a13 | 95 | { |
apcastelein | 7:12f7fd2b1a13 | 96 | return 8+16*j; |
apcastelein | 7:12f7fd2b1a13 | 97 | } |
apcastelein | 7:12f7fd2b1a13 | 98 | |
apcastelein | 7:12f7fd2b1a13 | 99 | int getY(int i) |
apcastelein | 7:12f7fd2b1a13 | 100 | { |
apcastelein | 7:12f7fd2b1a13 | 101 | return 8+16*i; |
apcastelein | 7:12f7fd2b1a13 | 102 | } |
apcastelein | 7:12f7fd2b1a13 | 103 | |
apcastelein | 7:12f7fd2b1a13 | 104 | void createBomb(int pId, int i, int j) |
apcastelein | 7:12f7fd2b1a13 | 105 | { |
apcastelein | 7:12f7fd2b1a13 | 106 | Bomb *b = &bombs[(bombIndex + numBombs)%bufferSize]; |
apcastelein | 7:12f7fd2b1a13 | 107 | numBombs++; |
apcastelein | 7:12f7fd2b1a13 | 108 | |
apcastelein | 7:12f7fd2b1a13 | 109 | b->playerId = pId; |
apcastelein | 7:12f7fd2b1a13 | 110 | b->createTime = gameTime; |
apcastelein | 7:12f7fd2b1a13 | 111 | b->startI = i; |
apcastelein | 7:12f7fd2b1a13 | 112 | b->startJ = j; |
apcastelein | 7:12f7fd2b1a13 | 113 | b->power = (pId == 1)? p1Power : p2Power; |
apcastelein | 7:12f7fd2b1a13 | 114 | if(pId == 1) { |
apcastelein | 7:12f7fd2b1a13 | 115 | p1Bombs--; |
apcastelein | 7:12f7fd2b1a13 | 116 | } else { |
apcastelein | 7:12f7fd2b1a13 | 117 | p2Bombs--; |
apcastelein | 7:12f7fd2b1a13 | 118 | } |
apcastelein | 7:12f7fd2b1a13 | 119 | b->exploded = false; |
apcastelein | 7:12f7fd2b1a13 | 120 | b->cookTime = 1.5; |
apcastelein | 7:12f7fd2b1a13 | 121 | b->expTime = .8; |
apcastelein | 7:12f7fd2b1a13 | 122 | b->decay = 0; |
apcastelein | 7:12f7fd2b1a13 | 123 | b->o_decay = 0; |
apcastelein | 7:12f7fd2b1a13 | 124 | b->soundPlayed = false; |
apcastelein | 7:12f7fd2b1a13 | 125 | } |
apcastelein | 7:12f7fd2b1a13 | 126 | |
apcastelein | 7:12f7fd2b1a13 | 127 | void resetBlock(int i, int j){ |
apcastelein | 7:12f7fd2b1a13 | 128 | if(grid[i][j] == ' '){ |
apcastelein | 7:12f7fd2b1a13 | 129 | grid[i][j] = 'c'; |
apcastelein | 7:12f7fd2b1a13 | 130 | return; |
apcastelein | 7:12f7fd2b1a13 | 131 | } |
apcastelein | 7:12f7fd2b1a13 | 132 | int rr = (int)(gameTime * 1000) + 1023 * i + 523 * j; |
apcastelein | 7:12f7fd2b1a13 | 133 | if(rr%3 == 0){ |
apcastelein | 7:12f7fd2b1a13 | 134 | grid[i][j] = 'k'; |
apcastelein | 7:12f7fd2b1a13 | 135 | }else if(rr%3 == 1){ |
apcastelein | 7:12f7fd2b1a13 | 136 | grid[i][j] = 'd'; |
apcastelein | 7:12f7fd2b1a13 | 137 | }else{ |
apcastelein | 7:12f7fd2b1a13 | 138 | grid[i][j] = 'c'; |
apcastelein | 7:12f7fd2b1a13 | 139 | } |
apcastelein | 7:12f7fd2b1a13 | 140 | } |
apcastelein | 7:12f7fd2b1a13 | 141 | |
apcastelein | 7:12f7fd2b1a13 | 142 | void clearArea(Bomb *b) |
apcastelein | 7:12f7fd2b1a13 | 143 | { |
apcastelein | 7:12f7fd2b1a13 | 144 | //find minX |
apcastelein | 7:12f7fd2b1a13 | 145 | int p = b->power; |
apcastelein | 7:12f7fd2b1a13 | 146 | int i = b->startI; |
apcastelein | 7:12f7fd2b1a13 | 147 | int j = b->startJ; |
apcastelein | 7:12f7fd2b1a13 | 148 | while(p>0) { |
apcastelein | 7:12f7fd2b1a13 | 149 | if(outOfBounds(i,j-1) || grid[i][j-1] == 's') { |
apcastelein | 7:12f7fd2b1a13 | 150 | break; |
apcastelein | 7:12f7fd2b1a13 | 151 | } |
apcastelein | 7:12f7fd2b1a13 | 152 | resetBlock(i,j-1); |
apcastelein | 7:12f7fd2b1a13 | 153 | j--; |
apcastelein | 7:12f7fd2b1a13 | 154 | p--; |
apcastelein | 7:12f7fd2b1a13 | 155 | } |
apcastelein | 7:12f7fd2b1a13 | 156 | b->minX = getX(j) + ((p==0)?3:0); |
apcastelein | 7:12f7fd2b1a13 | 157 | |
apcastelein | 7:12f7fd2b1a13 | 158 | //find maxX |
apcastelein | 7:12f7fd2b1a13 | 159 | p = b->power; |
apcastelein | 7:12f7fd2b1a13 | 160 | i = b->startI; |
apcastelein | 7:12f7fd2b1a13 | 161 | j = b->startJ; |
apcastelein | 7:12f7fd2b1a13 | 162 | while(p>0) { |
apcastelein | 7:12f7fd2b1a13 | 163 | if(outOfBounds(i,j+1) || grid[i][j+1] == 's') { |
apcastelein | 7:12f7fd2b1a13 | 164 | break; |
apcastelein | 7:12f7fd2b1a13 | 165 | } |
apcastelein | 7:12f7fd2b1a13 | 166 | resetBlock(i,j+1); |
apcastelein | 7:12f7fd2b1a13 | 167 | j++; |
apcastelein | 7:12f7fd2b1a13 | 168 | p--; |
apcastelein | 7:12f7fd2b1a13 | 169 | } |
apcastelein | 7:12f7fd2b1a13 | 170 | b->maxX = getX(j+1)+((p==0)?-3:0); |
apcastelein | 7:12f7fd2b1a13 | 171 | |
apcastelein | 7:12f7fd2b1a13 | 172 | //find minY |
apcastelein | 7:12f7fd2b1a13 | 173 | p = b->power; |
apcastelein | 7:12f7fd2b1a13 | 174 | i = b->startI; |
apcastelein | 7:12f7fd2b1a13 | 175 | j = b->startJ; |
apcastelein | 7:12f7fd2b1a13 | 176 | while(p>0) { |
apcastelein | 7:12f7fd2b1a13 | 177 | if(outOfBounds(i-1,j) || grid[i-1][j] == 's') { |
apcastelein | 7:12f7fd2b1a13 | 178 | break; |
apcastelein | 7:12f7fd2b1a13 | 179 | } |
apcastelein | 7:12f7fd2b1a13 | 180 | resetBlock(i-1,j); |
apcastelein | 7:12f7fd2b1a13 | 181 | i--; |
apcastelein | 7:12f7fd2b1a13 | 182 | p--; |
apcastelein | 7:12f7fd2b1a13 | 183 | } |
apcastelein | 7:12f7fd2b1a13 | 184 | b->minY = getY(i) + ((p==0)?3:0); |
apcastelein | 7:12f7fd2b1a13 | 185 | |
apcastelein | 7:12f7fd2b1a13 | 186 | //find maxY |
apcastelein | 7:12f7fd2b1a13 | 187 | p = b->power; |
apcastelein | 7:12f7fd2b1a13 | 188 | i = b->startI; |
apcastelein | 7:12f7fd2b1a13 | 189 | j = b->startJ; |
apcastelein | 7:12f7fd2b1a13 | 190 | while(p>0) { |
apcastelein | 7:12f7fd2b1a13 | 191 | if(outOfBounds(i+1,j) || grid[i+1][j] == 's') { |
apcastelein | 7:12f7fd2b1a13 | 192 | break; |
apcastelein | 7:12f7fd2b1a13 | 193 | } |
apcastelein | 7:12f7fd2b1a13 | 194 | resetBlock(i+1,j); |
apcastelein | 7:12f7fd2b1a13 | 195 | i++; |
apcastelein | 7:12f7fd2b1a13 | 196 | p--; |
apcastelein | 7:12f7fd2b1a13 | 197 | } |
apcastelein | 7:12f7fd2b1a13 | 198 | b->maxY = getY(i+1) + ((p==0)?-3:0); |
apcastelein | 7:12f7fd2b1a13 | 199 | } |
apcastelein | 7:12f7fd2b1a13 | 200 | |
apcastelein | 7:12f7fd2b1a13 | 201 | void playExplosion() |
apcastelein | 7:12f7fd2b1a13 | 202 | { |
apcastelein | 7:12f7fd2b1a13 | 203 | while(true){ |
apcastelein | 7:12f7fd2b1a13 | 204 | bool expFound = false; |
apcastelein | 7:12f7fd2b1a13 | 205 | while(!expFound){ |
apcastelein | 7:12f7fd2b1a13 | 206 | for(int i = 0; i < numBombs; i++) { |
apcastelein | 7:12f7fd2b1a13 | 207 | Bomb *b = &bombs[(bombIndex + i)%bufferSize]; |
apcastelein | 7:12f7fd2b1a13 | 208 | if(b->exploded && !b->soundPlayed){ |
apcastelein | 7:12f7fd2b1a13 | 209 | expFound = true; |
apcastelein | 7:12f7fd2b1a13 | 210 | b->soundPlayed = true; |
apcastelein | 7:12f7fd2b1a13 | 211 | } |
apcastelein | 7:12f7fd2b1a13 | 212 | } |
apcastelein | 7:12f7fd2b1a13 | 213 | Thread::wait(100); |
apcastelein | 7:12f7fd2b1a13 | 214 | } |
apcastelein | 7:12f7fd2b1a13 | 215 | FILE *explosion; |
apcastelein | 7:12f7fd2b1a13 | 216 | explosion=fopen("/sd/explosion.wav","r"); |
apcastelein | 7:12f7fd2b1a13 | 217 | waver.play(explosion); |
apcastelein | 7:12f7fd2b1a13 | 218 | fclose(explosion); |
apcastelein | 7:12f7fd2b1a13 | 219 | } |
apcastelein | 7:12f7fd2b1a13 | 220 | } |
apcastelein | 7:12f7fd2b1a13 | 221 | |
apcastelein | 7:12f7fd2b1a13 | 222 | void updateBombs() |
apcastelein | 7:12f7fd2b1a13 | 223 | { |
apcastelein | 7:12f7fd2b1a13 | 224 | for(int i = 0; i < numBombs; i++) { |
apcastelein | 7:12f7fd2b1a13 | 225 | Bomb *b = &bombs[(bombIndex + i)%bufferSize]; |
apcastelein | 7:12f7fd2b1a13 | 226 | if(!b->exploded && (gameTime - b->createTime) > b->cookTime) { |
apcastelein | 7:12f7fd2b1a13 | 227 | b->exploded = true; |
apcastelein | 7:12f7fd2b1a13 | 228 | clearArea(b); |
apcastelein | 7:12f7fd2b1a13 | 229 | |
apcastelein | 7:12f7fd2b1a13 | 230 | } |
apcastelein | 7:12f7fd2b1a13 | 231 | if(!b->exploded) { |
apcastelein | 7:12f7fd2b1a13 | 232 | int index = (int)((gameTime - b->createTime)/.15); |
apcastelein | 7:12f7fd2b1a13 | 233 | if((index & 0x11) == 0) { |
apcastelein | 7:12f7fd2b1a13 | 234 | b->color = WHITE; |
apcastelein | 7:12f7fd2b1a13 | 235 | } else { |
apcastelein | 7:12f7fd2b1a13 | 236 | b->color = BLACK; |
apcastelein | 7:12f7fd2b1a13 | 237 | } |
apcastelein | 7:12f7fd2b1a13 | 238 | } else { |
apcastelein | 7:12f7fd2b1a13 | 239 | int index = (int)((gameTime - b->createTime - b->cookTime)/.2); |
apcastelein | 7:12f7fd2b1a13 | 240 | if(index == 0) { |
apcastelein | 7:12f7fd2b1a13 | 241 | b->color = WHITE; |
apcastelein | 7:12f7fd2b1a13 | 242 | } |
apcastelein | 7:12f7fd2b1a13 | 243 | if(index == 1) { |
apcastelein | 7:12f7fd2b1a13 | 244 | b->color = 0xFFFF00; |
apcastelein | 7:12f7fd2b1a13 | 245 | } |
apcastelein | 7:12f7fd2b1a13 | 246 | if(index == 2) { |
apcastelein | 7:12f7fd2b1a13 | 247 | b->color = 0xFF8800; |
apcastelein | 7:12f7fd2b1a13 | 248 | } |
apcastelein | 7:12f7fd2b1a13 | 249 | if(index >= 3) { |
apcastelein | 7:12f7fd2b1a13 | 250 | b->color = RED; |
apcastelein | 7:12f7fd2b1a13 | 251 | } |
apcastelein | 7:12f7fd2b1a13 | 252 | index = (int)((gameTime - b->createTime - b->cookTime)/.25); |
apcastelein | 7:12f7fd2b1a13 | 253 | b->decay = index; |
apcastelein | 7:12f7fd2b1a13 | 254 | } |
apcastelein | 7:12f7fd2b1a13 | 255 | } |
apcastelein | 7:12f7fd2b1a13 | 256 | } |
apcastelein | 7:12f7fd2b1a13 | 257 | |
apcastelein | 7:12f7fd2b1a13 | 258 | void drawBombs() |
apcastelein | 7:12f7fd2b1a13 | 259 | { |
apcastelein | 7:12f7fd2b1a13 | 260 | for(int i = 0; i < numBombs; i++) { |
apcastelein | 7:12f7fd2b1a13 | 261 | Bomb *b = &bombs[(bombIndex + i)%bufferSize]; |
apcastelein | 7:12f7fd2b1a13 | 262 | int x = getX(b->startJ); |
apcastelein | 7:12f7fd2b1a13 | 263 | int y = getY(b->startI); |
apcastelein | 7:12f7fd2b1a13 | 264 | if(!b->exploded) { |
apcastelein | 7:12f7fd2b1a13 | 265 | if(b->color == WHITE) { |
apcastelein | 7:12f7fd2b1a13 | 266 | uLCD.filled_circle(x+8,y+8,5, WHITE); |
apcastelein | 7:12f7fd2b1a13 | 267 | uLCD.filled_rectangle(x+7,y+1,x+9,y+3, WHITE); |
apcastelein | 7:12f7fd2b1a13 | 268 | } else { |
apcastelein | 7:12f7fd2b1a13 | 269 | uLCD.filled_circle(x+8,y+8,5, BLACK); |
apcastelein | 7:12f7fd2b1a13 | 270 | uLCD.filled_rectangle(x+7,y+1,x+9,y+3, 0xFFFF00); |
apcastelein | 7:12f7fd2b1a13 | 271 | } |
apcastelein | 7:12f7fd2b1a13 | 272 | } else { |
apcastelein | 7:12f7fd2b1a13 | 273 | if(b->o_decay != b->decay){ |
apcastelein | 7:12f7fd2b1a13 | 274 | b->o_decay = b->decay; |
apcastelein | 7:12f7fd2b1a13 | 275 | uLCD.filled_rectangle(b->minX,y+3,b->maxX,y+13, BACK); |
apcastelein | 7:12f7fd2b1a13 | 276 | uLCD.filled_rectangle(x+3,b->minY,x+13,b->maxY, BACK); |
apcastelein | 7:12f7fd2b1a13 | 277 | } |
apcastelein | 7:12f7fd2b1a13 | 278 | |
apcastelein | 7:12f7fd2b1a13 | 279 | if(gameTime - b->createTime < (b->cookTime + b->expTime)) { |
apcastelein | 7:12f7fd2b1a13 | 280 | uLCD.filled_rectangle(b->minX+b->decay,y+3+b->decay,b->maxX-b->decay,y+13-b->decay, b->color); |
apcastelein | 7:12f7fd2b1a13 | 281 | uLCD.filled_rectangle(x+3+b->decay,b->minY+b->decay,x+13-b->decay,b->maxY-b->decay, b->color); |
apcastelein | 7:12f7fd2b1a13 | 282 | } else { |
apcastelein | 7:12f7fd2b1a13 | 283 | uLCD.filled_rectangle(b->minX,y+3,b->maxX,y+13, BACK); |
apcastelein | 7:12f7fd2b1a13 | 284 | uLCD.filled_rectangle(x+3,b->minY,x+13,b->maxY, BACK); |
apcastelein | 7:12f7fd2b1a13 | 285 | if(b->playerId == 1) { |
apcastelein | 7:12f7fd2b1a13 | 286 | p1Bombs++; |
apcastelein | 7:12f7fd2b1a13 | 287 | } else { |
apcastelein | 7:12f7fd2b1a13 | 288 | p2Bombs++; |
apcastelein | 7:12f7fd2b1a13 | 289 | } |
apcastelein | 7:12f7fd2b1a13 | 290 | bombIndex=(bombIndex+1)%bufferSize; |
apcastelein | 7:12f7fd2b1a13 | 291 | numBombs--; |
apcastelein | 7:12f7fd2b1a13 | 292 | } |
apcastelein | 7:12f7fd2b1a13 | 293 | } |
emilmont | 1:491820ee784d | 294 | } |
emilmont | 1:491820ee784d | 295 | } |
apcastelein | 7:12f7fd2b1a13 | 296 | |
apcastelein | 7:12f7fd2b1a13 | 297 | void generateGrid() |
apcastelein | 7:12f7fd2b1a13 | 298 | { |
apcastelein | 7:12f7fd2b1a13 | 299 | //init empty |
apcastelein | 7:12f7fd2b1a13 | 300 | for(int i = 0; i < 7; i++) { |
apcastelein | 7:12f7fd2b1a13 | 301 | for(int j = 0; j < 7; j++) { |
apcastelein | 7:12f7fd2b1a13 | 302 | grid[i][j] = ' '; |
apcastelein | 7:12f7fd2b1a13 | 303 | } |
apcastelein | 7:12f7fd2b1a13 | 304 | } |
apcastelein | 7:12f7fd2b1a13 | 305 | //generate solids |
apcastelein | 7:12f7fd2b1a13 | 306 | for(int i = 1; i < 7; i+=2) { |
apcastelein | 7:12f7fd2b1a13 | 307 | for(int j = 1; j < 7; j+=2) { |
apcastelein | 7:12f7fd2b1a13 | 308 | grid[i][j] = 's'; |
apcastelein | 7:12f7fd2b1a13 | 309 | } |
apcastelein | 7:12f7fd2b1a13 | 310 | } |
apcastelein | 7:12f7fd2b1a13 | 311 | //generate breakables |
apcastelein | 7:12f7fd2b1a13 | 312 | for(int i = 0; i < 7; i++) { |
apcastelein | 7:12f7fd2b1a13 | 313 | for(int j = 0; j < 7; j++) { |
apcastelein | 7:12f7fd2b1a13 | 314 | if(grid[i][j] == 's') { |
apcastelein | 7:12f7fd2b1a13 | 315 | continue; |
apcastelein | 7:12f7fd2b1a13 | 316 | } |
apcastelein | 7:12f7fd2b1a13 | 317 | bool hasBreakable = (i*17+j*349)%4 != 0; |
apcastelein | 7:12f7fd2b1a13 | 318 | if(hasBreakable) { |
apcastelein | 7:12f7fd2b1a13 | 319 | grid[i][j] = 'b'; |
apcastelein | 7:12f7fd2b1a13 | 320 | } |
apcastelein | 7:12f7fd2b1a13 | 321 | } |
apcastelein | 7:12f7fd2b1a13 | 322 | } |
apcastelein | 7:12f7fd2b1a13 | 323 | //clear player regions |
apcastelein | 7:12f7fd2b1a13 | 324 | grid[0][0] = ' '; |
apcastelein | 7:12f7fd2b1a13 | 325 | grid[1][0] = ' '; |
apcastelein | 7:12f7fd2b1a13 | 326 | grid[0][1] = ' '; |
apcastelein | 7:12f7fd2b1a13 | 327 | grid[6][6] = ' '; |
apcastelein | 7:12f7fd2b1a13 | 328 | grid[5][6] = ' '; |
apcastelein | 7:12f7fd2b1a13 | 329 | grid[6][5] = ' '; |
apcastelein | 7:12f7fd2b1a13 | 330 | } |
apcastelein | 7:12f7fd2b1a13 | 331 | |
apcastelein | 7:12f7fd2b1a13 | 332 | void drawImg(string imgName, int x, int y) |
apcastelein | 7:12f7fd2b1a13 | 333 | { |
apcastelein | 7:12f7fd2b1a13 | 334 | RGBApixel *Colors = new RGBApixel [2]; |
apcastelein | 7:12f7fd2b1a13 | 335 | string file = "/sd/" + imgName; |
apcastelein | 7:12f7fd2b1a13 | 336 | ReadBMPFromFile(x,y, file.c_str(), Colors, &uLCD); |
apcastelein | 7:12f7fd2b1a13 | 337 | } |
apcastelein | 7:12f7fd2b1a13 | 338 | |
apcastelein | 7:12f7fd2b1a13 | 339 | void drawPlayer(int id) |
apcastelein | 7:12f7fd2b1a13 | 340 | { |
apcastelein | 7:12f7fd2b1a13 | 341 | int col_prim, col_sec, x, y; |
apcastelein | 7:12f7fd2b1a13 | 342 | if(id == 1) { |
apcastelein | 7:12f7fd2b1a13 | 343 | col_prim = 0xFFD8B2; |
apcastelein | 7:12f7fd2b1a13 | 344 | col_sec = 0xFFB2B2; |
apcastelein | 7:12f7fd2b1a13 | 345 | x = getX(p1J); |
apcastelein | 7:12f7fd2b1a13 | 346 | y = getY(p1I); |
apcastelein | 7:12f7fd2b1a13 | 347 | } |
apcastelein | 7:12f7fd2b1a13 | 348 | if(id == 2) { |
apcastelein | 7:12f7fd2b1a13 | 349 | col_prim = 0xC6B2FF; |
apcastelein | 7:12f7fd2b1a13 | 350 | col_sec = 0xFFB2FF; |
apcastelein | 7:12f7fd2b1a13 | 351 | x = getX(p2J); |
apcastelein | 7:12f7fd2b1a13 | 352 | y = getY(p2I); |
apcastelein | 7:12f7fd2b1a13 | 353 | } |
apcastelein | 7:12f7fd2b1a13 | 354 | uLCD.filled_rectangle(x+3,y+3,x+13,y+10, col_prim); |
apcastelein | 7:12f7fd2b1a13 | 355 | uLCD.filled_rectangle(x+5,y+5,x+6,y+8, BLACK); |
apcastelein | 7:12f7fd2b1a13 | 356 | uLCD.filled_rectangle(x+10,y+5,x+11,y+8, BLACK); |
apcastelein | 7:12f7fd2b1a13 | 357 | uLCD.filled_rectangle(x+5,y+10,x+7,y+13, col_sec); |
apcastelein | 7:12f7fd2b1a13 | 358 | uLCD.filled_rectangle(x+9,y+10,x+11,y+13, col_sec); |
apcastelein | 7:12f7fd2b1a13 | 359 | } |
apcastelein | 7:12f7fd2b1a13 | 360 | |
apcastelein | 7:12f7fd2b1a13 | 361 | void initialDraw() |
apcastelein | 7:12f7fd2b1a13 | 362 | { |
apcastelein | 7:12f7fd2b1a13 | 363 | uLCD.baudrate(3000000); |
apcastelein | 7:12f7fd2b1a13 | 364 | uLCD.filled_rectangle(0,0,128,128, BACK); |
apcastelein | 7:12f7fd2b1a13 | 365 | uLCD.text_width(2); |
apcastelein | 7:12f7fd2b1a13 | 366 | uLCD.text_height(2); |
apcastelein | 7:12f7fd2b1a13 | 367 | uLCD.color(WHITE); |
apcastelein | 7:12f7fd2b1a13 | 368 | uLCD.locate(1,4); |
apcastelein | 7:12f7fd2b1a13 | 369 | uLCD.printf("%s",startText); |
apcastelein | 7:12f7fd2b1a13 | 370 | for(int i = -1; i < 8; i++){ |
apcastelein | 7:12f7fd2b1a13 | 371 | for(int j = -1; j < 8; j++){ |
apcastelein | 7:12f7fd2b1a13 | 372 | string img; |
apcastelein | 7:12f7fd2b1a13 | 373 | int c = -1; |
apcastelein | 7:12f7fd2b1a13 | 374 | if(i == -1 || j == -1 || i == 7 || j == 7){ |
apcastelein | 7:12f7fd2b1a13 | 375 | img = "wall.bmp"; |
apcastelein | 7:12f7fd2b1a13 | 376 | //c = BLACK; |
apcastelein | 7:12f7fd2b1a13 | 377 | }else{ |
apcastelein | 7:12f7fd2b1a13 | 378 | if(grid[i][j] == ' '){ |
apcastelein | 7:12f7fd2b1a13 | 379 | c = BACK; |
apcastelein | 7:12f7fd2b1a13 | 380 | } |
apcastelein | 7:12f7fd2b1a13 | 381 | if(grid[i][j] == 'b'){ |
apcastelein | 7:12f7fd2b1a13 | 382 | img = "break.bmp"; |
apcastelein | 7:12f7fd2b1a13 | 383 | //c = 0x888888; |
apcastelein | 7:12f7fd2b1a13 | 384 | } |
apcastelein | 7:12f7fd2b1a13 | 385 | if(grid[i][j] == 's'){ |
apcastelein | 7:12f7fd2b1a13 | 386 | img = "wall.bmp"; |
apcastelein | 7:12f7fd2b1a13 | 387 | //c = BLACK; |
apcastelein | 7:12f7fd2b1a13 | 388 | } |
apcastelein | 7:12f7fd2b1a13 | 389 | } |
apcastelein | 7:12f7fd2b1a13 | 390 | int x = getX(j); |
apcastelein | 7:12f7fd2b1a13 | 391 | int y = getY(i); |
apcastelein | 7:12f7fd2b1a13 | 392 | if(c != -1){ |
apcastelein | 7:12f7fd2b1a13 | 393 | uLCD.filled_rectangle(x,y,x+16,y+16, c); |
apcastelein | 7:12f7fd2b1a13 | 394 | }else{ |
apcastelein | 7:12f7fd2b1a13 | 395 | drawImg(img, x, y); |
apcastelein | 7:12f7fd2b1a13 | 396 | } |
apcastelein | 7:12f7fd2b1a13 | 397 | |
apcastelein | 7:12f7fd2b1a13 | 398 | } |
apcastelein | 7:12f7fd2b1a13 | 399 | } |
apcastelein | 7:12f7fd2b1a13 | 400 | drawPlayer(1); |
apcastelein | 7:12f7fd2b1a13 | 401 | drawPlayer(2); |
apcastelein | 7:12f7fd2b1a13 | 402 | } |
apcastelein | 7:12f7fd2b1a13 | 403 | |
apcastelein | 7:12f7fd2b1a13 | 404 | |
apcastelein | 7:12f7fd2b1a13 | 405 | void updateP1() |
apcastelein | 7:12f7fd2b1a13 | 406 | { |
apcastelein | 7:12f7fd2b1a13 | 407 | if(!navUpPress && myNav.up()) { |
apcastelein | 7:12f7fd2b1a13 | 408 | p1I++; |
apcastelein | 7:12f7fd2b1a13 | 409 | navUpPress = true; |
apcastelein | 7:12f7fd2b1a13 | 410 | } |
apcastelein | 7:12f7fd2b1a13 | 411 | if(!navDownPress && myNav.down()) { |
apcastelein | 7:12f7fd2b1a13 | 412 | p1I--; |
apcastelein | 7:12f7fd2b1a13 | 413 | navDownPress = true; |
apcastelein | 7:12f7fd2b1a13 | 414 | } |
apcastelein | 7:12f7fd2b1a13 | 415 | if(!navLeftPress && myNav.left()) { |
apcastelein | 7:12f7fd2b1a13 | 416 | p1J++; |
apcastelein | 7:12f7fd2b1a13 | 417 | navLeftPress = true; |
apcastelein | 7:12f7fd2b1a13 | 418 | } |
apcastelein | 7:12f7fd2b1a13 | 419 | if(!navRightPress && myNav.right()) { |
apcastelein | 7:12f7fd2b1a13 | 420 | p1J--; |
apcastelein | 7:12f7fd2b1a13 | 421 | navRightPress = true; |
apcastelein | 7:12f7fd2b1a13 | 422 | } |
apcastelein | 7:12f7fd2b1a13 | 423 | if(!navFirePress && myNav.fire() && p1Bombs >0) { |
apcastelein | 7:12f7fd2b1a13 | 424 | createBomb(1,p1I,p1J); |
apcastelein | 7:12f7fd2b1a13 | 425 | navFirePress = true; |
apcastelein | 7:12f7fd2b1a13 | 426 | } |
apcastelein | 7:12f7fd2b1a13 | 427 | |
apcastelein | 7:12f7fd2b1a13 | 428 | if(!valid(p1I,p1J)) { |
apcastelein | 7:12f7fd2b1a13 | 429 | p1I = o_p1I; |
apcastelein | 7:12f7fd2b1a13 | 430 | p1J = o_p1J; |
apcastelein | 7:12f7fd2b1a13 | 431 | } |
emilmont | 1:491820ee784d | 432 | |
apcastelein | 7:12f7fd2b1a13 | 433 | if(grid[p1I][p1J] == 'f'){ |
apcastelein | 7:12f7fd2b1a13 | 434 | p1Power++; |
apcastelein | 7:12f7fd2b1a13 | 435 | grid[p1I][p1J] = 'c'; |
apcastelein | 7:12f7fd2b1a13 | 436 | } |
apcastelein | 7:12f7fd2b1a13 | 437 | if(grid[p1I][p1J] == 'i'){ |
apcastelein | 7:12f7fd2b1a13 | 438 | p1Bombs++; |
apcastelein | 7:12f7fd2b1a13 | 439 | grid[p1I][p1J] = 'c'; |
apcastelein | 7:12f7fd2b1a13 | 440 | } |
apcastelein | 7:12f7fd2b1a13 | 441 | |
apcastelein | 7:12f7fd2b1a13 | 442 | if(!myNav.up()) { |
apcastelein | 7:12f7fd2b1a13 | 443 | navUpPress = false; |
apcastelein | 7:12f7fd2b1a13 | 444 | } |
apcastelein | 7:12f7fd2b1a13 | 445 | if(!myNav.down()) { |
apcastelein | 7:12f7fd2b1a13 | 446 | navDownPress = false; |
apcastelein | 7:12f7fd2b1a13 | 447 | } |
apcastelein | 7:12f7fd2b1a13 | 448 | if(!myNav.left()) { |
apcastelein | 7:12f7fd2b1a13 | 449 | navLeftPress = false; |
apcastelein | 7:12f7fd2b1a13 | 450 | } |
apcastelein | 7:12f7fd2b1a13 | 451 | if(!myNav.right()) { |
apcastelein | 7:12f7fd2b1a13 | 452 | navRightPress = false; |
apcastelein | 7:12f7fd2b1a13 | 453 | } |
apcastelein | 7:12f7fd2b1a13 | 454 | if(!myNav.fire()) { |
apcastelein | 7:12f7fd2b1a13 | 455 | navFirePress = false; |
emilmont | 1:491820ee784d | 456 | } |
emilmont | 1:491820ee784d | 457 | } |
apcastelein | 7:12f7fd2b1a13 | 458 | |
apcastelein | 7:12f7fd2b1a13 | 459 | bool isOne(int val, int pos) |
apcastelein | 7:12f7fd2b1a13 | 460 | { |
apcastelein | 7:12f7fd2b1a13 | 461 | return val >> pos & 0x01; |
apcastelein | 7:12f7fd2b1a13 | 462 | } |
apcastelein | 7:12f7fd2b1a13 | 463 | |
apcastelein | 7:12f7fd2b1a13 | 464 | void updateP2() |
apcastelein | 7:12f7fd2b1a13 | 465 | { |
apcastelein | 7:12f7fd2b1a13 | 466 | int value=pad.read(0x00); |
apcastelein | 7:12f7fd2b1a13 | 467 | value +=pad.read(0x01)<<8; |
apcastelein | 7:12f7fd2b1a13 | 468 | |
apcastelein | 7:12f7fd2b1a13 | 469 | bool up = isOne(value,5); |
apcastelein | 7:12f7fd2b1a13 | 470 | bool down = isOne(value,7); |
apcastelein | 7:12f7fd2b1a13 | 471 | bool left = isOne(value,10); |
apcastelein | 7:12f7fd2b1a13 | 472 | bool right = isOne(value,2); |
apcastelein | 7:12f7fd2b1a13 | 473 | bool fire = isOne(value,6); |
apcastelein | 7:12f7fd2b1a13 | 474 | |
apcastelein | 7:12f7fd2b1a13 | 475 | if(!padUpPress && up) { |
apcastelein | 7:12f7fd2b1a13 | 476 | p2I--; |
apcastelein | 7:12f7fd2b1a13 | 477 | padUpPress = true; |
apcastelein | 7:12f7fd2b1a13 | 478 | } |
apcastelein | 7:12f7fd2b1a13 | 479 | if(!padDownPress && down) { |
apcastelein | 7:12f7fd2b1a13 | 480 | p2I++; |
apcastelein | 7:12f7fd2b1a13 | 481 | padDownPress = true; |
apcastelein | 7:12f7fd2b1a13 | 482 | } |
apcastelein | 7:12f7fd2b1a13 | 483 | if(!padLeftPress && left) { |
apcastelein | 7:12f7fd2b1a13 | 484 | p2J--; |
apcastelein | 7:12f7fd2b1a13 | 485 | padLeftPress = true; |
apcastelein | 7:12f7fd2b1a13 | 486 | } |
apcastelein | 7:12f7fd2b1a13 | 487 | if(!padRightPress && right) { |
apcastelein | 7:12f7fd2b1a13 | 488 | p2J++; |
apcastelein | 7:12f7fd2b1a13 | 489 | padRightPress = true; |
apcastelein | 7:12f7fd2b1a13 | 490 | } |
apcastelein | 7:12f7fd2b1a13 | 491 | if(!padFirePress && fire && p2Bombs > 0) { |
apcastelein | 7:12f7fd2b1a13 | 492 | createBomb(2,p2I,p2J); |
apcastelein | 7:12f7fd2b1a13 | 493 | padFirePress = true; |
apcastelein | 7:12f7fd2b1a13 | 494 | } |
apcastelein | 7:12f7fd2b1a13 | 495 | |
apcastelein | 7:12f7fd2b1a13 | 496 | if(!valid(p2I,p2J)) { |
apcastelein | 7:12f7fd2b1a13 | 497 | p2I = o_p2I; |
apcastelein | 7:12f7fd2b1a13 | 498 | p2J = o_p2J; |
apcastelein | 7:12f7fd2b1a13 | 499 | } |
apcastelein | 7:12f7fd2b1a13 | 500 | |
apcastelein | 7:12f7fd2b1a13 | 501 | if(grid[p2I][p2J] == 'f'){ |
apcastelein | 7:12f7fd2b1a13 | 502 | p2Power++; |
apcastelein | 7:12f7fd2b1a13 | 503 | grid[p2I][p2J] = 'c'; |
apcastelein | 7:12f7fd2b1a13 | 504 | } |
apcastelein | 7:12f7fd2b1a13 | 505 | if(grid[p2I][p2J] == 'i'){ |
apcastelein | 7:12f7fd2b1a13 | 506 | p2Bombs++; |
apcastelein | 7:12f7fd2b1a13 | 507 | grid[p2I][p2J] = 'c'; |
apcastelein | 7:12f7fd2b1a13 | 508 | } |
apcastelein | 7:12f7fd2b1a13 | 509 | |
apcastelein | 7:12f7fd2b1a13 | 510 | if(!up) { |
apcastelein | 7:12f7fd2b1a13 | 511 | padUpPress = false; |
apcastelein | 7:12f7fd2b1a13 | 512 | } |
apcastelein | 7:12f7fd2b1a13 | 513 | if(!down) { |
apcastelein | 7:12f7fd2b1a13 | 514 | padDownPress = false; |
apcastelein | 7:12f7fd2b1a13 | 515 | } |
apcastelein | 7:12f7fd2b1a13 | 516 | if(!left) { |
apcastelein | 7:12f7fd2b1a13 | 517 | padLeftPress = false; |
apcastelein | 7:12f7fd2b1a13 | 518 | } |
apcastelein | 7:12f7fd2b1a13 | 519 | if(!right) { |
apcastelein | 7:12f7fd2b1a13 | 520 | padRightPress = false; |
apcastelein | 7:12f7fd2b1a13 | 521 | } |
apcastelein | 7:12f7fd2b1a13 | 522 | if(!fire) { |
apcastelein | 7:12f7fd2b1a13 | 523 | padFirePress = false; |
apcastelein | 7:12f7fd2b1a13 | 524 | } |
apcastelein | 7:12f7fd2b1a13 | 525 | } |
apcastelein | 7:12f7fd2b1a13 | 526 | |
apcastelein | 7:12f7fd2b1a13 | 527 | void draw() |
apcastelein | 7:12f7fd2b1a13 | 528 | { |
apcastelein | 7:12f7fd2b1a13 | 529 | for(int i = 0; i < 7; i++){ |
apcastelein | 7:12f7fd2b1a13 | 530 | for(int j = 0; j < 7; j++){ |
apcastelein | 7:12f7fd2b1a13 | 531 | if(grid[i][j] == 'c' || grid[i][j] == 'd' || grid[i][j] == 'k'){ |
apcastelein | 7:12f7fd2b1a13 | 532 | if(grid[i][j] == 'c') grid[i][j] = ' '; |
apcastelein | 7:12f7fd2b1a13 | 533 | if(grid[i][j] == 'd') grid[i][j] = 'f'; |
apcastelein | 7:12f7fd2b1a13 | 534 | if(grid[i][j] == 'k') grid[i][j] = 'i'; |
apcastelein | 7:12f7fd2b1a13 | 535 | uLCD.filled_rectangle(getX(j),getY(i),getX(j+1),getY(i+1), BACK); |
apcastelein | 7:12f7fd2b1a13 | 536 | } |
apcastelein | 7:12f7fd2b1a13 | 537 | if(grid[i][j] == 'f'){ |
apcastelein | 7:12f7fd2b1a13 | 538 | uLCD.filled_circle(getX(j)+8,getY(i)+8,3,RED); |
apcastelein | 7:12f7fd2b1a13 | 539 | } |
apcastelein | 7:12f7fd2b1a13 | 540 | if(grid[i][j] == 'i'){ |
apcastelein | 7:12f7fd2b1a13 | 541 | uLCD.filled_circle(getX(j)+8,getY(i)+8,3,0xFFFF00); |
apcastelein | 7:12f7fd2b1a13 | 542 | } |
apcastelein | 7:12f7fd2b1a13 | 543 | } |
apcastelein | 7:12f7fd2b1a13 | 544 | } |
apcastelein | 7:12f7fd2b1a13 | 545 | if(p1I != o_p1I || p1J != o_p1J) { |
apcastelein | 7:12f7fd2b1a13 | 546 | int o_x = getX(o_p1J); |
apcastelein | 7:12f7fd2b1a13 | 547 | int o_y = getY(o_p1I); |
apcastelein | 7:12f7fd2b1a13 | 548 | uLCD.filled_rectangle(o_x,o_y,o_x+16,o_y+16, BACK); |
apcastelein | 7:12f7fd2b1a13 | 549 | o_p1I = p1I; |
apcastelein | 7:12f7fd2b1a13 | 550 | o_p1J = p1J; |
apcastelein | 7:12f7fd2b1a13 | 551 | } |
apcastelein | 7:12f7fd2b1a13 | 552 | if(p2I != o_p2I || p2J != o_p2J) { |
apcastelein | 7:12f7fd2b1a13 | 553 | int o_x = getX(o_p2J); |
apcastelein | 7:12f7fd2b1a13 | 554 | int o_y = getY(o_p2I); |
apcastelein | 7:12f7fd2b1a13 | 555 | uLCD.filled_rectangle(o_x,o_y,o_x+16,o_y+16, BACK); |
apcastelein | 7:12f7fd2b1a13 | 556 | o_p2I = p2I; |
apcastelein | 7:12f7fd2b1a13 | 557 | o_p2J = p2J; |
apcastelein | 7:12f7fd2b1a13 | 558 | } |
apcastelein | 7:12f7fd2b1a13 | 559 | drawBombs(); |
apcastelein | 7:12f7fd2b1a13 | 560 | drawPlayer(1); |
apcastelein | 7:12f7fd2b1a13 | 561 | drawPlayer(2); |
apcastelein | 7:12f7fd2b1a13 | 562 | } |
apcastelein | 7:12f7fd2b1a13 | 563 | |
apcastelein | 7:12f7fd2b1a13 | 564 | void checkPlayerDeath(int pid){ |
apcastelein | 7:12f7fd2b1a13 | 565 | if(gameRestart) return; |
apcastelein | 7:12f7fd2b1a13 | 566 | int centerX = getX((pid == 1)?(p1J):(p2J))+8; |
apcastelein | 7:12f7fd2b1a13 | 567 | int centerY = getY((pid == 1)?(p1I):(p2I))+8; |
apcastelein | 7:12f7fd2b1a13 | 568 | for(int i = 0; i < numBombs; i++) { |
apcastelein | 7:12f7fd2b1a13 | 569 | Bomb *b = &bombs[(bombIndex + i)%bufferSize]; |
apcastelein | 7:12f7fd2b1a13 | 570 | if(b->exploded){ |
apcastelein | 7:12f7fd2b1a13 | 571 | int bx = getX(b->startJ); |
apcastelein | 7:12f7fd2b1a13 | 572 | int by = getY(b->startI); |
apcastelein | 7:12f7fd2b1a13 | 573 | if(b->minX < centerX && centerX < b->maxX && by < centerY && centerY < by+16){ |
apcastelein | 7:12f7fd2b1a13 | 574 | gameRestart = true; |
apcastelein | 7:12f7fd2b1a13 | 575 | } |
apcastelein | 7:12f7fd2b1a13 | 576 | if(b->minY < centerY && centerY < b->maxY && bx < centerX && centerX < bx+16){ |
apcastelein | 7:12f7fd2b1a13 | 577 | gameRestart = true; |
apcastelein | 7:12f7fd2b1a13 | 578 | } |
apcastelein | 7:12f7fd2b1a13 | 579 | } |
apcastelein | 7:12f7fd2b1a13 | 580 | } |
apcastelein | 7:12f7fd2b1a13 | 581 | if(gameRestart){ |
apcastelein | 7:12f7fd2b1a13 | 582 | if(pid == 1){ |
apcastelein | 7:12f7fd2b1a13 | 583 | startText = "P1 Died"; |
apcastelein | 7:12f7fd2b1a13 | 584 | }else{ |
apcastelein | 7:12f7fd2b1a13 | 585 | startText = "P2 Died"; |
apcastelein | 7:12f7fd2b1a13 | 586 | } |
apcastelein | 7:12f7fd2b1a13 | 587 | } |
apcastelein | 7:12f7fd2b1a13 | 588 | } |
apcastelein | 7:12f7fd2b1a13 | 589 | |
apcastelein | 7:12f7fd2b1a13 | 590 | int main() |
apcastelein | 7:12f7fd2b1a13 | 591 | { |
apcastelein | 7:12f7fd2b1a13 | 592 | Thread thr(playExplosion); |
apcastelein | 7:12f7fd2b1a13 | 593 | while(true){ |
apcastelein | 7:12f7fd2b1a13 | 594 | resetVars(); |
apcastelein | 7:12f7fd2b1a13 | 595 | generateGrid(); |
apcastelein | 7:12f7fd2b1a13 | 596 | initialDraw(); |
apcastelein | 7:12f7fd2b1a13 | 597 | while(!gameRestart) { |
apcastelein | 7:12f7fd2b1a13 | 598 | updateP1(); |
apcastelein | 7:12f7fd2b1a13 | 599 | updateP2(); |
apcastelein | 7:12f7fd2b1a13 | 600 | updateBombs(); |
apcastelein | 7:12f7fd2b1a13 | 601 | checkPlayerDeath(1); |
apcastelein | 7:12f7fd2b1a13 | 602 | checkPlayerDeath(2); |
apcastelein | 7:12f7fd2b1a13 | 603 | draw(); |
apcastelein | 7:12f7fd2b1a13 | 604 | gameTime+=.02; |
apcastelein | 7:12f7fd2b1a13 | 605 | wait(.02); |
apcastelein | 7:12f7fd2b1a13 | 606 | } |
apcastelein | 7:12f7fd2b1a13 | 607 | wait(3); |
apcastelein | 7:12f7fd2b1a13 | 608 | } |
apcastelein | 7:12f7fd2b1a13 | 609 | } |