Stephen Schwahn / Mbed 2 deprecated Dodger

Dependencies:   4DGL-uLCD-SE LSM9DS1_Library SDFileSystem mbed-rtos mbed wave_player

Revision:
3:27889fffc2f7
Parent:
2:623f29bad35c
Child:
4:5c7d990d79ac
--- a/main.cpp	Thu Mar 10 22:51:12 2016 +0000
+++ b/main.cpp	Sat Mar 12 19:59:00 2016 +0000
@@ -2,48 +2,90 @@
 #include "InputHandler.h"
 #include "Invader.h"
 #include "Player.h"
+#include "SDFileSystem.h"
+
+#include <wave_player.h>
+#include <vector>
+
+#define SIGNAL_KILL 200
 
 #define WIDTH 128
 #define HEIGHT 128
 
-//DigitalOut led(LED1);
+#define NUM_INVADERS 2
 
-InputHandler input(p9, p10, 0xD6, 0x3C, p15);
+DigitalOut led(LED1);
+
+AnalogOut DACout(p18);
+ SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
 
-uLCD_4DGL uLCD(p28,p27,p30); // serial tx, serial rx, reset pin;
-
-//Player player(&uLCD, &input, WIDTH/2, HEIGHT/2);
-Invader invader(&uLCD, WIDTH/2, HEIGHT/2, 0, 2);
+void updatePlayer(const void* player) {
+    while(true) {
+        Player *p = (Player*)player;
+        p->update(WIDTH, HEIGHT);
+        Thread::wait(30);
+    }
+}
 
-void gameLoop(void const *p) 
-{      
-//    bool alive = true;
-//    while(alive) {
-////        player.update();
-//        invader.update();
-//        
-//        invader.draw();
-////        player.draw();
-//        
-//        // If there is a collision, we are done
-////        if (invader.intersects(player.getX(), player.getY(), player.getWidth(), player.getHeight())) {
-////            led = 1;
-////            alive = false;
-////        }
-//        
-//        Thread::wait(32); // 30 FPS
-//    }
+void updateInvader(const void* invaders) {
+    std::vector<Invader*> invaderVector = *((std::vector<Invader*>*)invaders);
+    while(true) {
+        for (std::vector<Invader*>::iterator it = invaderVector.begin(); it != invaderVector.end(); ++it) {
+            (*it)->update();
+        }
+        Thread::wait(30);  
+    }
+}
+
+FILE *wave_file;
     
+void playBackgroundMusic(const void* waver) {
+    wave_player* playMe = (wave_player*)waver;
+    playMe->play(wave_file);
+    Thread::wait(50);
 }
 
 int main() {
-    Thread* gameThread = new Thread(gameLoop);
+    InputHandler input(p9, p10, 0xD6, 0x3C, p15);
+    uLCD_4DGL uLCD(p28,p27,p30); // serial tx, serial rx, reset pin;
+
+    Player player(&uLCD, &input, WIDTH/2, HEIGHT/2);
+    
+    std::vector<Invader *> invaders;
+    for (int i = 0; i < NUM_INVADERS; i++) {
+        invaders.push_back(new Invader(&uLCD, WIDTH, HEIGHT));
+    }
+    
+    wave_player waver(&DACout);
+    wave_file=fopen("/sd/beethoven.wav","r");
+    
     Thread* inputThread = input.start();
+    Thread* wavplayerThread = new Thread(playBackgroundMusic, &waver);
     uLCD.background_color(BLACK);
-    invader.draw();
-    while(1) {
-        printf("xAccel: %.6f\n\ryAccel: %.6f\n\rbutton: %s\n\r", input.getXAccel(), input.getYAccel(), input.getPushed() ? "true" : "false");
 
-        wait(0.5);
+    bool alive = false;
+    while(true) {
+        if (!alive) {
+            // Display the starting image
+            while(!input.getPushed()) {}
+            alive = true;
+        }
+        Thread* playerThread = new Thread(updatePlayer, &player);
+        Thread* invaderThread = new Thread(updateInvader, &invaders);
+        while (alive) {
+            player.draw();
+            for (std::vector<Invader*>::iterator it = invaders.begin(); it != invaders.end(); ++it) {
+                 (*it)->draw();
+                  alive = !(*it)->intersects(player.getX(), player.getY(), player.getWidth(), player.getHeight());
+                  led = alive;
+            }
+            wait_ms(32);
+        }
+        playerThread->terminate();
+        invaderThread->terminate();
+        wavplayerThread->terminate();
+        
+        wave_file=fopen("/sd/blowup.wav","r");
+        waver.play(wave_file);
     }
 }