Version of Robotron arcade game using LPC1768, a Gameduino shield, a serial EEPROM (for high scores), two microswitch joysticks and two buttons plus a box to put it in. 20 levels of mayhem.
Dependencies: 25LCxxx_SPI CommonTypes Gameduino mbed
GameObjectLocator.cpp@18:70190f956a24, 2013-06-17 (annotated)
- Committer:
- RichardE
- Date:
- Mon Jun 17 15:10:43 2013 +0000
- Revision:
- 18:70190f956a24
- Parent:
- 4:673eb9735d44
Improved response to button 1 when entering high scores (HighScoreEntry.cpp).
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RichardE | 4:673eb9735d44 | 1 | /* |
RichardE | 4:673eb9735d44 | 2 | * SOURCE FILE : GameObjectLocator.cpp |
RichardE | 4:673eb9735d44 | 3 | * |
RichardE | 4:673eb9735d44 | 4 | * Code for randomly positioning objects. |
RichardE | 4:673eb9735d44 | 5 | * |
RichardE | 4:673eb9735d44 | 6 | */ |
RichardE | 4:673eb9735d44 | 7 | |
RichardE | 4:673eb9735d44 | 8 | #include "GameObjectLocator.h" |
RichardE | 4:673eb9735d44 | 9 | #include "ArenaConst.h" |
RichardE | 4:673eb9735d44 | 10 | #include "Random.h" |
RichardE | 4:673eb9735d44 | 11 | |
RichardE | 4:673eb9735d44 | 12 | // Indicates which quadrant to put next object in. |
RichardE | 4:673eb9735d44 | 13 | UInt8 GameObjectLocator::quad = 0; |
RichardE | 4:673eb9735d44 | 14 | |
RichardE | 4:673eb9735d44 | 15 | /*************************************/ |
RichardE | 4:673eb9735d44 | 16 | /* POSITION OBJECT RANDOMLY IN ARENA */ |
RichardE | 4:673eb9735d44 | 17 | /*************************************/ |
RichardE | 4:673eb9735d44 | 18 | // Pass object to locate in obj. |
RichardE | 4:673eb9735d44 | 19 | void GameObjectLocator::Locate( GameObject *obj ) { |
RichardE | 4:673eb9735d44 | 20 | Int16 x, y; |
RichardE | 4:673eb9735d44 | 21 | |
RichardE | 4:673eb9735d44 | 22 | // Calculate start pixel coordinates for player. |
RichardE | 4:673eb9735d44 | 23 | Int16 ppx = GameObject::ToPixel( PLAYER_START_X ); |
RichardE | 4:673eb9735d44 | 24 | Int16 ppy = GameObject::ToPixel( PLAYER_START_Y ); |
RichardE | 4:673eb9735d44 | 25 | |
RichardE | 4:673eb9735d44 | 26 | // Keep calculating random coordinates until coordinates chosen |
RichardE | 4:673eb9735d44 | 27 | // are some distance away from chase object. |
RichardE | 4:673eb9735d44 | 28 | do { |
RichardE | 4:673eb9735d44 | 29 | |
RichardE | 4:673eb9735d44 | 30 | x = Random::Get( ( ARENA_WIDTH >> 1 ) - SPRITE_PIXEL_WIDTH - 4 ); |
RichardE | 4:673eb9735d44 | 31 | y = Random::Get( ( ARENA_HEIGHT >> 1 ) - SPRITE_PIXEL_HEIGHT - 4 ); |
RichardE | 4:673eb9735d44 | 32 | |
RichardE | 4:673eb9735d44 | 33 | switch( quad ) { |
RichardE | 4:673eb9735d44 | 34 | |
RichardE | 4:673eb9735d44 | 35 | case 0 : |
RichardE | 4:673eb9735d44 | 36 | x += ARENA_MIN_X; |
RichardE | 4:673eb9735d44 | 37 | y += ARENA_MIN_Y; |
RichardE | 4:673eb9735d44 | 38 | break; |
RichardE | 4:673eb9735d44 | 39 | |
RichardE | 4:673eb9735d44 | 40 | case 1 : |
RichardE | 4:673eb9735d44 | 41 | x = ARENA_MIN_X + ARENA_WIDTH - SPRITE_PIXEL_WIDTH - x; |
RichardE | 4:673eb9735d44 | 42 | y += ARENA_MIN_Y; |
RichardE | 4:673eb9735d44 | 43 | break; |
RichardE | 4:673eb9735d44 | 44 | |
RichardE | 4:673eb9735d44 | 45 | case 2 : |
RichardE | 4:673eb9735d44 | 46 | x += ARENA_MIN_X; |
RichardE | 4:673eb9735d44 | 47 | y = ARENA_MIN_Y + ARENA_HEIGHT - SPRITE_PIXEL_HEIGHT - y; |
RichardE | 4:673eb9735d44 | 48 | break; |
RichardE | 4:673eb9735d44 | 49 | |
RichardE | 4:673eb9735d44 | 50 | case 3 : |
RichardE | 4:673eb9735d44 | 51 | x = ARENA_MIN_X + ARENA_WIDTH - SPRITE_PIXEL_WIDTH - x; |
RichardE | 4:673eb9735d44 | 52 | y = ARENA_MIN_Y + ARENA_HEIGHT - SPRITE_PIXEL_HEIGHT - y; |
RichardE | 4:673eb9735d44 | 53 | break; |
RichardE | 4:673eb9735d44 | 54 | |
RichardE | 4:673eb9735d44 | 55 | } |
RichardE | 4:673eb9735d44 | 56 | |
RichardE | 4:673eb9735d44 | 57 | } while( |
RichardE | 4:673eb9735d44 | 58 | ( abs( x - ppx ) < ( SPRITE_PIXEL_WIDTH << 1 ) ) && |
RichardE | 4:673eb9735d44 | 59 | ( abs( y - ppy ) < ( SPRITE_PIXEL_HEIGHT << 1 ) ) |
RichardE | 4:673eb9735d44 | 60 | ); |
RichardE | 4:673eb9735d44 | 61 | |
RichardE | 4:673eb9735d44 | 62 | obj->Xco = GameObject::FromPixel( x ); |
RichardE | 4:673eb9735d44 | 63 | obj->Yco = GameObject::FromPixel( y ); |
RichardE | 4:673eb9735d44 | 64 | |
RichardE | 4:673eb9735d44 | 65 | // Use next quadrant on next call. |
RichardE | 4:673eb9735d44 | 66 | quad++; |
RichardE | 4:673eb9735d44 | 67 | quad &= 3; |
RichardE | 4:673eb9735d44 | 68 | |
RichardE | 4:673eb9735d44 | 69 | } |
RichardE | 4:673eb9735d44 | 70 | |
RichardE | 4:673eb9735d44 | 71 |