Rex Raj / Mbed 2 deprecated el17rrrs

Dependencies:   mbed Gamepad N5110 mbed-rtos

Revision:
0:99fa5a619081
Child:
1:45493d1d0689
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GameEngine/GameEngine.cpp	Sat Apr 13 01:13:53 2019 +0000
@@ -0,0 +1,713 @@
+#include "GameEngine.h"
+
+GameEngine::GameEngine()
+{
+
+}
+
+GameEngine::~GameEngine()
+{
+
+}
+int backgrounds [48][84] = {
+    
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+
+};
+int r [3][13] = {
+    
+{0,1,0,0,0,0,0,0,0,0,0,1,0},
+{1,1,1,0,0,0,0,0,0,0,1,1,1},
+{0,1,0,0,1,1,1,1,1,0,0,1,0},
+
+};
+
+int e [3][3] = {
+    
+{0,1,0},
+{1,1,1},
+{0,1,0},
+
+};
+
+int x [3][19] = {
+    
+{0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0},
+{1,1,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1},
+
+};
+
+int explosion [23] [23] = {
+
+{0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0},
+{0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0},
+{0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0},
+{0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0},
+{0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0},
+{0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0},
+{0,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0},
+{0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0},
+{0,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0},
+{0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0},
+{0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
+{0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1},
+{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1},
+{0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0},
+{0,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0},
+{0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,0,0},
+{0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0},
+{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0},
+{0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1,1,0,0},
+{0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0},
+{0,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,0,0,0},
+{0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0},
+{0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0},
+
+};
+
+void GameEngine::init(int spacecraft_xpos,int spacecraft_ypos,int enemy_xpos, int enemy_ypos,int enemy2_xpos, int enemy2_ypos,int beam_size,int beam2_size, int speed)
+{
+    // initialise the game parameters
+    _spacecraft_xpos = spacecraft_xpos;
+    _spacecraft_ypos = spacecraft_ypos;
+    
+    _enemy_xpos = enemy_xpos;
+    _enemy_ypos = enemy_ypos;
+    
+    _enemy2_xpos = enemy2_xpos;
+    _enemy2_ypos = enemy2_ypos;
+  
+    
+    _beam_size = beam_size;
+    _beam2_size = beam2_size;
+    _speed = speed;
+    
+    
+    _p1x = GAP;
+    // x position on screen - WIDTH is defined in N5110.h
+     _e1a = WIDTH-_enemy_xpos; //12
+     _e1b = HEIGHT/2-_enemy_ypos;//4
+     
+     _e2a = WIDTH-_enemy2_xpos; //12
+     _e21b = HEIGHT/2 +_enemy2_ypos;
+     _e22b = HEIGHT/2 -_enemy2_ypos;//4
+    // puts spacecraft and enemy in middle
+    _p1.init(_spacecraft_xpos,_spacecraft_ypos);
+    _e1.init(_e1a,_e1b);
+    _e21.init(_e2a,_e21b,_speed);
+    _e22.init(_e2a,_e22b,_speed);
+    _stage = 0;
+    //_enemybeam.init(_beam_size,_e1a,_e1b);
+
+}
+
+void GameEngine::read_input(Gamepad &pad)
+{
+    _d = pad.get_direction();
+    _mag = pad.get_mag();
+    _R = pad.check_event(Gamepad::R_PRESSED);
+    
+}
+
+void GameEngine::draw(Gamepad &pad,N5110 &lcd)
+{
+    // draw the background of the game
+    lcd.drawSprite(0,0,48,84,(int *)backgrounds);
+    lcd.drawSprite(6,4,3,13,(int *)r);
+    //health
+    draw_enemy_health(lcd);
+    draw_spacecraft_health(pad);
+    // spacecraft
+    _p1.character(lcd);
+    // enemy 1
+    _e1.enemy(lcd);
+    // spacecraft beam
+    _beam.draw(lcd);
+    // enemy beam
+    _enemybeam.draw(lcd);
+    // level one completion
+  //  mission_one_complete(lcd);
+    // level one fail
+   // mission_one_fail(lcd,pad);
+    
+    
+}
+void GameEngine::draw2(Gamepad &pad,N5110 &lcd)
+{
+    lcd.drawSprite(0,0,48,84,(int *)backgrounds);
+    lcd.drawSprite(6,4,3,3,(int *)e);
+    draw_spacecraft_health(pad);
+    draw_enemy21_health(lcd);
+    draw_enemy22_health(lcd);
+    // spacecraft
+    _p1.character(lcd);
+    _e21.enemy2(lcd);
+    _e22.enemy2(lcd);
+    _beam.draw(lcd);
+    _enemybeam2.draw(lcd);
+    
+} 
+
+void GameEngine::update(Gamepad &pad,N5110 &lcd)
+{
+    check_goal(pad);
+    check_enemybeam_collisions(pad);
+   // check_beam_pressed(pad,lcd);
+    // important to update paddles and ball before checking collisions so can
+    // correct for it before updating the display
+    _p1.update(_d,_mag);
+    _beam.update();
+    _enemybeam.update();
+    check_enemy_collisions(pad);
+    check_spacecraft_collisions(pad);
+    spacecraft_dead(lcd,pad);
+    enemy_dead(lcd,pad);
+    check_mission_one(pad);
+   // if (_second_mission == true){
+   // _p1.update(_d,_mag);    
+   // _e21.update();
+   // _e22.update();
+}
+
+void GameEngine::update2(Gamepad &pad,N5110 &lcd)
+{
+    check_goal(pad);
+    check_enemybeam2_collisions(pad);
+   // check_beam_pressed(pad,lcd);
+    // important to update paddles and ball before checking collisions so can
+    // correct for it before updating the display
+    _p1.update(_d,_mag);
+    _beam.update();
+    _enemybeam2.update();
+    _e21.update();
+    _e22.update();
+    check_enemy2_collisions(pad);
+    check_spacecraft2_collisions(pad);
+    check_wall_collisions(pad);
+    spacecraft2_dead(lcd,pad);
+    enemy2_dead(lcd,pad);
+    check_mission_two(pad);
+
+}
+
+void GameEngine::check_enemy_collisions(Gamepad &pad)
+{
+    
+    Vector2D beam_pos = _beam.get_pos();
+    // check e1 next
+    Vector2D e1_pos = _e1.get_enemy_pos();
+
+    // see if ball has hit the paddle by checking for overlaps
+    if (
+        (beam_pos.y >= e1_pos.y) && //top
+        (beam_pos.y <= e1_pos.y + 7) && //bottom
+        (beam_pos.x + _beam_size >= _e1a) && //left
+        (beam_pos.x + _beam_size <= _e1a + 8)  //right
+    ) {
+        // if it has, fix position and reflect x velocity
+       // beam_pos.x = _e1a - _beam_size;
+       // beam_velocity.x = -beam_velocity.x;
+        // audio feedback
+        _e1.add_health();
+        //_beam.init(_beam_size,p1_pos.x,p1_pos.y);
+        pad.tone(1000.0,0.1);
+    }
+    
+    // write new attributes
+    _beam.set_pos(beam_pos);
+}
+
+void GameEngine::check_enemy2_collisions(Gamepad &pad)
+{
+    
+    Vector2D beam_pos = _beam.get_pos();
+    // check e1 next
+    Vector2D e21_pos = _e21.get_enemy21_pos();
+    Vector2D e22_pos = _e22.get_enemy22_pos();
+    
+    // see if ball has hit the paddle by checking for overlaps
+    if (
+        (beam_pos.y >= e21_pos.y) && //top
+        (beam_pos.y <= e21_pos.y + 7) && //bottom
+        (beam_pos.x + _beam_size >= _e2a) && //left
+        (beam_pos.x + _beam_size <= _e2a + 7)  //right
+    ) {
+        // if it has, fix position and reflect x velocity
+       // beam_pos.x = _e1a - _beam_size;
+       // beam_velocity.x = -beam_velocity.x;
+        // audio feedback
+        _e21.add_health();
+        //_beam.init(_beam_size,p1_pos.x,p1_pos.y);
+        pad.tone(1000.0,0.1);
+    }
+    if (
+        (beam_pos.y >= e22_pos.y) && //top
+        (beam_pos.y <= e22_pos.y + 7) && //bottom
+        (beam_pos.x + _beam_size >= _e2a) && //left
+        (beam_pos.x + _beam_size <= _e2a + 7)  //right
+    ) {
+        // if it has, fix position and reflect x velocity
+       // beam_pos.x = _e1a - _beam_size;
+       // beam_velocity.x = -beam_velocity.x;
+        // audio feedback
+        _e22.add_health();
+        //_beam.init(_beam_size,p1_pos.x,p1_pos.y);
+        pad.tone(1000.0,0.1);
+    }
+    // write new attributes
+    _beam.set_pos(beam_pos);
+}
+
+void GameEngine::check_goal(Gamepad &pad)
+{
+    Vector2D p1_pos = _p1.get_pos();
+    Vector2D beam_pos = _beam.get_pos();
+    // P2 has scored
+    if (beam_pos.x + _beam_size > WIDTH) {
+        if(_R == true){
+    _beam.init(_beam_size,p1_pos.x,p1_pos.y);
+    }
+}
+}
+
+void GameEngine::check_enemybeam_collisions(Gamepad &pad)
+{
+    Vector2D enemybeam_pos = _enemybeam.get_pos();
+    // P2 has scored
+    if ((_ebeam == true)||(enemybeam_pos.x - _beam_size < 0)) {
+    _enemybeam.init(_beam_size,_e1a,_e1b);
+    _ebeam = false;
+    }
+}
+
+void GameEngine::check_enemybeam2_collisions(Gamepad &pad)
+{
+    Vector2D enemy21_pos = _e21.get_enemy21_pos();
+    Vector2D enemy22_pos = _e22.get_enemy22_pos();
+    Vector2D enemybeam21_pos = _enemybeam2.get_pos_21();
+    Vector2D enemybeam22_pos = _enemybeam2.get_pos_22();
+    // P2 has scored
+    if ((_ebeam21 == true)||(_ebeam22 == true)||(enemybeam21_pos.x - _beam2_size < 0)||(enemybeam22_pos.x - _beam2_size < 0)) {
+    _enemybeam2.init(_beam2_size,enemy21_pos.x,enemy21_pos.y,enemy22_pos.x,enemy22_pos.y);
+    _ebeam21 = false;
+    _ebeam22 = false;
+    }
+}
+
+void GameEngine::check_spacecraft_collisions(Gamepad &pad)
+{
+    Vector2D enemybeam_pos = _enemybeam.get_pos();
+    Vector2D p1_pos = _p1.get_pos();
+
+     // see if beam has hit the enemy by checking for overlaps
+    if (
+        (enemybeam_pos.y >= p1_pos.y) && //top
+        (enemybeam_pos.y <= p1_pos.y + 11) && //bottom
+        (enemybeam_pos.x >= _p1x) && //left
+        (enemybeam_pos.x <= _p1x + 11)  //right
+    ) {
+        _p1.add_health();
+        _ebeam = true;
+        pad.tone(1000.0,0.1);
+    }
+    
+    _enemybeam.set_pos(enemybeam_pos);
+    
+}
+
+void GameEngine::check_spacecraft2_collisions(Gamepad &pad)
+{
+    Vector2D enemybeam21_pos = _enemybeam2.get_pos_21();
+    Vector2D enemybeam22_pos = _enemybeam2.get_pos_22();
+    Vector2D p1_pos = _p1.get_pos();
+
+     // see if beam has hit the enemy by checking for overlaps
+    if (
+        (enemybeam21_pos.y >= p1_pos.y) && //top
+        (enemybeam21_pos.y <= p1_pos.y + 11) && //bottom
+        (enemybeam21_pos.x >= _p1x) && //left
+        (enemybeam21_pos.x <= _p1x + 11)  //right
+    ) {
+        _p1.add_health();
+        _ebeam21 = true;
+        pad.tone(1000.0,0.1);
+    }
+    if (
+        (enemybeam22_pos.y >= p1_pos.y) && //top
+        (enemybeam22_pos.y <= p1_pos.y + 11) && //bottom
+        (enemybeam22_pos.x >= _p1x) && //left
+        (enemybeam22_pos.x <= _p1x + 11)  //right
+    ) {
+        _p1.add_health();
+        _ebeam22 = true;
+        pad.tone(1000.0,0.1);
+    }
+    _enemybeam2.set_pos_21(enemybeam21_pos);
+    _enemybeam2.set_pos_22(enemybeam22_pos);
+    
+}
+void GameEngine::check_wall_collisions(Gamepad &pad)
+{
+    // read current ball attributes
+    Vector2D enemy21_pos = _e21.get_enemy21_pos();
+    Vector2D enemy22_pos = _e22.get_enemy22_pos();
+    Vector2D enemy21_movement = _e21.get_movement();
+    Vector2D enemy22_movement = _e22.get_movement();
+
+    // check if hit top wall
+    if (enemy21_pos.y <= 1) {  //  1 due to 1 pixel boundary
+        enemy21_pos.y = 1;  // bounce off ceiling without going off screen
+        enemy21_movement.y = -enemy21_movement.y;
+    }
+    // check if hit bottom wall
+    else if (enemy21_pos.y + 7 >= (HEIGHT-1) ) { // bottom pixel is 47
+        // hit bottom
+        enemy21_pos.y = (HEIGHT-1) - 7;  // stops ball going off screen
+        enemy21_movement.y = -enemy21_movement.y;
+        // audio feedback
+    } else if (enemy22_pos.y + 7 >= (HEIGHT-1) ) { // bottom pixel is 47
+        // hit bottom
+        enemy22_pos.y = (HEIGHT-1) - 7;  // stops ball going off screen
+        enemy22_movement.y = -enemy22_movement.y;
+        // audio feedback
+    } else if (enemy22_pos.y <= 1) {  //  1 due to 1 pixel boundary
+        enemy22_pos.y = 1;  // bounce off ceiling without going off screen
+        enemy22_movement.y = -enemy22_movement.y;
+    }
+
+    // update ball parameters
+    _e21.set_movement(enemy21_movement);
+    _e22.set_movement(enemy22_movement);
+    _e21.set_enemy21_pos(enemy21_pos);
+    _e22.set_enemy22_pos(enemy22_pos);
+}
+void GameEngine::enemy_dead(N5110 &lcd, Gamepad &pad){
+    int e1_health = _e1.get_health();
+    Vector2D e1_pos = _e1.get_enemy_pos();
+    if (e1_health == 10){
+        lcd.drawSprite(e1_pos.x-10,e1_pos.y-10,23,23,(int *)explosion);
+        pad.tone(1000.0,0.5);
+        pad.tone(800.0,0.5);
+        pad.tone(600.0,0.5);
+        pad.tone(400.0,0.5);
+       // lcd.refresh();
+        wait(0.5);
+        lcd.drawSprite(e1_pos.x-10,e1_pos.y-10,23,23,(int *)explosion);
+        _e1.update();
+      //  wait(2.0);
+        _stage = 2;
+        _e1.add_health();
+        lcd.refresh();
+    }
+    
+}
+
+void GameEngine::enemy2_dead(N5110 &lcd, Gamepad &pad){
+    
+    int e21_health = _e21.get_health();
+    int e22_health = _e22.get_health();
+    
+    Vector2D e21_pos = _e21.get_enemy21_pos();
+    Vector2D e22_pos = _e22.get_enemy22_pos();
+    
+    if ((e21_health >= 10) && (e22_health >= 10)){
+        lcd.drawSprite(e21_pos.x-10,e21_pos.y-10,23,23,(int *)explosion);
+        lcd.drawSprite(e22_pos.x-10,e22_pos.y-10,23,23,(int *)explosion);
+        pad.tone(1000.0,0.5);
+        pad.tone(800.0,0.5);
+        pad.tone(600.0,0.5);
+        pad.tone(400.0,0.5);
+       // lcd.refresh();
+        wait(0.2);
+        lcd.drawSprite(e21_pos.x-10,e21_pos.y-10,23,23,(int *)explosion);
+        lcd.drawSprite(e22_pos.x-10,e22_pos.y-10,23,23,(int *)explosion);
+        _stage = 4;
+        _e21.add_health();
+        _e22.add_health();
+        lcd.refresh();
+    }
+    
+}
+void GameEngine::spacecraft_dead(N5110 &lcd, Gamepad &pad)
+{
+   
+    int p1_health = _p1.get_health();
+    Vector2D p1_pos = _p1.get_pos();
+    
+    if (p1_health == 6){
+        
+        lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion);
+        pad.tone(1000.0,0.5);
+        pad.tone(800.0,0.5);
+        pad.tone(600.0,0.5);
+        pad.tone(400.0,0.5);
+        wait(0.5);
+        lcd.refresh();
+        wait(0.1);
+        lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion);
+        _p1.update_move();
+      //  wait(2.0);
+        _stage = 1; 
+        _p1.add_health();
+        lcd.refresh();
+    }
+    
+}
+
+void GameEngine::spacecraft2_dead(N5110 &lcd, Gamepad &pad)
+{
+   
+    int p1_health = _p1.get_health();
+    Vector2D p1_pos = _p1.get_pos();
+    
+    if (p1_health == 6){
+        
+        lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion);
+        pad.tone(1000.0,0.5);
+        pad.tone(800.0,0.5);
+        pad.tone(600.0,0.5);
+        pad.tone(400.0,0.5);
+        wait(0.5);
+        lcd.refresh();
+        wait(0.1);
+        lcd.drawSprite(p1_pos.x-5,p1_pos.y-7,23,23,(int *)explosion);
+        _p1.update_move();
+      //  wait(2.0);
+        _stage = 3;
+        _p1.add_health();
+        lcd.refresh();
+    }
+    
+}
+void GameEngine::check_mission_one(Gamepad &pad){
+    
+ if (_stage == 1){
+    pad.tone(233.0,0.5);
+    wait(0.5);
+    pad.tone(184.0,0.5);
+    wait(0.5);
+    pad.tone(174.0,2.0);
+    wait(1.0);
+ } else if (_stage == 2){
+     
+     pad.leds_off();
+     pad.tone(184.0,0.2);
+     wait(0.5);
+     pad.tone(233.0,0.2);
+     wait(0.5);
+     pad.tone(184.0,0.2);
+     wait(0.5);
+     pad.tone(233.0,0.2);
+     wait(0.5);
+     pad.tone(184.0,0.2);
+     wait(0.5);
+     pad.tone(233.0,0.2);
+     wait(0.5);
+     pad.tone(184.0,2.0);
+     wait(0.5);
+ }
+}
+
+void GameEngine::check_mission_two(Gamepad &pad){
+    
+ if (_stage == 3){
+    pad.tone(233.0,0.5);
+    wait(0.5);
+    pad.tone(184.0,0.5);
+    wait(0.5);
+    pad.tone(174.0,2.0);
+    wait(1.0);
+ } else if (_stage == 4){
+     
+     pad.leds_off();
+     pad.tone(184.0,0.2);
+     wait(0.5);
+     pad.tone(233.0,0.2);
+     wait(0.5);
+     pad.tone(184.0,0.2);
+     wait(0.5);
+     pad.tone(233.0,0.2);
+     wait(0.5);
+     pad.tone(184.0,0.2);
+     wait(0.5);
+     pad.tone(233.0,0.2);
+     wait(0.5);
+     pad.tone(184.0,2.0);
+     wait(0.5);
+ }
+}
+//void GameEngine::mission_one_complete(N5110 &lcd){
+  
+ // if (_stage_two == true){
+ // lcd.clear();
+ // lcd.drawSprite(0,0,48,84,(int *)mission_one);
+ // lcd.refresh();
+ // }
+ 
+//}
+
+//void GameEngine::mission_one_fail(N5110 &lcd,Gamepad &pad)
+//{
+ // if (_stage_one == true){
+ // lcd.clear(); 
+ // lcd.drawSprite(6,5,42,73,(int *)mission_one_failure); 
+ // lcd.refresh();
+ // if (pad.check_event(Gamepad::B_PRESSED)){
+ //   lcd.init();
+ //   pad.init();
+   //   }
+ // }
+//}
+
+void GameEngine::draw_enemy_health(N5110 &lcd)
+{
+    // get health of the enemy 
+    int e1_health = _e1.get_health();
+    
+    lcd.drawRect(56,40,20,4,FILL_TRANSPARENT);
+    lcd.drawRect(56,40,20-2*e1_health,4,FILL_BLACK);
+    
+    
+        
+}
+
+void GameEngine::draw_enemy21_health(N5110 &lcd)
+{
+    // get health of the enemy 
+    int e21_health = _e21.get_health();
+    
+    if (e21_health < 10){
+    lcd.drawRect(60,22,20,4,FILL_TRANSPARENT);
+    lcd.drawRect(60,22,20-2*e21_health,4,FILL_BLACK);
+    }
+    else {
+    lcd.drawRect(60,22,20,4,FILL_TRANSPARENT);
+    }    
+}
+
+void GameEngine::draw_enemy22_health(N5110 &lcd)
+{
+    // get health of the enemy 
+    int e22_health = _e22.get_health();
+    
+    if (e22_health < 10){
+    lcd.drawRect(60,28,20,4,FILL_TRANSPARENT);
+    lcd.drawRect(60,28,20-2*e22_health,4,FILL_BLACK);
+    }
+    else {
+    lcd.drawRect(60,28,20,4,FILL_TRANSPARENT);
+    } 
+        
+}
+
+void GameEngine::draw_spacecraft_health(Gamepad &pad)
+{
+    //get the health of the spacecraft 
+    int p1_health = _p1.get_health();
+    
+    if (p1_health == 0){
+        pad.leds_on();
+    }else if (p1_health == 1){
+        pad.led(1,0);
+        pad.led(2,1);
+        pad.led(3,1);
+        pad.led(4,1);
+        pad.led(5,1);
+        pad.led(6,1);
+        
+    }else if (p1_health == 2){
+        pad.led(1,0);
+        pad.led(2,0);
+        pad.led(3,1);
+        pad.led(4,1);
+        pad.led(5,1);
+        pad.led(6,1);
+    }else if (p1_health == 3){
+        pad.led(1,0);
+        pad.led(2,0);
+        pad.led(3,0);
+        pad.led(4,1);
+        pad.led(5,1);
+        pad.led(6,1);
+        
+    }else if (p1_health == 4){
+        pad.led(1,0);
+        pad.led(2,0);
+        pad.led(3,0);
+        pad.led(4,0);
+        pad.led(5,1);
+        pad.led(6,1);
+        
+    }else if (p1_health == 5){
+        pad.led(1,0);
+        pad.led(2,0);
+        pad.led(3,0);
+        pad.led(4,0);
+        pad.led(5,0);
+        pad.led(6,1);
+        
+    } else {
+        pad.leds_off();
+    }
+        
+}
+    
+int GameEngine::get_game_stage() {
+    int stage = _stage;
+    return stage;    
+}
+
+int GameEngine::restart_game_stage() {
+    int stage = _stage;
+    
+    stage = 0;
+    return stage;    
+}        
\ No newline at end of file