"Lost treasure of mBedungu" 100 level puzzle game for RETRO

Dependencies:   LCD_ST7735 RetroPlatform mbed

Into Level 0 Menu Level 99

Committer:
Architect
Date:
Sat Feb 21 06:19:29 2015 +0000
Revision:
0:f5f961973d01
Child:
1:dcea5500a32d
Before switching to 16 colors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Architect 0:f5f961973d01 1 #include "GameScreen.h"
Architect 0:f5f961973d01 2 #include "Retro.h"
Architect 0:f5f961973d01 3 #include "Sprites.h"
Architect 0:f5f961973d01 4 #include "Levels.h"
Architect 0:f5f961973d01 5
Architect 0:f5f961973d01 6 extern Retro retro;
Architect 0:f5f961973d01 7
Architect 0:f5f961973d01 8 #ifdef FULL_COLOR
Architect 0:f5f961973d01 9 const uint16_t * sprites[] = {
Architect 0:f5f961973d01 10 #else
Architect 0:f5f961973d01 11 const uint8_t * sprites[] = {
Architect 0:f5f961973d01 12 #endif
Architect 0:f5f961973d01 13 NULL,
Architect 0:f5f961973d01 14 wall,
Architect 0:f5f961973d01 15 barrel,
Architect 0:f5f961973d01 16 ladder,
Architect 0:f5f961973d01 17 key,
Architect 0:f5f961973d01 18 door,
Architect 0:f5f961973d01 19 left,
Architect 0:f5f961973d01 20 right,
Architect 0:f5f961973d01 21 crate,
Architect 0:f5f961973d01 22 totem,
Architect 0:f5f961973d01 23 rick
Architect 0:f5f961973d01 24 };
Architect 0:f5f961973d01 25
Architect 0:f5f961973d01 26 GameScreen::GameScreen()
Architect 0:f5f961973d01 27 {
Architect 0:f5f961973d01 28 _level = 0;
Architect 0:f5f961973d01 29 _state = 0;
Architect 0:f5f961973d01 30 _pocket[0] = 0;
Architect 0:f5f961973d01 31 _pocket[1] = 0;
Architect 0:f5f961973d01 32 _rickDirection = 0;
Architect 0:f5f961973d01 33 }
Architect 0:f5f961973d01 34
Architect 0:f5f961973d01 35 bool GameScreen::isPocketFull()
Architect 0:f5f961973d01 36 {
Architect 0:f5f961973d01 37 return (_pocket[0] != 0 && _pocket[1] != 0);
Architect 0:f5f961973d01 38 }
Architect 0:f5f961973d01 39
Architect 0:f5f961973d01 40 bool GameScreen::isPocketEmpty()
Architect 0:f5f961973d01 41 {
Architect 0:f5f961973d01 42 return (_pocket[0] == 0 && _pocket[1] == 0);
Architect 0:f5f961973d01 43 }
Architect 0:f5f961973d01 44
Architect 0:f5f961973d01 45 bool GameScreen::putInPocket( int item )
Architect 0:f5f961973d01 46 {
Architect 0:f5f961973d01 47 if( item != CELL_BARREL && item != CELL_KEY )
Architect 0:f5f961973d01 48 return false;
Architect 0:f5f961973d01 49
Architect 0:f5f961973d01 50 bool bRet = true;
Architect 0:f5f961973d01 51
Architect 0:f5f961973d01 52 if( _pocket[0] == 0 )
Architect 0:f5f961973d01 53 _pocket[0] = item;
Architect 0:f5f961973d01 54 else if( _pocket[1] == 0 )
Architect 0:f5f961973d01 55 _pocket[1] = item;
Architect 0:f5f961973d01 56 else
Architect 0:f5f961973d01 57 bRet = false;
Architect 0:f5f961973d01 58
Architect 0:f5f961973d01 59 return bRet;
Architect 0:f5f961973d01 60 }
Architect 0:f5f961973d01 61
Architect 0:f5f961973d01 62 bool GameScreen::getKeyFromPocket()
Architect 0:f5f961973d01 63 {
Architect 0:f5f961973d01 64 bool bRet = true;
Architect 0:f5f961973d01 65
Architect 0:f5f961973d01 66 if( _pocket[0] == CELL_KEY )
Architect 0:f5f961973d01 67 _pocket[0] = 0;
Architect 0:f5f961973d01 68 else if( _pocket[1] == CELL_KEY )
Architect 0:f5f961973d01 69 _pocket[1] = 0;
Architect 0:f5f961973d01 70 else
Architect 0:f5f961973d01 71 bRet = false;
Architect 0:f5f961973d01 72
Architect 0:f5f961973d01 73 return bRet;
Architect 0:f5f961973d01 74 }
Architect 0:f5f961973d01 75
Architect 0:f5f961973d01 76 bool GameScreen::getBarrelFromPocket()
Architect 0:f5f961973d01 77 {
Architect 0:f5f961973d01 78 bool bRet = true;
Architect 0:f5f961973d01 79
Architect 0:f5f961973d01 80 if( _pocket[0] == CELL_BARREL )
Architect 0:f5f961973d01 81 _pocket[0] = 0;
Architect 0:f5f961973d01 82 else if( _pocket[1] == CELL_BARREL )
Architect 0:f5f961973d01 83 _pocket[1] = 0;
Architect 0:f5f961973d01 84 else
Architect 0:f5f961973d01 85 bRet = false;
Architect 0:f5f961973d01 86
Architect 0:f5f961973d01 87 return bRet;
Architect 0:f5f961973d01 88 }
Architect 0:f5f961973d01 89
Architect 0:f5f961973d01 90 void GameScreen::moveleft()
Architect 0:f5f961973d01 91 {
Architect 0:f5f961973d01 92 if( _rickDirection == 0 )
Architect 0:f5f961973d01 93 {
Architect 0:f5f961973d01 94 _rickDirection = 1;
Architect 0:f5f961973d01 95 drawSprite(_rickX,_rickY, CELL_RICK, _rickDirection == 1);
Architect 0:f5f961973d01 96 }
Architect 0:f5f961973d01 97
Architect 0:f5f961973d01 98 if( _rickX == 0 )
Architect 0:f5f961973d01 99 return;
Architect 0:f5f961973d01 100
Architect 0:f5f961973d01 101 uint8_t cell = _maze[(_rickY<<3)+_rickX-1];
Architect 0:f5f961973d01 102
Architect 0:f5f961973d01 103
Architect 0:f5f961973d01 104 if( cell == CELL_KEY || cell == CELL_BARREL ) {
Architect 0:f5f961973d01 105 if( putInPocket(cell) ) {
Architect 0:f5f961973d01 106 _maze[(_rickY<<3)+_rickX-1] = CELL_EMPTY;
Architect 0:f5f961973d01 107 drawSprite((_rickX-1),_rickY, CELL_EMPTY);
Architect 0:f5f961973d01 108 drawPocket();
Architect 0:f5f961973d01 109 }
Architect 0:f5f961973d01 110 return;
Architect 0:f5f961973d01 111 }
Architect 0:f5f961973d01 112
Architect 0:f5f961973d01 113 if( cell == CELL_CRATE && (_rickX-1)>0 )
Architect 0:f5f961973d01 114 {
Architect 0:f5f961973d01 115 if( moveto(_rickX-1,_rickY, _rickX-2,_rickY) )
Architect 0:f5f961973d01 116 fall(_rickX-2,_rickY);
Architect 0:f5f961973d01 117 return;
Architect 0:f5f961973d01 118 }
Architect 0:f5f961973d01 119
Architect 0:f5f961973d01 120
Architect 0:f5f961973d01 121 if( moveto(_rickX,_rickY,_rickX-1,_rickY) )
Architect 0:f5f961973d01 122 fall(_rickX,_rickY);
Architect 0:f5f961973d01 123
Architect 0:f5f961973d01 124 }
Architect 0:f5f961973d01 125
Architect 0:f5f961973d01 126 void GameScreen::moveright()
Architect 0:f5f961973d01 127 {
Architect 0:f5f961973d01 128 if( _rickDirection == 1 )
Architect 0:f5f961973d01 129 {
Architect 0:f5f961973d01 130 _rickDirection = 0;
Architect 0:f5f961973d01 131 drawSprite(_rickX,_rickY, CELL_RICK, _rickDirection == 1);
Architect 0:f5f961973d01 132 }
Architect 0:f5f961973d01 133
Architect 0:f5f961973d01 134 if( _rickX == 7 )
Architect 0:f5f961973d01 135 return;
Architect 0:f5f961973d01 136
Architect 0:f5f961973d01 137 uint8_t cell = _maze[(_rickY<<3)+_rickX+1];
Architect 0:f5f961973d01 138
Architect 0:f5f961973d01 139 if( cell == CELL_KEY || cell == CELL_BARREL ) {
Architect 0:f5f961973d01 140 if( putInPocket(cell) ) {
Architect 0:f5f961973d01 141 _maze[(_rickY<<3)+_rickX+1] = CELL_EMPTY;
Architect 0:f5f961973d01 142 drawSprite((_rickX+1),_rickY, CELL_EMPTY);
Architect 0:f5f961973d01 143 drawPocket();
Architect 0:f5f961973d01 144 }
Architect 0:f5f961973d01 145 return;
Architect 0:f5f961973d01 146 }
Architect 0:f5f961973d01 147
Architect 0:f5f961973d01 148 if( cell == CELL_CRATE && (_rickX+1)<7 )
Architect 0:f5f961973d01 149 {
Architect 0:f5f961973d01 150 if( moveto(_rickX+1,_rickY, _rickX+2,_rickY) )
Architect 0:f5f961973d01 151 fall(_rickX+2,_rickY);
Architect 0:f5f961973d01 152 return;
Architect 0:f5f961973d01 153 }
Architect 0:f5f961973d01 154
Architect 0:f5f961973d01 155 if( moveto(_rickX,_rickY,_rickX+1,_rickY) )
Architect 0:f5f961973d01 156 fall(_rickX,_rickY);
Architect 0:f5f961973d01 157
Architect 0:f5f961973d01 158 }
Architect 0:f5f961973d01 159
Architect 0:f5f961973d01 160 void GameScreen::moveup()
Architect 0:f5f961973d01 161 {
Architect 0:f5f961973d01 162 if( _rickY == 0 )
Architect 0:f5f961973d01 163 return;
Architect 0:f5f961973d01 164
Architect 0:f5f961973d01 165 uint8_t currentCell = _maze[((_rickY)<<3)+_rickX];
Architect 0:f5f961973d01 166 uint8_t aboveCell = _maze[((_rickY-1)<<3)+_rickX];
Architect 0:f5f961973d01 167
Architect 0:f5f961973d01 168 //if already on ladder
Architect 0:f5f961973d01 169 if( currentCell == CELL_LADDER )
Architect 0:f5f961973d01 170 moveto(_rickX,_rickY,_rickX,_rickY-1);
Architect 0:f5f961973d01 171 else if( currentCell == CELL_EMPTY && !isPocketEmpty()) {
Architect 0:f5f961973d01 172 uint8_t x = _rickX;
Architect 0:f5f961973d01 173 uint8_t y = _rickY;
Architect 0:f5f961973d01 174 if( moveto(_rickX,_rickY,_rickX,_rickY-1) ) {
Architect 0:f5f961973d01 175 if( getBarrelFromPocket() ) {
Architect 0:f5f961973d01 176 _maze[(y<<3)+x] = CELL_BARREL;
Architect 0:f5f961973d01 177 drawSprite(x,y,CELL_BARREL);
Architect 0:f5f961973d01 178 } else if( getKeyFromPocket() ) {
Architect 0:f5f961973d01 179 _maze[(y<<3)+x] = CELL_KEY;
Architect 0:f5f961973d01 180 drawSprite(x,y,CELL_KEY);
Architect 0:f5f961973d01 181 }
Architect 0:f5f961973d01 182
Architect 0:f5f961973d01 183 drawPocket();
Architect 0:f5f961973d01 184 }
Architect 0:f5f961973d01 185 }
Architect 0:f5f961973d01 186 }
Architect 0:f5f961973d01 187
Architect 0:f5f961973d01 188 void GameScreen::movedown()
Architect 0:f5f961973d01 189 {
Architect 0:f5f961973d01 190 if( _rickY == 0 )
Architect 0:f5f961973d01 191 return;
Architect 0:f5f961973d01 192
Architect 0:f5f961973d01 193 // uint8_t currentCell = _maze[((_rickY)<<3)+_rickX];
Architect 0:f5f961973d01 194 // uint8_t belowCell = _maze[((_rickY+1)<<3)+_rickX];
Architect 0:f5f961973d01 195
Architect 0:f5f961973d01 196
Architect 0:f5f961973d01 197 if( moveto(_rickX,_rickY,_rickX,_rickY+1) )
Architect 0:f5f961973d01 198 {
Architect 0:f5f961973d01 199 fall(_rickX,_rickY);
Architect 0:f5f961973d01 200 }
Architect 0:f5f961973d01 201 // if( _rickY > 0 ) {
Architect 0:f5f961973d01 202 // uint8_t cellAbove = _maze[((_rickY-1)<<3)+_rickX];
Architect 0:f5f961973d01 203 // if(cellAbove == CELL_EMPTY && !isPocketEmpty()) {
Architect 0:f5f961973d01 204 // if( getKeyFromPocket() ) {
Architect 0:f5f961973d01 205 // _maze[(_rickY<<3)+_rickX] = CELL_KEY;
Architect 0:f5f961973d01 206 // } else if( getBarrelFromPocket() )
Architect 0:f5f961973d01 207 // _maze[(_rickY<<3)+_rickX] = CELL_BARREL;
Architect 0:f5f961973d01 208 //
Architect 0:f5f961973d01 209 // _rickY--;
Architect 0:f5f961973d01 210 // drawSprite(_rickX,_rickY+1, _maze[((_rickY+1)<<3)+_rickX]);
Architect 0:f5f961973d01 211 // drawSprite(_rickX,_rickY, CELL_RICK, _rickDirection == 1);
Architect 0:f5f961973d01 212 // drawPocket();
Architect 0:f5f961973d01 213 // }
Architect 0:f5f961973d01 214 // }
Architect 0:f5f961973d01 215 }
Architect 0:f5f961973d01 216
Architect 0:f5f961973d01 217
Architect 0:f5f961973d01 218 bool GameScreen::moveto(uint8_t fromX, uint8_t fromY, uint8_t toX, uint8_t toY)
Architect 0:f5f961973d01 219 {
Architect 0:f5f961973d01 220
Architect 0:f5f961973d01 221 bool isRick = false;
Architect 0:f5f961973d01 222
Architect 0:f5f961973d01 223 if( fromX == _rickX && fromY == _rickY )
Architect 0:f5f961973d01 224 isRick = true;
Architect 0:f5f961973d01 225
Architect 0:f5f961973d01 226 uint8_t fromCell = _maze[((fromY)<<3)+fromX];
Architect 0:f5f961973d01 227 uint8_t toCell = _maze[((toY)<<3)+toX];
Architect 0:f5f961973d01 228
Architect 0:f5f961973d01 229 if( isRick ) {
Architect 0:f5f961973d01 230 if( toCell == CELL_EMPTY || toCell == CELL_LADDER || toCell == CELL_TOTEM ) {
Architect 0:f5f961973d01 231 drawSprite(fromX,fromY, fromCell);
Architect 0:f5f961973d01 232 _rickX = toX;
Architect 0:f5f961973d01 233 _rickY = toY;
Architect 0:f5f961973d01 234 drawSprite(_rickX,_rickY, CELL_RICK, _rickDirection == 1);
Architect 0:f5f961973d01 235 return true;
Architect 0:f5f961973d01 236 }
Architect 0:f5f961973d01 237 if( toCell == CELL_DOOR ) {
Architect 0:f5f961973d01 238 if( getKeyFromPocket() ) {
Architect 0:f5f961973d01 239 drawSprite(fromX,fromY, fromCell);
Architect 0:f5f961973d01 240 _maze[((toY)<<3)+toX] = CELL_EMPTY;
Architect 0:f5f961973d01 241 _rickX = toX;
Architect 0:f5f961973d01 242 _rickY = toY;
Architect 0:f5f961973d01 243 drawSprite(_rickX,_rickY, CELL_RICK, _rickDirection == 1);
Architect 0:f5f961973d01 244 drawPocket();
Architect 0:f5f961973d01 245 return true;
Architect 0:f5f961973d01 246 }
Architect 0:f5f961973d01 247 }
Architect 0:f5f961973d01 248 }else if( fromCell == CELL_CRATE && toCell == CELL_EMPTY )
Architect 0:f5f961973d01 249 {
Architect 0:f5f961973d01 250 _maze[((toY)<<3)+toX] = CELL_CRATE;
Architect 0:f5f961973d01 251 _maze[((fromY)<<3)+fromX] = CELL_EMPTY;
Architect 0:f5f961973d01 252
Architect 0:f5f961973d01 253 drawSprite(fromX,fromY, toCell);
Architect 0:f5f961973d01 254 drawSprite(toX,toY, fromCell);
Architect 0:f5f961973d01 255 return true;
Architect 0:f5f961973d01 256 }
Architect 0:f5f961973d01 257
Architect 0:f5f961973d01 258 return false;
Architect 0:f5f961973d01 259 }
Architect 0:f5f961973d01 260
Architect 0:f5f961973d01 261 bool GameScreen::fall(uint8_t fromX, uint8_t fromY)
Architect 0:f5f961973d01 262 {
Architect 0:f5f961973d01 263 if( fromY == 7 )
Architect 0:f5f961973d01 264 return false;
Architect 0:f5f961973d01 265
Architect 0:f5f961973d01 266 uint8_t curCell = _maze[(fromY<<3)+fromX];
Architect 0:f5f961973d01 267
Architect 0:f5f961973d01 268 if( curCell == CELL_LADDER )
Architect 0:f5f961973d01 269 return false;
Architect 0:f5f961973d01 270
Architect 0:f5f961973d01 271 uint8_t cell = _maze[((fromY+1)<<3)+fromX];
Architect 0:f5f961973d01 272
Architect 0:f5f961973d01 273
Architect 0:f5f961973d01 274
Architect 0:f5f961973d01 275 while( cell == CELL_EMPTY || cell == CELL_TOTEM ) {
Architect 0:f5f961973d01 276 if( moveto(fromX,fromY,fromX,fromY+1) ) {
Architect 0:f5f961973d01 277 fromY++;
Architect 0:f5f961973d01 278
Architect 0:f5f961973d01 279 if( fromY == 7 )
Architect 0:f5f961973d01 280 break;
Architect 0:f5f961973d01 281
Architect 0:f5f961973d01 282 cell = _maze[((fromY+1)<<3)+fromX];
Architect 0:f5f961973d01 283 } else {
Architect 0:f5f961973d01 284 break;
Architect 0:f5f961973d01 285 }
Architect 0:f5f961973d01 286 }
Architect 0:f5f961973d01 287
Architect 0:f5f961973d01 288 return true;
Architect 0:f5f961973d01 289 }
Architect 0:f5f961973d01 290
Architect 0:f5f961973d01 291
Architect 0:f5f961973d01 292
Architect 0:f5f961973d01 293
Architect 0:f5f961973d01 294 void GameScreen::unpackLevel( int level )
Architect 0:f5f961973d01 295 {
Architect 0:f5f961973d01 296 if( level < 0 || level > 99 )
Architect 0:f5f961973d01 297 level = 0;
Architect 0:f5f961973d01 298
Architect 0:f5f961973d01 299 _level = level;
Architect 0:f5f961973d01 300
Architect 0:f5f961973d01 301 const uint32_t * pLevel = &levels[level*8];
Architect 0:f5f961973d01 302
Architect 0:f5f961973d01 303 for( int y = 0; y < 8; y++ )
Architect 0:f5f961973d01 304 for( int x = 0; x < 8; x++ ) {
Architect 0:f5f961973d01 305 _maze[(y<<3) + x] = (pLevel[y]>>(28-(x<<2))) & 0x0F;
Architect 0:f5f961973d01 306
Architect 0:f5f961973d01 307 switch( _maze[(y<<3) + x] ) {
Architect 0:f5f961973d01 308 case CELL_RICK:
Architect 0:f5f961973d01 309 //The level data has specialy marked cell for Rick
Architect 0:f5f961973d01 310 //During the game Rick position is tracked separately
Architect 0:f5f961973d01 311 //This allows us to put Rick on none EMPTY cells
Architect 0:f5f961973d01 312 _maze[(y<<3) + x] = CELL_EMPTY;
Architect 0:f5f961973d01 313 _rickX = x;
Architect 0:f5f961973d01 314 _rickY = y;
Architect 0:f5f961973d01 315 break;
Architect 0:f5f961973d01 316 case CELL_TOTEM:
Architect 0:f5f961973d01 317 _totemX = x;
Architect 0:f5f961973d01 318 _totemY = y;
Architect 0:f5f961973d01 319 break;
Architect 0:f5f961973d01 320 default:
Architect 0:f5f961973d01 321 break;
Architect 0:f5f961973d01 322 }
Architect 0:f5f961973d01 323 }
Architect 0:f5f961973d01 324 }
Architect 0:f5f961973d01 325
Architect 0:f5f961973d01 326 void GameScreen::resetLevel()
Architect 0:f5f961973d01 327 {
Architect 0:f5f961973d01 328 unpackLevel(_level);
Architect 0:f5f961973d01 329
Architect 0:f5f961973d01 330 _state = 0;
Architect 0:f5f961973d01 331 _pocket[0] = 0;
Architect 0:f5f961973d01 332 _pocket[1] = 0;
Architect 0:f5f961973d01 333 _rickDirection = 0;
Architect 0:f5f961973d01 334 }
Architect 0:f5f961973d01 335
Architect 0:f5f961973d01 336 void GameScreen::drawSprite(int x, int y, int sprite, bool mirrored)
Architect 0:f5f961973d01 337 {
Architect 0:f5f961973d01 338 int screenx = x<<4;
Architect 0:f5f961973d01 339 int screeny = y<<4;
Architect 0:f5f961973d01 340 if( sprite == 0 )
Architect 0:f5f961973d01 341 retro.display.fillRect(screenx,screeny, screenx+15,screeny+15,0);
Architect 0:f5f961973d01 342 else
Architect 0:f5f961973d01 343 {
Architect 0:f5f961973d01 344 retro.display.drawBitmapIndexed(screenx,screeny, 16,16,sprites[sprite],palette, mirrored);
Architect 0:f5f961973d01 345 }
Architect 0:f5f961973d01 346 }
Architect 0:f5f961973d01 347
Architect 0:f5f961973d01 348 void GameScreen::drawPocket()
Architect 0:f5f961973d01 349 {
Architect 0:f5f961973d01 350 if( _pocket[0] == 0 )
Architect 0:f5f961973d01 351 retro.display.fillRect(136,80,151,95,0);
Architect 0:f5f961973d01 352 else
Architect 0:f5f961973d01 353 retro.display.drawBitmapIndexed(136,80, 16,16,sprites[_pocket[0]], palette);
Architect 0:f5f961973d01 354
Architect 0:f5f961973d01 355 if( _pocket[1] == 0 )
Architect 0:f5f961973d01 356 retro.display.fillRect(136,96,151,111,0);
Architect 0:f5f961973d01 357 else
Architect 0:f5f961973d01 358 retro.display.drawBitmapIndexed(136,96, 16,16,sprites[_pocket[1]], palette);
Architect 0:f5f961973d01 359 }
Architect 0:f5f961973d01 360
Architect 0:f5f961973d01 361
Architect 0:f5f961973d01 362 void GameScreen::drawLevel()
Architect 0:f5f961973d01 363 {
Architect 0:f5f961973d01 364 //Draw the maze
Architect 0:f5f961973d01 365 for( int y = 0; y < 8; y++ )
Architect 0:f5f961973d01 366 for( int x = 0; x < 8; x++ ) {
Architect 0:f5f961973d01 367 drawSprite(x, y, _maze[(y<<3)+x]);
Architect 0:f5f961973d01 368 }
Architect 0:f5f961973d01 369
Architect 0:f5f961973d01 370 //Put Rick on the map
Architect 0:f5f961973d01 371 drawSprite(_rickX, _rickY, CELL_RICK, _rickDirection == 1);
Architect 0:f5f961973d01 372
Architect 0:f5f961973d01 373 //Draw the statistics and "pocket" area
Architect 0:f5f961973d01 374 for( int y = 0; y < 8; y++ ) {
Architect 0:f5f961973d01 375 retro.display.drawBitmapIndexed(128,y<<4, 16,16,wall, palette);
Architect 0:f5f961973d01 376 retro.display.drawBitmapIndexed(144,y<<4, 16,16, wall, palette);
Architect 0:f5f961973d01 377 }
Architect 0:f5f961973d01 378 retro.display.drawBitmapIndexed(136,16, 16,16,totem,palette);
Architect 0:f5f961973d01 379 retro.display.fillRect(132,32,155,39,0);
Architect 0:f5f961973d01 380
Architect 0:f5f961973d01 381 char buff[4];
Architect 0:f5f961973d01 382 sprintf(buff,"%d",_level);
Architect 0:f5f961973d01 383
Architect 0:f5f961973d01 384 drawString(132,32,buff);
Architect 0:f5f961973d01 385
Architect 0:f5f961973d01 386 drawPocket();
Architect 0:f5f961973d01 387 }
Architect 0:f5f961973d01 388
Architect 0:f5f961973d01 389
Architect 0:f5f961973d01 390 Screen GameScreen::Update()
Architect 0:f5f961973d01 391 {
Architect 0:f5f961973d01 392 if( _state == 0 ) {
Architect 0:f5f961973d01 393 drawLevel();
Architect 0:f5f961973d01 394 _state = 1;
Architect 0:f5f961973d01 395 }
Architect 0:f5f961973d01 396
Architect 0:f5f961973d01 397 if(retro.buttons.pressed(BTN_LEFT)) {
Architect 0:f5f961973d01 398 moveleft();
Architect 0:f5f961973d01 399 }
Architect 0:f5f961973d01 400 if(retro.buttons.pressed(BTN_RIGHT)) {
Architect 0:f5f961973d01 401 moveright();
Architect 0:f5f961973d01 402 }
Architect 0:f5f961973d01 403 if(retro.buttons.pressed(BTN_UP)) {
Architect 0:f5f961973d01 404 moveup();
Architect 0:f5f961973d01 405 }
Architect 0:f5f961973d01 406 if(retro.buttons.pressed(BTN_DOWN)) {
Architect 0:f5f961973d01 407 movedown();
Architect 0:f5f961973d01 408 }
Architect 0:f5f961973d01 409 if(retro.buttons.pressed(BTN_ROBOT)) {
Architect 0:f5f961973d01 410 _state = 0;
Architect 0:f5f961973d01 411 return Menu;
Architect 0:f5f961973d01 412 }
Architect 0:f5f961973d01 413
Architect 0:f5f961973d01 414 return Game;
Architect 0:f5f961973d01 415 }