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
BulletVelocities.h@4:673eb9735d44, 2013-06-08 (annotated)
- Committer:
- RichardE
- Date:
- Sat Jun 08 11:24:05 2013 +0000
- Revision:
- 4:673eb9735d44
Pulled in more code. Now panel controls are working. Level 0 (attract mode) now goes round an endless loop sending state of panel controls up serial port to PC.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RichardE | 4:673eb9735d44 | 1 | /* |
RichardE | 4:673eb9735d44 | 2 | * SOURCE FILE : BulletVelocities.h |
RichardE | 4:673eb9735d44 | 3 | * |
RichardE | 4:673eb9735d44 | 4 | * Converts from set of joystick inputs to horizontal and vertical velocities. |
RichardE | 4:673eb9735d44 | 5 | * |
RichardE | 4:673eb9735d44 | 6 | */ |
RichardE | 4:673eb9735d44 | 7 | |
RichardE | 4:673eb9735d44 | 8 | #ifndef BulletVelocitiesIncluded |
RichardE | 4:673eb9735d44 | 9 | |
RichardE | 4:673eb9735d44 | 10 | #define BulletVelocitiesIncluded |
RichardE | 4:673eb9735d44 | 11 | |
RichardE | 4:673eb9735d44 | 12 | #include "Int16Pair.h" |
RichardE | 4:673eb9735d44 | 13 | |
RichardE | 4:673eb9735d44 | 14 | class BulletVelocities { |
RichardE | 4:673eb9735d44 | 15 | |
RichardE | 4:673eb9735d44 | 16 | public : |
RichardE | 4:673eb9735d44 | 17 | |
RichardE | 4:673eb9735d44 | 18 | /***************/ |
RichardE | 4:673eb9735d44 | 19 | /* CONSTRUCTOR */ |
RichardE | 4:673eb9735d44 | 20 | /***************/ |
RichardE | 4:673eb9735d44 | 21 | // Pass velocity for a horizontally moving bullet in h. |
RichardE | 4:673eb9735d44 | 22 | // Pass velocity for a vertically moving bullet in v. |
RichardE | 4:673eb9735d44 | 23 | BulletVelocities( Int16 h, Int16 v ) { |
RichardE | 4:673eb9735d44 | 24 | // Calculate velocities used on the diagonal. |
RichardE | 4:673eb9735d44 | 25 | // This is really doing hd = h * cos( 45 degrees ) and |
RichardE | 4:673eb9735d44 | 26 | // vd = v * sin( 45 degrees ). |
RichardE | 4:673eb9735d44 | 27 | Int16 hd = (Int16)floor( (double)h * 0.707 + 0.5 ); |
RichardE | 4:673eb9735d44 | 28 | Int16 vd = (Int16)floor( (double)v * 0.707 + 0.5 ); |
RichardE | 4:673eb9735d44 | 29 | // Initialise the table of velocities. |
RichardE | 4:673eb9735d44 | 30 | Int16Pair *ptr = pairs; |
RichardE | 4:673eb9735d44 | 31 | // No joystick contacts closed. Index 0. |
RichardE | 4:673eb9735d44 | 32 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 33 | ptr->Y = 0; |
RichardE | 4:673eb9735d44 | 34 | ptr++; |
RichardE | 4:673eb9735d44 | 35 | // Joystick up. Index 1 |
RichardE | 4:673eb9735d44 | 36 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 37 | ptr->Y = -v; |
RichardE | 4:673eb9735d44 | 38 | ptr++; |
RichardE | 4:673eb9735d44 | 39 | // Joystick down. Index 2. |
RichardE | 4:673eb9735d44 | 40 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 41 | ptr->Y = v; |
RichardE | 4:673eb9735d44 | 42 | ptr++; |
RichardE | 4:673eb9735d44 | 43 | // Joystick up and down (impossible). Index 3. |
RichardE | 4:673eb9735d44 | 44 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 45 | ptr->Y = v; |
RichardE | 4:673eb9735d44 | 46 | ptr++; |
RichardE | 4:673eb9735d44 | 47 | // Joystick left. Index 4. |
RichardE | 4:673eb9735d44 | 48 | ptr->X = -h; |
RichardE | 4:673eb9735d44 | 49 | ptr->Y = 0; |
RichardE | 4:673eb9735d44 | 50 | ptr++; |
RichardE | 4:673eb9735d44 | 51 | // Joystick left and up. Index 5. |
RichardE | 4:673eb9735d44 | 52 | ptr->X = -hd; |
RichardE | 4:673eb9735d44 | 53 | ptr->Y = -vd; |
RichardE | 4:673eb9735d44 | 54 | ptr++; |
RichardE | 4:673eb9735d44 | 55 | // Joystick left and down. Index 6. |
RichardE | 4:673eb9735d44 | 56 | ptr->X = -hd; |
RichardE | 4:673eb9735d44 | 57 | ptr->Y = vd; |
RichardE | 4:673eb9735d44 | 58 | ptr++; |
RichardE | 4:673eb9735d44 | 59 | // Joystick up, down and left (impossible). Index 7. |
RichardE | 4:673eb9735d44 | 60 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 61 | ptr->Y = v; |
RichardE | 4:673eb9735d44 | 62 | ptr++; |
RichardE | 4:673eb9735d44 | 63 | // Joystick right. Index 8. |
RichardE | 4:673eb9735d44 | 64 | ptr->X = h; |
RichardE | 4:673eb9735d44 | 65 | ptr->Y = 0; |
RichardE | 4:673eb9735d44 | 66 | ptr++; |
RichardE | 4:673eb9735d44 | 67 | // Joystick right and up. Index 9. |
RichardE | 4:673eb9735d44 | 68 | ptr->X = hd; |
RichardE | 4:673eb9735d44 | 69 | ptr->Y = -vd; |
RichardE | 4:673eb9735d44 | 70 | ptr++; |
RichardE | 4:673eb9735d44 | 71 | // Joystick right and down. Index 10. |
RichardE | 4:673eb9735d44 | 72 | ptr->X = hd; |
RichardE | 4:673eb9735d44 | 73 | ptr->Y = vd; |
RichardE | 4:673eb9735d44 | 74 | ptr++; |
RichardE | 4:673eb9735d44 | 75 | // Joystick up, down and right (impossible). Index 11. |
RichardE | 4:673eb9735d44 | 76 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 77 | ptr->Y = v; |
RichardE | 4:673eb9735d44 | 78 | ptr++; |
RichardE | 4:673eb9735d44 | 79 | // Joystick left and right (impossible). Index 12. |
RichardE | 4:673eb9735d44 | 80 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 81 | ptr->Y = v; |
RichardE | 4:673eb9735d44 | 82 | ptr++; |
RichardE | 4:673eb9735d44 | 83 | // Joystick up, left and right (impossible). Index 13. |
RichardE | 4:673eb9735d44 | 84 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 85 | ptr->Y = v; |
RichardE | 4:673eb9735d44 | 86 | ptr++; |
RichardE | 4:673eb9735d44 | 87 | // Joystick down, left and right (impossible) Index 14. |
RichardE | 4:673eb9735d44 | 88 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 89 | ptr->Y = v; |
RichardE | 4:673eb9735d44 | 90 | ptr++; |
RichardE | 4:673eb9735d44 | 91 | // Joystick up, down, left and right (impossible). Index 15. |
RichardE | 4:673eb9735d44 | 92 | ptr->X = 0; |
RichardE | 4:673eb9735d44 | 93 | ptr->Y = v; |
RichardE | 4:673eb9735d44 | 94 | ptr++; |
RichardE | 4:673eb9735d44 | 95 | } |
RichardE | 4:673eb9735d44 | 96 | |
RichardE | 4:673eb9735d44 | 97 | /*******************************************************/ |
RichardE | 4:673eb9735d44 | 98 | /* GET VELOCITIES FOR A COMBINATION OF JOYSTICK INPUTS */ |
RichardE | 4:673eb9735d44 | 99 | /*******************************************************/ |
RichardE | 4:673eb9735d44 | 100 | // Pass a map containing joystick inputs where a set bit indicates a closed contact. |
RichardE | 4:673eb9735d44 | 101 | // Bits must be ordered as follows : |
RichardE | 4:673eb9735d44 | 102 | // Bit 0 = Up. |
RichardE | 4:673eb9735d44 | 103 | // Bit 1 = Down. |
RichardE | 4:673eb9735d44 | 104 | // Bit 2 = Left. |
RichardE | 4:673eb9735d44 | 105 | // Bit 3 = Right. |
RichardE | 4:673eb9735d44 | 106 | // Remaining bits are ignored. |
RichardE | 4:673eb9735d44 | 107 | const Int16Pair *GetVelocities( UInt8 joyMap ) const { |
RichardE | 4:673eb9735d44 | 108 | return pairs + ( joyMap & 0x0F ); |
RichardE | 4:673eb9735d44 | 109 | } |
RichardE | 4:673eb9735d44 | 110 | |
RichardE | 4:673eb9735d44 | 111 | private : |
RichardE | 4:673eb9735d44 | 112 | |
RichardE | 4:673eb9735d44 | 113 | // Horizontal and vertical velocities for each combination of joystick inputs. |
RichardE | 4:673eb9735d44 | 114 | Int16Pair pairs[ 16 ]; |
RichardE | 4:673eb9735d44 | 115 | |
RichardE | 4:673eb9735d44 | 116 | }; |
RichardE | 4:673eb9735d44 | 117 | |
RichardE | 4:673eb9735d44 | 118 | #endif |
RichardE | 4:673eb9735d44 | 119 | |
RichardE | 4:673eb9735d44 | 120 | /* END of BulletVelocities.h */ |
RichardE | 4:673eb9735d44 | 121 |