Falling block game

Dependencies:   4DGL-uLCD-SE mbed-rtos mbed

Committer:
jdixon37
Date:
Tue Nov 01 21:18:37 2016 +0000
Revision:
0:082ea236ed4c
n/a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jdixon37 0:082ea236ed4c 1 #include "mbed.h"
jdixon37 0:082ea236ed4c 2 #include <iostream>
jdixon37 0:082ea236ed4c 3 #include "uLCD_4DGL.h"
jdixon37 0:082ea236ed4c 4 #define PINK 0xF00FF0
jdixon37 0:082ea236ed4c 5
jdixon37 0:082ea236ed4c 6 uLCD_4DGL uLCD(p28,p27,p30); // serial tx, serial rx, reset pin;
jdixon37 0:082ea236ed4c 7 DigitalOut led1(LED1);
jdixon37 0:082ea236ed4c 8 //interrupt page: https://developer.mbed.org/handbook/InterruptIn
jdixon37 0:082ea236ed4c 9 InterruptIn upJ(p14);
jdixon37 0:082ea236ed4c 10 InterruptIn downJ(p15);
jdixon37 0:082ea236ed4c 11 InterruptIn leftJ(p16);
jdixon37 0:082ea236ed4c 12 InterruptIn rightJ(p17);
jdixon37 0:082ea236ed4c 13 InterruptIn fireJ(p18);
jdixon37 0:082ea236ed4c 14
jdixon37 0:082ea236ed4c 15 PwmOut haptic(p21);
jdixon37 0:082ea236ed4c 16
jdixon37 0:082ea236ed4c 17 void vibrate_short(){
jdixon37 0:082ea236ed4c 18 haptic = 1;
jdixon37 0:082ea236ed4c 19 wait(0.1);
jdixon37 0:082ea236ed4c 20 haptic = 0;
jdixon37 0:082ea236ed4c 21 }
jdixon37 0:082ea236ed4c 22
jdixon37 0:082ea236ed4c 23 using namespace std;
jdixon37 0:082ea236ed4c 24
jdixon37 0:082ea236ed4c 25
jdixon37 0:082ea236ed4c 26 #define BOARD_WIDTH 8
jdixon37 0:082ea236ed4c 27 #define BOARD_HEIGHT 16
jdixon37 0:082ea236ed4c 28 #define GAME_SPEED 1
jdixon37 0:082ea236ed4c 29
jdixon37 0:082ea236ed4c 30 const int black = 0;
jdixon37 0:082ea236ed4c 31 const int blue = 1;
jdixon37 0:082ea236ed4c 32 const int red = 2;
jdixon37 0:082ea236ed4c 33 const int pink = 3;
jdixon37 0:082ea236ed4c 34 const int blueGerm = 4;
jdixon37 0:082ea236ed4c 35 const int redGerm = 5;
jdixon37 0:082ea236ed4c 36 const int pinkGerm = 6;
jdixon37 0:082ea236ed4c 37
jdixon37 0:082ea236ed4c 38 int totalGermCount = 2;
jdixon37 0:082ea236ed4c 39 time_t t1, t2;
jdixon37 0:082ea236ed4c 40 double timeDif = 0;
jdixon37 0:082ea236ed4c 41
jdixon37 0:082ea236ed4c 42 int myPosX;
jdixon37 0:082ea236ed4c 43 int myPosY;
jdixon37 0:082ea236ed4c 44 int myPiece;
jdixon37 0:082ea236ed4c 45 int myNextPiece;
jdixon37 0:082ea236ed4c 46
jdixon37 0:082ea236ed4c 47 int myBoard[BOARD_WIDTH][BOARD_HEIGHT];
jdixon37 0:082ea236ed4c 48
jdixon37 0:082ea236ed4c 49 bool isFreeBlock(int aXPos, int aYPos)
jdixon37 0:082ea236ed4c 50 {
jdixon37 0:082ea236ed4c 51
jdixon37 0:082ea236ed4c 52 if(myBoard[aXPos][aYPos] == 0){
jdixon37 0:082ea236ed4c 53 return true;
jdixon37 0:082ea236ed4c 54 }else {
jdixon37 0:082ea236ed4c 55 return false;
jdixon37 0:082ea236ed4c 56 }
jdixon37 0:082ea236ed4c 57 }
jdixon37 0:082ea236ed4c 58
jdixon37 0:082ea236ed4c 59 void storePiece(int aXPos, int aYPos, int aColor)
jdixon37 0:082ea236ed4c 60 {
jdixon37 0:082ea236ed4c 61
jdixon37 0:082ea236ed4c 62 myBoard[aXPos][aYPos] = aColor;
jdixon37 0:082ea236ed4c 63
jdixon37 0:082ea236ed4c 64 }
jdixon37 0:082ea236ed4c 65
jdixon37 0:082ea236ed4c 66 void DeleteLine(int aXPos, int aYPos, int aDirection)
jdixon37 0:082ea236ed4c 67 {
jdixon37 0:082ea236ed4c 68 vibrate_short();
jdixon37 0:082ea236ed4c 69 for(int j = aYPos; j > 0; j--)
jdixon37 0:082ea236ed4c 70 {
jdixon37 0:082ea236ed4c 71 for(int i = 0; i < BOARD_WIDTH; i++)
jdixon37 0:082ea236ed4c 72 {
jdixon37 0:082ea236ed4c 73
jdixon37 0:082ea236ed4c 74 myBoard[i][j] = myBoard[i][j-1];
jdixon37 0:082ea236ed4c 75
jdixon37 0:082ea236ed4c 76
jdixon37 0:082ea236ed4c 77 }
jdixon37 0:082ea236ed4c 78 }
jdixon37 0:082ea236ed4c 79 }
jdixon37 0:082ea236ed4c 80
jdixon37 0:082ea236ed4c 81 bool isPossibleMovementY(int aXPos,int aYPos)
jdixon37 0:082ea236ed4c 82 {
jdixon37 0:082ea236ed4c 83 if((aYPos < BOARD_HEIGHT) && (myBoard[aXPos][aYPos] == 0))
jdixon37 0:082ea236ed4c 84 {
jdixon37 0:082ea236ed4c 85 return true;
jdixon37 0:082ea236ed4c 86 }
jdixon37 0:082ea236ed4c 87 else
jdixon37 0:082ea236ed4c 88 {
jdixon37 0:082ea236ed4c 89 return false;
jdixon37 0:082ea236ed4c 90 }
jdixon37 0:082ea236ed4c 91 }
jdixon37 0:082ea236ed4c 92
jdixon37 0:082ea236ed4c 93 bool isPossibleMovementX(int aXPos, int aYPos)
jdixon37 0:082ea236ed4c 94 {
jdixon37 0:082ea236ed4c 95 if((aXPos >= 0) && (aXPos < BOARD_WIDTH) && (myBoard[aXPos][aYPos] == 0)){
jdixon37 0:082ea236ed4c 96 return true;
jdixon37 0:082ea236ed4c 97 } else{
jdixon37 0:082ea236ed4c 98 return false;
jdixon37 0:082ea236ed4c 99 }
jdixon37 0:082ea236ed4c 100 }
jdixon37 0:082ea236ed4c 101
jdixon37 0:082ea236ed4c 102 void deletePossibleLines(void)
jdixon37 0:082ea236ed4c 103 {
jdixon37 0:082ea236ed4c 104 int localGerm = 0;
jdixon37 0:082ea236ed4c 105
jdixon37 0:082ea236ed4c 106 for(int jj = 0; jj < BOARD_HEIGHT; jj++)
jdixon37 0:082ea236ed4c 107 {
jdixon37 0:082ea236ed4c 108 int theColor2Delete = myBoard[0][jj];
jdixon37 0:082ea236ed4c 109 int colorCount = 0;
jdixon37 0:082ea236ed4c 110 int ii = 0;
jdixon37 0:082ea236ed4c 111 while(ii < BOARD_WIDTH)
jdixon37 0:082ea236ed4c 112 {
jdixon37 0:082ea236ed4c 113 if ((myBoard[ii][jj] >= 4) && (myBoard[ii][jj] <= 6))
jdixon37 0:082ea236ed4c 114 {
jdixon37 0:082ea236ed4c 115 localGerm++;
jdixon37 0:082ea236ed4c 116 }
jdixon37 0:082ea236ed4c 117
jdixon37 0:082ea236ed4c 118 if(((myBoard[ii][jj] == theColor2Delete) ||
jdixon37 0:082ea236ed4c 119 (myBoard[ii][jj] == theColor2Delete + 3)) &&
jdixon37 0:082ea236ed4c 120 (myBoard[ii][jj] != 0)){
jdixon37 0:082ea236ed4c 121 colorCount++;
jdixon37 0:082ea236ed4c 122 }
jdixon37 0:082ea236ed4c 123 if(myBoard[ii][jj] == black)
jdixon37 0:082ea236ed4c 124 {
jdixon37 0:082ea236ed4c 125 break;
jdixon37 0:082ea236ed4c 126 }
jdixon37 0:082ea236ed4c 127 ii++;
jdixon37 0:082ea236ed4c 128 }
jdixon37 0:082ea236ed4c 129 if((ii == BOARD_WIDTH) && (colorCount == BOARD_WIDTH)){
jdixon37 0:082ea236ed4c 130 DeleteLine(0,jj,0);
jdixon37 0:082ea236ed4c 131 totalGermCount = totalGermCount - localGerm;
jdixon37 0:082ea236ed4c 132 }
jdixon37 0:082ea236ed4c 133 }
jdixon37 0:082ea236ed4c 134 }
jdixon37 0:082ea236ed4c 135
jdixon37 0:082ea236ed4c 136 bool isGameOver(void)
jdixon37 0:082ea236ed4c 137 {
jdixon37 0:082ea236ed4c 138 if (totalGermCount == 0)
jdixon37 0:082ea236ed4c 139 {
jdixon37 0:082ea236ed4c 140 return true;
jdixon37 0:082ea236ed4c 141
jdixon37 0:082ea236ed4c 142 }
jdixon37 0:082ea236ed4c 143 for(int i = 0; i < BOARD_WIDTH; i++)
jdixon37 0:082ea236ed4c 144 {
jdixon37 0:082ea236ed4c 145 if(myBoard[i][0] != 0)
jdixon37 0:082ea236ed4c 146 {
jdixon37 0:082ea236ed4c 147 return true;
jdixon37 0:082ea236ed4c 148 }
jdixon37 0:082ea236ed4c 149
jdixon37 0:082ea236ed4c 150 return false;
jdixon37 0:082ea236ed4c 151 }
jdixon37 0:082ea236ed4c 152 return true;
jdixon37 0:082ea236ed4c 153 }
jdixon37 0:082ea236ed4c 154
jdixon37 0:082ea236ed4c 155 void initializeBoard()
jdixon37 0:082ea236ed4c 156 {
jdixon37 0:082ea236ed4c 157 for (int i = 0; i < BOARD_WIDTH; i++)
jdixon37 0:082ea236ed4c 158 {
jdixon37 0:082ea236ed4c 159 for(int j = 0; j < BOARD_HEIGHT; j++)
jdixon37 0:082ea236ed4c 160 {
jdixon37 0:082ea236ed4c 161
jdixon37 0:082ea236ed4c 162 myBoard[i][j] = black;
jdixon37 0:082ea236ed4c 163
jdixon37 0:082ea236ed4c 164 }
jdixon37 0:082ea236ed4c 165 }
jdixon37 0:082ea236ed4c 166
jdixon37 0:082ea236ed4c 167 myBoard[6][15] = blueGerm;
jdixon37 0:082ea236ed4c 168 myBoard[0][15] = blue;
jdixon37 0:082ea236ed4c 169 myBoard[1][15] = blue;
jdixon37 0:082ea236ed4c 170 myBoard[2][15] = blue;
jdixon37 0:082ea236ed4c 171
jdixon37 0:082ea236ed4c 172 myBoard[4][15] = blue;
jdixon37 0:082ea236ed4c 173 myBoard[5][15] = blue;
jdixon37 0:082ea236ed4c 174
jdixon37 0:082ea236ed4c 175 myBoard[6][14] = redGerm;
jdixon37 0:082ea236ed4c 176 myBoard[0][14] = red;
jdixon37 0:082ea236ed4c 177 myBoard[1][14] = red;
jdixon37 0:082ea236ed4c 178 myBoard[2][14] = red;
jdixon37 0:082ea236ed4c 179 myBoard[3][14] = red;
jdixon37 0:082ea236ed4c 180 myBoard[4][14] = red;
jdixon37 0:082ea236ed4c 181
jdixon37 0:082ea236ed4c 182
jdixon37 0:082ea236ed4c 183
jdixon37 0:082ea236ed4c 184
jdixon37 0:082ea236ed4c 185 }
jdixon37 0:082ea236ed4c 186
jdixon37 0:082ea236ed4c 187
jdixon37 0:082ea236ed4c 188 void DrawScene(void);
jdixon37 0:082ea236ed4c 189
jdixon37 0:082ea236ed4c 190
jdixon37 0:082ea236ed4c 191
jdixon37 0:082ea236ed4c 192
jdixon37 0:082ea236ed4c 193 void DrawPiece(int x, int y, int aColor)
jdixon37 0:082ea236ed4c 194 {
jdixon37 0:082ea236ed4c 195
jdixon37 0:082ea236ed4c 196 myBoard[x][y] = aColor;
jdixon37 0:082ea236ed4c 197
jdixon37 0:082ea236ed4c 198
jdixon37 0:082ea236ed4c 199 x = x * 8;
jdixon37 0:082ea236ed4c 200 y = y * 8;
jdixon37 0:082ea236ed4c 201
jdixon37 0:082ea236ed4c 202 if (aColor == blue){
jdixon37 0:082ea236ed4c 203 uLCD.filled_rectangle(x, y, x+7, y+7, BLUE);
jdixon37 0:082ea236ed4c 204 }
jdixon37 0:082ea236ed4c 205
jdixon37 0:082ea236ed4c 206 if (aColor == red){
jdixon37 0:082ea236ed4c 207 uLCD.filled_rectangle(x, y, x+7, y+7, RED);
jdixon37 0:082ea236ed4c 208 }
jdixon37 0:082ea236ed4c 209
jdixon37 0:082ea236ed4c 210 if (aColor == black){
jdixon37 0:082ea236ed4c 211 uLCD.filled_rectangle(x, y, x+7, y+7, BLACK);
jdixon37 0:082ea236ed4c 212 }
jdixon37 0:082ea236ed4c 213
jdixon37 0:082ea236ed4c 214 if (aColor == redGerm){
jdixon37 0:082ea236ed4c 215 uLCD.filled_rectangle(x, y, x+7, y+7, RED);
jdixon37 0:082ea236ed4c 216 uLCD.filled_rectangle(x+1, y+1, x+6,y+6,BLACK);
jdixon37 0:082ea236ed4c 217 uLCD.filled_rectangle(x+2,y+2, x+5, y+5, RED);
jdixon37 0:082ea236ed4c 218 }
jdixon37 0:082ea236ed4c 219
jdixon37 0:082ea236ed4c 220 if (aColor == blueGerm){
jdixon37 0:082ea236ed4c 221 uLCD.filled_rectangle(x, y, x+7, y+7, BLUE);
jdixon37 0:082ea236ed4c 222 uLCD.filled_rectangle(x+1, y+1, x+6,y+6,BLACK);
jdixon37 0:082ea236ed4c 223 uLCD.filled_rectangle(x+2,y+2, x+5, y+5, BLUE);
jdixon37 0:082ea236ed4c 224 }
jdixon37 0:082ea236ed4c 225
jdixon37 0:082ea236ed4c 226 if (aColor == pinkGerm){
jdixon37 0:082ea236ed4c 227 uLCD.filled_rectangle(x, y, x+7, y+7, PINK);
jdixon37 0:082ea236ed4c 228 uLCD.filled_rectangle(x+1, y+1, x+6,y+6,BLACK);
jdixon37 0:082ea236ed4c 229 uLCD.filled_rectangle(x+2,y+2, x+5, y+5, PINK);
jdixon37 0:082ea236ed4c 230 }
jdixon37 0:082ea236ed4c 231
jdixon37 0:082ea236ed4c 232
jdixon37 0:082ea236ed4c 233
jdixon37 0:082ea236ed4c 234 }
jdixon37 0:082ea236ed4c 235
jdixon37 0:082ea236ed4c 236 void DrawRow(int aY)
jdixon37 0:082ea236ed4c 237 {
jdixon37 0:082ea236ed4c 238 for(int i = 0; i < BOARD_WIDTH; i++)
jdixon37 0:082ea236ed4c 239 {
jdixon37 0:082ea236ed4c 240 DrawPiece(i,aY, myBoard[i][aY]);
jdixon37 0:082ea236ed4c 241 }
jdixon37 0:082ea236ed4c 242 }
jdixon37 0:082ea236ed4c 243
jdixon37 0:082ea236ed4c 244 void DrawBoard()
jdixon37 0:082ea236ed4c 245 {
jdixon37 0:082ea236ed4c 246 for(int j = 0; j<BOARD_HEIGHT; j++)
jdixon37 0:082ea236ed4c 247 {
jdixon37 0:082ea236ed4c 248 DrawRow(j);
jdixon37 0:082ea236ed4c 249 }
jdixon37 0:082ea236ed4c 250
jdixon37 0:082ea236ed4c 251 }
jdixon37 0:082ea236ed4c 252
jdixon37 0:082ea236ed4c 253 int GetRand(int A, int B)
jdixon37 0:082ea236ed4c 254 {
jdixon37 0:082ea236ed4c 255 return rand() % (B - A + 1) + A;
jdixon37 0:082ea236ed4c 256 }
jdixon37 0:082ea236ed4c 257
jdixon37 0:082ea236ed4c 258 void initializeGame(void)
jdixon37 0:082ea236ed4c 259 {
jdixon37 0:082ea236ed4c 260 myPiece = GetRand(1,2);
jdixon37 0:082ea236ed4c 261 myPosX = 4;
jdixon37 0:082ea236ed4c 262 myPosY = 0;
jdixon37 0:082ea236ed4c 263
jdixon37 0:082ea236ed4c 264 myNextPiece = GetRand(0,2);
jdixon37 0:082ea236ed4c 265
jdixon37 0:082ea236ed4c 266 }
jdixon37 0:082ea236ed4c 267
jdixon37 0:082ea236ed4c 268 void CreateNewPiece(void)
jdixon37 0:082ea236ed4c 269 {
jdixon37 0:082ea236ed4c 270 myPiece = myNextPiece;
jdixon37 0:082ea236ed4c 271 myPosX = 4;
jdixon37 0:082ea236ed4c 272 myPosY = 0;
jdixon37 0:082ea236ed4c 273 myNextPiece = GetRand(1,2);
jdixon37 0:082ea236ed4c 274 }
jdixon37 0:082ea236ed4c 275
jdixon37 0:082ea236ed4c 276 void drawSingle(int x, int y, int color)
jdixon37 0:082ea236ed4c 277 {
jdixon37 0:082ea236ed4c 278 uLCD.filled_rectangle(x, y, x+7, y+7, color);
jdixon37 0:082ea236ed4c 279 }
jdixon37 0:082ea236ed4c 280
jdixon37 0:082ea236ed4c 281
jdixon37 0:082ea236ed4c 282 void movePillLeft()
jdixon37 0:082ea236ed4c 283 {
jdixon37 0:082ea236ed4c 284
jdixon37 0:082ea236ed4c 285 if(isPossibleMovementX(myPosX + 1,myPosY)){
jdixon37 0:082ea236ed4c 286 myBoard[myPosX][myPosY] = black;
jdixon37 0:082ea236ed4c 287 myPosX = myPosX + 1;
jdixon37 0:082ea236ed4c 288 }
jdixon37 0:082ea236ed4c 289 // DrawPiece(myPosX, myPosY, myPiece);
jdixon37 0:082ea236ed4c 290
jdixon37 0:082ea236ed4c 291 //
jdixon37 0:082ea236ed4c 292 }
jdixon37 0:082ea236ed4c 293
jdixon37 0:082ea236ed4c 294 void movePillRight()
jdixon37 0:082ea236ed4c 295 {
jdixon37 0:082ea236ed4c 296
jdixon37 0:082ea236ed4c 297 if(isPossibleMovementX(myPosX - 1,myPosY)){
jdixon37 0:082ea236ed4c 298 myBoard[myPosX][myPosY] = black;
jdixon37 0:082ea236ed4c 299 myPosX = myPosX-1;
jdixon37 0:082ea236ed4c 300 }
jdixon37 0:082ea236ed4c 301 // DrawPiece(myPosX, myPosY, myPiece);
jdixon37 0:082ea236ed4c 302
jdixon37 0:082ea236ed4c 303 }
jdixon37 0:082ea236ed4c 304
jdixon37 0:082ea236ed4c 305 void movePillDown()
jdixon37 0:082ea236ed4c 306 {
jdixon37 0:082ea236ed4c 307
jdixon37 0:082ea236ed4c 308 // DrawPiece(myPosX, myPosY, black);
jdixon37 0:082ea236ed4c 309 myBoard[myPosX][myPosY] = black;
jdixon37 0:082ea236ed4c 310 myPosY = myPosY + 1;
jdixon37 0:082ea236ed4c 311 // DrawPiece(myPosX, myPosY, myPiece);
jdixon37 0:082ea236ed4c 312
jdixon37 0:082ea236ed4c 313
jdixon37 0:082ea236ed4c 314 }
jdixon37 0:082ea236ed4c 315
jdixon37 0:082ea236ed4c 316
jdixon37 0:082ea236ed4c 317 void endGame(void)
jdixon37 0:082ea236ed4c 318 {
jdixon37 0:082ea236ed4c 319 uLCD.filled_rectangle(0, 0, 128, 128, GREEN);
jdixon37 0:082ea236ed4c 320 wait(10);
jdixon37 0:082ea236ed4c 321 exit(0);
jdixon37 0:082ea236ed4c 322
jdixon37 0:082ea236ed4c 323 }
jdixon37 0:082ea236ed4c 324
jdixon37 0:082ea236ed4c 325
jdixon37 0:082ea236ed4c 326 int main()
jdixon37 0:082ea236ed4c 327 {
jdixon37 0:082ea236ed4c 328
jdixon37 0:082ea236ed4c 329 uLCD.baudrate(3000000);
jdixon37 0:082ea236ed4c 330
jdixon37 0:082ea236ed4c 331
jdixon37 0:082ea236ed4c 332 initializeGame();
jdixon37 0:082ea236ed4c 333 initializeBoard();
jdixon37 0:082ea236ed4c 334
jdixon37 0:082ea236ed4c 335 downJ.rise(&movePillDown);
jdixon37 0:082ea236ed4c 336 leftJ.rise(&movePillLeft);
jdixon37 0:082ea236ed4c 337 rightJ.rise(&movePillRight);
jdixon37 0:082ea236ed4c 338
jdixon37 0:082ea236ed4c 339 t1 = time(NULL);
jdixon37 0:082ea236ed4c 340 t2 = time(NULL);
jdixon37 0:082ea236ed4c 341 while(1){
jdixon37 0:082ea236ed4c 342 t2 = time(NULL);
jdixon37 0:082ea236ed4c 343 timeDif = t2 - t1;
jdixon37 0:082ea236ed4c 344 if(timeDif > 1)
jdixon37 0:082ea236ed4c 345 {
jdixon37 0:082ea236ed4c 346 if(isPossibleMovementY(myPosX,myPosY + 1))
jdixon37 0:082ea236ed4c 347 {
jdixon37 0:082ea236ed4c 348
jdixon37 0:082ea236ed4c 349 DrawPiece(myPosX,myPosY, black);
jdixon37 0:082ea236ed4c 350 myPosY++;
jdixon37 0:082ea236ed4c 351 DrawPiece(myPosX,myPosY,myPiece);
jdixon37 0:082ea236ed4c 352 DrawBoard();
jdixon37 0:082ea236ed4c 353
jdixon37 0:082ea236ed4c 354 t2 = time(NULL);
jdixon37 0:082ea236ed4c 355
jdixon37 0:082ea236ed4c 356 }
jdixon37 0:082ea236ed4c 357 else
jdixon37 0:082ea236ed4c 358 {
jdixon37 0:082ea236ed4c 359 t1 = time(NULL);
jdixon37 0:082ea236ed4c 360 storePiece(myPosX,myPosY,myPiece);
jdixon37 0:082ea236ed4c 361
jdixon37 0:082ea236ed4c 362 DrawPiece(myPosX,myPosY,myPiece);
jdixon37 0:082ea236ed4c 363 deletePossibleLines();
jdixon37 0:082ea236ed4c 364
jdixon37 0:082ea236ed4c 365 if(isGameOver()){
jdixon37 0:082ea236ed4c 366 endGame();
jdixon37 0:082ea236ed4c 367 }
jdixon37 0:082ea236ed4c 368
jdixon37 0:082ea236ed4c 369 CreateNewPiece();
jdixon37 0:082ea236ed4c 370 }
jdixon37 0:082ea236ed4c 371 }
jdixon37 0:082ea236ed4c 372 }
jdixon37 0:082ea236ed4c 373
jdixon37 0:082ea236ed4c 374
jdixon37 0:082ea236ed4c 375 }