This is a remake of tetris game for mbed. Please see detail here http://developer.mbed.org/users/sucrelv/notebook/tetris-game-on-mbed

Dependencies:   4DGL-uLCD-SE PinDetect SDFileSystem mbed-rtos mbed wave_player

Committer:
sucrelv
Date:
Tue Oct 21 15:10:36 2014 +0000
Revision:
0:3b5e97ab5884
initial upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sucrelv 0:3b5e97ab5884 1 #include "Pieces.h"
sucrelv 0:3b5e97ab5884 2
sucrelv 0:3b5e97ab5884 3 // Pieces definition
sucrelv 0:3b5e97ab5884 4 char mPieces [7 /*kind */ ][4 /* rotation */ ][5 /* horizontal blocks */ ][5 /* vertical blocks */ ] =
sucrelv 0:3b5e97ab5884 5 {
sucrelv 0:3b5e97ab5884 6 // Square
sucrelv 0:3b5e97ab5884 7 {
sucrelv 0:3b5e97ab5884 8 {
sucrelv 0:3b5e97ab5884 9 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 10 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 11 {0, 0, 2, 1, 0},
sucrelv 0:3b5e97ab5884 12 {0, 0, 1, 1, 0},
sucrelv 0:3b5e97ab5884 13 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 14 },
sucrelv 0:3b5e97ab5884 15 {
sucrelv 0:3b5e97ab5884 16 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 17 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 18 {0, 0, 2, 1, 0},
sucrelv 0:3b5e97ab5884 19 {0, 0, 1, 1, 0},
sucrelv 0:3b5e97ab5884 20 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 21 },
sucrelv 0:3b5e97ab5884 22 {
sucrelv 0:3b5e97ab5884 23 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 24 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 25 {0, 0, 2, 1, 0},
sucrelv 0:3b5e97ab5884 26 {0, 0, 1, 1, 0},
sucrelv 0:3b5e97ab5884 27 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 28 },
sucrelv 0:3b5e97ab5884 29 {
sucrelv 0:3b5e97ab5884 30 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 31 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 32 {0, 0, 2, 1, 0},
sucrelv 0:3b5e97ab5884 33 {0, 0, 1, 1, 0},
sucrelv 0:3b5e97ab5884 34 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 35 }
sucrelv 0:3b5e97ab5884 36 },
sucrelv 0:3b5e97ab5884 37
sucrelv 0:3b5e97ab5884 38 // I
sucrelv 0:3b5e97ab5884 39 {
sucrelv 0:3b5e97ab5884 40 {
sucrelv 0:3b5e97ab5884 41 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 42 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 43 {0, 1, 2, 1, 1},
sucrelv 0:3b5e97ab5884 44 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 45 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 46 },
sucrelv 0:3b5e97ab5884 47 {
sucrelv 0:3b5e97ab5884 48 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 49 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 50 {0, 0, 2, 0, 0},
sucrelv 0:3b5e97ab5884 51 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 52 {0, 0, 1, 0, 0}
sucrelv 0:3b5e97ab5884 53 },
sucrelv 0:3b5e97ab5884 54 {
sucrelv 0:3b5e97ab5884 55 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 56 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 57 {1, 1, 2, 1, 0},
sucrelv 0:3b5e97ab5884 58 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 59 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 60 },
sucrelv 0:3b5e97ab5884 61 {
sucrelv 0:3b5e97ab5884 62 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 63 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 64 {0, 0, 2, 0, 0},
sucrelv 0:3b5e97ab5884 65 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 66 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 67 }
sucrelv 0:3b5e97ab5884 68 }
sucrelv 0:3b5e97ab5884 69 ,
sucrelv 0:3b5e97ab5884 70 // L
sucrelv 0:3b5e97ab5884 71 {
sucrelv 0:3b5e97ab5884 72 {
sucrelv 0:3b5e97ab5884 73 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 74 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 75 {0, 0, 2, 0, 0},
sucrelv 0:3b5e97ab5884 76 {0, 0, 1, 1, 0},
sucrelv 0:3b5e97ab5884 77 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 78 },
sucrelv 0:3b5e97ab5884 79 {
sucrelv 0:3b5e97ab5884 80 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 81 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 82 {0, 1, 2, 1, 0},
sucrelv 0:3b5e97ab5884 83 {0, 1, 0, 0, 0},
sucrelv 0:3b5e97ab5884 84 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 85 },
sucrelv 0:3b5e97ab5884 86 {
sucrelv 0:3b5e97ab5884 87 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 88 {0, 1, 1, 0, 0},
sucrelv 0:3b5e97ab5884 89 {0, 0, 2, 0, 0},
sucrelv 0:3b5e97ab5884 90 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 91 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 92 },
sucrelv 0:3b5e97ab5884 93 {
sucrelv 0:3b5e97ab5884 94 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 95 {0, 0, 0, 1, 0},
sucrelv 0:3b5e97ab5884 96 {0, 1, 2, 1, 0},
sucrelv 0:3b5e97ab5884 97 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 98 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 99 }
sucrelv 0:3b5e97ab5884 100 },
sucrelv 0:3b5e97ab5884 101 // L mirrored
sucrelv 0:3b5e97ab5884 102 {
sucrelv 0:3b5e97ab5884 103 {
sucrelv 0:3b5e97ab5884 104 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 105 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 106 {0, 0, 2, 0, 0},
sucrelv 0:3b5e97ab5884 107 {0, 1, 1, 0, 0},
sucrelv 0:3b5e97ab5884 108 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 109 },
sucrelv 0:3b5e97ab5884 110 {
sucrelv 0:3b5e97ab5884 111 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 112 {0, 1, 0, 0, 0},
sucrelv 0:3b5e97ab5884 113 {0, 1, 2, 1, 0},
sucrelv 0:3b5e97ab5884 114 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 115 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 116 },
sucrelv 0:3b5e97ab5884 117 {
sucrelv 0:3b5e97ab5884 118 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 119 {0, 0, 1, 1, 0},
sucrelv 0:3b5e97ab5884 120 {0, 0, 2, 0, 0},
sucrelv 0:3b5e97ab5884 121 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 122 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 123 },
sucrelv 0:3b5e97ab5884 124 {
sucrelv 0:3b5e97ab5884 125 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 126 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 127 {0, 1, 2, 1, 0},
sucrelv 0:3b5e97ab5884 128 {0, 0, 0, 1, 0},
sucrelv 0:3b5e97ab5884 129 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 130 }
sucrelv 0:3b5e97ab5884 131 },
sucrelv 0:3b5e97ab5884 132 // N
sucrelv 0:3b5e97ab5884 133 {
sucrelv 0:3b5e97ab5884 134 {
sucrelv 0:3b5e97ab5884 135 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 136 {0, 0, 0, 1, 0},
sucrelv 0:3b5e97ab5884 137 {0, 0, 2, 1, 0},
sucrelv 0:3b5e97ab5884 138 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 139 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 140 },
sucrelv 0:3b5e97ab5884 141 {
sucrelv 0:3b5e97ab5884 142 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 143 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 144 {0, 1, 2, 0, 0},
sucrelv 0:3b5e97ab5884 145 {0, 0, 1, 1, 0},
sucrelv 0:3b5e97ab5884 146 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 147 },
sucrelv 0:3b5e97ab5884 148 {
sucrelv 0:3b5e97ab5884 149 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 150 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 151 {0, 1, 2, 0, 0},
sucrelv 0:3b5e97ab5884 152 {0, 1, 0, 0, 0},
sucrelv 0:3b5e97ab5884 153 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 154 },
sucrelv 0:3b5e97ab5884 155 {
sucrelv 0:3b5e97ab5884 156 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 157 {0, 1, 1, 0, 0},
sucrelv 0:3b5e97ab5884 158 {0, 0, 2, 1, 0},
sucrelv 0:3b5e97ab5884 159 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 160 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 161 }
sucrelv 0:3b5e97ab5884 162 },
sucrelv 0:3b5e97ab5884 163 // N mirrored
sucrelv 0:3b5e97ab5884 164 {
sucrelv 0:3b5e97ab5884 165 {
sucrelv 0:3b5e97ab5884 166 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 167 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 168 {0, 0, 2, 1, 0},
sucrelv 0:3b5e97ab5884 169 {0, 0, 0, 1, 0},
sucrelv 0:3b5e97ab5884 170 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 171 },
sucrelv 0:3b5e97ab5884 172 {
sucrelv 0:3b5e97ab5884 173 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 174 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 175 {0, 0, 2, 1, 0},
sucrelv 0:3b5e97ab5884 176 {0, 1, 1, 0, 0},
sucrelv 0:3b5e97ab5884 177 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 178 },
sucrelv 0:3b5e97ab5884 179 {
sucrelv 0:3b5e97ab5884 180 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 181 {0, 1, 0, 0, 0},
sucrelv 0:3b5e97ab5884 182 {0, 1, 2, 0, 0},
sucrelv 0:3b5e97ab5884 183 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 184 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 185 },
sucrelv 0:3b5e97ab5884 186 {
sucrelv 0:3b5e97ab5884 187 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 188 {0, 0, 1, 1, 0},
sucrelv 0:3b5e97ab5884 189 {0, 1, 2, 0, 0},
sucrelv 0:3b5e97ab5884 190 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 191 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 192 }
sucrelv 0:3b5e97ab5884 193 },
sucrelv 0:3b5e97ab5884 194 // T
sucrelv 0:3b5e97ab5884 195 {
sucrelv 0:3b5e97ab5884 196 {
sucrelv 0:3b5e97ab5884 197 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 198 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 199 {0, 0, 2, 1, 0},
sucrelv 0:3b5e97ab5884 200 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 201 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 202 },
sucrelv 0:3b5e97ab5884 203 {
sucrelv 0:3b5e97ab5884 204 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 205 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 206 {0, 1, 2, 1, 0},
sucrelv 0:3b5e97ab5884 207 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 208 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 209 },
sucrelv 0:3b5e97ab5884 210 {
sucrelv 0:3b5e97ab5884 211 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 212 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 213 {0, 1, 2, 0, 0},
sucrelv 0:3b5e97ab5884 214 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 215 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 216 },
sucrelv 0:3b5e97ab5884 217 {
sucrelv 0:3b5e97ab5884 218 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 219 {0, 0, 1, 0, 0},
sucrelv 0:3b5e97ab5884 220 {0, 1, 2, 1, 0},
sucrelv 0:3b5e97ab5884 221 {0, 0, 0, 0, 0},
sucrelv 0:3b5e97ab5884 222 {0, 0, 0, 0, 0}
sucrelv 0:3b5e97ab5884 223 }
sucrelv 0:3b5e97ab5884 224 }
sucrelv 0:3b5e97ab5884 225 };
sucrelv 0:3b5e97ab5884 226
sucrelv 0:3b5e97ab5884 227
sucrelv 0:3b5e97ab5884 228 // Displacement of the piece to the position where it is first drawn in the board when it is created
sucrelv 0:3b5e97ab5884 229 int mPiecesInitialPosition [7 /*kind */ ][4 /* rotation */ ][2 /* position */] =
sucrelv 0:3b5e97ab5884 230 {
sucrelv 0:3b5e97ab5884 231 /* Square */
sucrelv 0:3b5e97ab5884 232 {
sucrelv 0:3b5e97ab5884 233 {-2, -3},
sucrelv 0:3b5e97ab5884 234 {-2, -3},
sucrelv 0:3b5e97ab5884 235 {-2, -3},
sucrelv 0:3b5e97ab5884 236 {-2, -3}
sucrelv 0:3b5e97ab5884 237 },
sucrelv 0:3b5e97ab5884 238 /* I */
sucrelv 0:3b5e97ab5884 239 {
sucrelv 0:3b5e97ab5884 240 {-2, -2},
sucrelv 0:3b5e97ab5884 241 {-2, -3},
sucrelv 0:3b5e97ab5884 242 {-2, -2},
sucrelv 0:3b5e97ab5884 243 {-2, -3}
sucrelv 0:3b5e97ab5884 244 },
sucrelv 0:3b5e97ab5884 245 /* L */
sucrelv 0:3b5e97ab5884 246 {
sucrelv 0:3b5e97ab5884 247 {-2, -3},
sucrelv 0:3b5e97ab5884 248 {-2, -3},
sucrelv 0:3b5e97ab5884 249 {-2, -3},
sucrelv 0:3b5e97ab5884 250 {-2, -2}
sucrelv 0:3b5e97ab5884 251 },
sucrelv 0:3b5e97ab5884 252 /* L mirrored */
sucrelv 0:3b5e97ab5884 253 {
sucrelv 0:3b5e97ab5884 254 {-2, -3},
sucrelv 0:3b5e97ab5884 255 {-2, -2},
sucrelv 0:3b5e97ab5884 256 {-2, -3},
sucrelv 0:3b5e97ab5884 257 {-2, -3}
sucrelv 0:3b5e97ab5884 258 },
sucrelv 0:3b5e97ab5884 259 /* N */
sucrelv 0:3b5e97ab5884 260 {
sucrelv 0:3b5e97ab5884 261 {-2, -3},
sucrelv 0:3b5e97ab5884 262 {-2, -3},
sucrelv 0:3b5e97ab5884 263 {-2, -3},
sucrelv 0:3b5e97ab5884 264 {-2, -2}
sucrelv 0:3b5e97ab5884 265 },
sucrelv 0:3b5e97ab5884 266 /* N mirrored */
sucrelv 0:3b5e97ab5884 267 {
sucrelv 0:3b5e97ab5884 268 {-2, -3},
sucrelv 0:3b5e97ab5884 269 {-2, -3},
sucrelv 0:3b5e97ab5884 270 {-2, -3},
sucrelv 0:3b5e97ab5884 271 {-2, -2}
sucrelv 0:3b5e97ab5884 272 },
sucrelv 0:3b5e97ab5884 273 /* T */
sucrelv 0:3b5e97ab5884 274 {
sucrelv 0:3b5e97ab5884 275 {-2, -3},
sucrelv 0:3b5e97ab5884 276 {-2, -3},
sucrelv 0:3b5e97ab5884 277 {-2, -3},
sucrelv 0:3b5e97ab5884 278 {-2, -2}
sucrelv 0:3b5e97ab5884 279 },
sucrelv 0:3b5e97ab5884 280 };
sucrelv 0:3b5e97ab5884 281
sucrelv 0:3b5e97ab5884 282
sucrelv 0:3b5e97ab5884 283 /*
sucrelv 0:3b5e97ab5884 284 ======================================
sucrelv 0:3b5e97ab5884 285 Return the type of a block (0 = no-block, 1 = normal block, 2 = pivot block)
sucrelv 0:3b5e97ab5884 286
sucrelv 0:3b5e97ab5884 287 Parameters:
sucrelv 0:3b5e97ab5884 288
sucrelv 0:3b5e97ab5884 289 >> pPiece: Piece to draw
sucrelv 0:3b5e97ab5884 290 >> pRotation: 1 of the 4 possible rotations
sucrelv 0:3b5e97ab5884 291 >> pX: Horizontal position in blocks
sucrelv 0:3b5e97ab5884 292 >> pY: Vertical position in blocks
sucrelv 0:3b5e97ab5884 293 ======================================
sucrelv 0:3b5e97ab5884 294 */
sucrelv 0:3b5e97ab5884 295 int Pieces::GetBlockType (int pPiece, int pRotation, int pX, int pY)
sucrelv 0:3b5e97ab5884 296 {
sucrelv 0:3b5e97ab5884 297 return mPieces [pPiece][pRotation][pX][pY];
sucrelv 0:3b5e97ab5884 298 }
sucrelv 0:3b5e97ab5884 299
sucrelv 0:3b5e97ab5884 300
sucrelv 0:3b5e97ab5884 301 /*
sucrelv 0:3b5e97ab5884 302 ======================================
sucrelv 0:3b5e97ab5884 303 Returns the horizontal displacement of the piece that has to be applied in order to create it in the
sucrelv 0:3b5e97ab5884 304 correct position.
sucrelv 0:3b5e97ab5884 305
sucrelv 0:3b5e97ab5884 306 Parameters:
sucrelv 0:3b5e97ab5884 307
sucrelv 0:3b5e97ab5884 308 >> pPiece: Piece to draw
sucrelv 0:3b5e97ab5884 309 >> pRotation: 1 of the 4 possible rotations
sucrelv 0:3b5e97ab5884 310 ======================================
sucrelv 0:3b5e97ab5884 311 */
sucrelv 0:3b5e97ab5884 312 int Pieces::GetXInitialPosition (int pPiece, int pRotation)
sucrelv 0:3b5e97ab5884 313 {
sucrelv 0:3b5e97ab5884 314 return mPiecesInitialPosition [pPiece][pRotation][0];
sucrelv 0:3b5e97ab5884 315 }
sucrelv 0:3b5e97ab5884 316
sucrelv 0:3b5e97ab5884 317
sucrelv 0:3b5e97ab5884 318 /*
sucrelv 0:3b5e97ab5884 319 ======================================
sucrelv 0:3b5e97ab5884 320 Returns the vertical displacement of the piece that has to be applied in order to create it in the
sucrelv 0:3b5e97ab5884 321 correct position.
sucrelv 0:3b5e97ab5884 322
sucrelv 0:3b5e97ab5884 323 Parameters:
sucrelv 0:3b5e97ab5884 324
sucrelv 0:3b5e97ab5884 325 >> pPiece: Piece to draw
sucrelv 0:3b5e97ab5884 326 >> pRotation: 1 of the 4 possible rotations
sucrelv 0:3b5e97ab5884 327 ======================================
sucrelv 0:3b5e97ab5884 328 */
sucrelv 0:3b5e97ab5884 329 int Pieces::GetYInitialPosition (int pPiece, int pRotation)
sucrelv 0:3b5e97ab5884 330 {
sucrelv 0:3b5e97ab5884 331 return mPiecesInitialPosition [pPiece][pRotation][1];
sucrelv 0:3b5e97ab5884 332 }