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

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?

UserRevisionLine numberNew 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