SharpShooter

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

Revision:
12:2f358065ba3f
Parent:
11:55b65415b6ba
Child:
13:67e79a582164
diff -r 55b65415b6ba -r 2f358065ba3f MainGame.cpp
--- a/MainGame.cpp	Fri Oct 28 20:07:38 2016 +0000
+++ b/MainGame.cpp	Sat Oct 29 00:18:10 2016 +0000
@@ -14,6 +14,10 @@
 DigitalOut myled3(LED3);
 DigitalOut myled4(LED4);
 
+InterruptIn center(p25);
+InterruptIn left(p26);
+InterruptIn right(p28);
+
 ///sd/wavfiles/def_swar.wav
 
 /*INSTANTIATION*/
@@ -22,15 +26,23 @@
 SDFileSystem sd(p5, p6, p7, p8, "sd");
 AnalogOut DACout(p18);
 wave_player waver(&DACout);
+Shooter player1;
+Bullet bullet;
+bool isBullet;
+Mutex mutex;
 
 /*STRUCT INITIALIZATION*/
+/*
 struct ObstLocation {
     int x1, y1, x2, y2;
 };
+*/
 
 struct TargetLocation {
     int x,y,r;
 };
+
+
 /*
 struct BulletLocation {
     int x, topY, bottomY;   
@@ -41,13 +53,16 @@
 int levelNum;
 BulletLocation bulletLocation;
 ObstLocation * obstaclePtr;
+Obstacle obsArr[3];
 TargetLocation * targetsPtr = new TargetLocation[3];
+bool play = 0;
 
 
 
 void startGame() {
-    uLCD.locate(34,34);
-    uLCD.set_font_size(4, 4); 
+    uLCD.background_color(BACKGROUND);
+    uLCD.locate(0,0);
+    //uLCD.set_font_size(44, 44); 
     uLCD.printf("\nSharp Shooter!!\n");
     wait(0.1);
     
@@ -55,48 +70,96 @@
     wave_file=fopen("/sd/wavfiles/pitfall.wav","r");
     waver.play(wave_file);
     fclose(wave_file);
-}
-
-void initializeLevel(int level) {
-    levelNum = level;
-    numTries = 10;
-    //draw header (level #, numTries) at the top
     
-    //createTargets();
-    //createObstacles(level);
-    //createShooter();
+    wait(2);
+    uLCD.cls();
+    //uLCD.filled_rectangle(0,0,127,127,BACKGROUND);
 }
 
 void createTargets() {
     //draw all targets
     //initialize targetPtr w locations of where theyre drawn
+    uLCD.filled_circle(24,15,5,TARGET);
+    uLCD.filled_circle(64,15,5,TARGET);
+    uLCD.filled_circle(104,15,5,TARGET);
+
 }
 
 void createShooter() {
-    
+    player1.drawShooter();
 }
-/*
+
 void createObstacles(int num) {
-    Obstacle obsArr[num];
     obstaclePtr = new ObstLocation[num];
     //dummy x values, CHANGE LATER
     if (num == 1) {
-        obsArr[0] = new Obstacle(15, 15, 115, 115, uLCD);
+        obsArr[0] = Obstacle(2, 62, 50, 65);
     } else if (num == 2) {
-        obsArr[0] = new Obstacle(15, 15, 115, 115, uLCD);
-        obsArr[1] = new Obstacle(15, 15, 115, 115, uLCD);
+        obsArr[0] = Obstacle(15, 15, 115, 115);
+        obsArr[1] = Obstacle(15, 15, 115, 115);
     } else if (num == 3) {
-        obsArr[0] = new Obstacle(15, 15, 115, 115, uLCD);
-        obsArr[1] = new Obstacle(15, 15, 115, 115, uLCD);
-        obsArr[2] = new Obstacle(15, 15, 115, 115, uLCD);
+        obsArr[0] = Obstacle(15, 15, 115, 115);
+        obsArr[1] = Obstacle(15, 15, 115, 115);
+        obsArr[2] = Obstacle(15, 15, 115, 115);
     }
     for (int i = 0; i < num; i++) {
         obstaclePtr[i] = obsArr[i].getLocation();
+        obsArr[i].drawObstacle();
+    }   
+}
+
+void initializeLevel() {
+    numTries = 10;
+    //draw header (level #, numTries) at the top
+    uLCD.locate(0,0);
+    uLCD.printf("LEVEL:%d BULLETS:%d", levelNum, numTries);
+    
+    createTargets();
+    createObstacles(levelNum);
+    createShooter();
+}
+
+void movingBullet(void const *args) {
+    while (true) {
+        if(isBullet) {
+            mutex.lock();
+            bullet.move();
+            mutex.unlock();
+
+            Thread::wait(100);
+        }   
     }
 }
-*/
+
+void movingObs(void const *args) {
+    while (true) {
+        if(play) {
+            mutex.lock();
+            if (levelNum == 1) {
+                obsArr[0].setDirection(1);
+                obsArr[0].move(3);
+            } else if (levelNum == 2) {
+                obsArr[0].setDirection(1);
+                obsArr[0].move(6);
+                obsArr[1].setDirection(0);
+                obsArr[1].move(6);
+            } else if (levelNum == 3) {
+                obsArr[0].setDirection(1);
+                obsArr[0].move(9);
+                obsArr[1].setDirection(0);
+                obsArr[1].move(9);
+                obsArr[2].setDirection(1);
+                obsArr[2].move(9);
+            }   
+            mutex.unlock();
+            Thread::wait(100);
+        }
+    }
+}
+
 void shoot() {
-    
+    bullet.drawBullet(player1.getLocation(), 115);
+    isBullet = 1;
 }
 
 void checkIfHit();
@@ -112,31 +175,22 @@
 void redrawTarget();
 
 int main() {
-    int currLevel = 1;
+    levelNum = 1;
+    isBullet = 0;
+    Thread bulletThread(movingBullet);
+    Thread obstacleThread(movingObs);
     while(1) {
         
         startGame();
         //uLCD.rectangle(0,0,100,100, 0xffffff);
-        initializeLevel(currLevel);
-        bool play = true;
-        
-        wait(100);
-        
-        /*
+        initializeLevel();
+        play = 1;
         while (play) { //actual game play code
-            //handle controls (5 tactile swtich)
-            if(myNav.fire()) shoot();
-            if(myNav.right()) moveShooter();
-            if(myNav.left()) myled=!myled;
-            
-            
-            
+            if(!right.read()) player1.moveRight();
+            if(!left.read()) player1.moveLeft();
+            if(!center.read()) shoot();
+            //if(isBullet) bullet.move();
+            wait(0.12);
         }
-        
-        */
-        
-        
-        
-        
     }
 }