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

Revision:
7:e72691603fd3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BulletVelocityCalculator.cpp	Sat Jun 08 16:44:54 2013 +0000
@@ -0,0 +1,63 @@
+/*
+ * SOURCE FILE : BulletVelocityCalculator.cpp
+ *
+ * Definition of class BulletVelocityCalculator.
+ *
+ */
+
+#include <stdlib.h>         // for abs
+#include "BulletVelocityCalculator.h"
+
+// A few constants.
+#define COS11_25 0.980785
+#define SIN11_25 0.195090
+#define COS33_75 0.831470
+#define SIN33_75 0.555570
+#define COS56_25 0.555570
+#define SIN56_25 0.831470
+#define COS78_75 0.195090
+#define SIN78_75 0.980785
+
+/*******************************/
+/* CALCULATE BULLET VELOCITIES */
+/*******************************/
+// Pass distances to target in dx and dy.
+// Pass velocity at which bullet moves in v.
+// Horizontal and vertical velocities returned in variables pointed to by hv and vv.
+void BulletVelocityCalculator::CalculateVelocities( Int16 dx, Int16 dy, Int16 v, Int16 *hv, Int16 *vv ) {
+    Int16 ax = abs( dx );
+    Int16 ay = abs( dy );
+    if( ax < 8 ) {
+        *hv = 0;
+        *vv = v;
+    }
+    else if( ay < 8 ) {
+        *hv = v;
+        *vv = 0;
+    }
+    else {
+        float ratio = (float)ay / (float)ax;
+        if( ratio < 0.5f ) {
+            *hv = v * COS11_25;
+            *vv = v * SIN11_25;
+        }
+        else if( ratio < 1.0f ) {
+            *hv = v * COS33_75;
+            *vv = v * SIN33_75;
+        }
+        else if( ratio < 2.0f ) {
+            *hv = v * COS56_25;
+            *vv = v * SIN56_25;
+        }
+        else {
+            *hv = v * COS78_75;
+            *vv = v * SIN78_75;
+        }
+    }
+    if( dx < 0 ) {
+        *hv = -(*hv);
+    }
+    if( dy < 0 ) {
+        *vv = -(*vv);
+    }
+}