Lab 6 for ECE 2036,a lame version of Galiga that needs to have the bullet fixed, but focuses on the concept of polymorphism

Dependencies:   mbed 4DGL-uLCD-SE PinDetect

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "global.h"
00003 #include "graphics.h"
00004 #include "TMP36.h"
00005 #include <cstdlib>
00006 #include <vector>
00007 
00008 bool loadedBullet = false;
00009 
00010 template <typename T> void drawVector(vector<T> &listRef) 
00011 {  
00012       for (int i = 0; i < listRef.size(); i++) 
00013          listRef[i]->draw(listRef[i]->getPosition()[0],listRef[i]->getPosition()[1]);  
00014 } 
00015 
00016 template <typename T> void updateVector(vector<T> &listRef) 
00017 {  
00018       for (int i = 0; i < listRef.size(); i++) 
00019          listRef[i]->update();  
00020 } 
00021 
00022 void shoot(void){
00023     loadedBullet = true;
00024 }
00025 
00026 void setUpAccelerometer();
00027 void setUpHardware();
00028 
00029 //Initalize Parts used
00030 uLCD_4DGL uLCD(p9,p10,p11);             // LCD Screen (tx, rx, reset)
00031 Serial pc(USBTX,USBRX); //not used in this program
00032 MMA8452 acc(p28,p27,40000);// Accelerometer (sda, sdc, rate)
00033 TMP36 myTMP36(p15);//TmepReading
00034 //Button Setup
00035 PinDetect buttonA(p21); //End turn 
00036 PinDetect buttonB(p22); // Dice change
00037 PinDetect buttonC(p23);//Continue
00038 
00039 //Acclerometer values
00040 double x =0.0l;
00041 double y =0.0l;
00042 double z =0.0l;
00043 
00044 int pos;
00045 int seedAssist;
00046 
00047 
00048 bool gameOver = false; //This is to check if the game is over or not in the while update loop
00049 
00050 int main()
00051 {
00052     setUpHardware();
00053     setUpAccelerometer();
00054 
00055     //Instaniating objects
00056     BobAlien BobObj1;
00057     BobAlien BobObj2;
00058     BobAlien BobObj3;
00059     AliceAlien AliceObj1;
00060     AliceAlien AliceObj2;
00061     AliceAlien AliceObj3;
00062     Ship shipObj;
00063     Bullet bulletObj;
00064     Rocket rocketObj;
00065     
00066     //Initializing derived pointers
00067     BobAlien * BobPtr1 = &BobObj1;
00068     BobAlien * BobPtr2 = &BobObj2;
00069     BobAlien * BobPtr3 = &BobObj3;
00070     AliceAlien * AlicePtr1 = &AliceObj1;
00071     AliceAlien * AlicePtr2 = &AliceObj2;
00072     AliceAlien * AlicePtr3 = &AliceObj3;
00073     Ship * shipPtr = &shipObj;
00074     Bullet * bulletPtr = &bulletObj;
00075     Rocket * rocketPtr = &rocketObj;
00076     
00077     //Base Pointers
00078     ScreenObjects * BobObjPtr1 = &BobObj1;
00079     ScreenObjects * BobObjPtr2 = &BobObj2;
00080     ScreenObjects * BobObjPtr3 = &BobObj3;
00081     ScreenObjects * AliceObjPtr1 = &AliceObj1;
00082     ScreenObjects * AliceObjPtr2 = &AliceObj2;
00083     ScreenObjects * AliceObjPtr3 = &AliceObj3;
00084     ScreenObjects * ShipObjPtr = &shipObj;
00085     ScreenObjects * BulletObjPtr = &bulletObj;
00086     ScreenObjects * RocketObjPtr = &rocketObj;
00087     
00088     
00089     vector<ScreenObjects *>ScreenObjectArray;
00090     
00091     //Pushing the values onto the vector
00092     ScreenObjectArray.push_back(BobObjPtr1);//0
00093     ScreenObjectArray.push_back(BobObjPtr2);//1
00094     ScreenObjectArray.push_back(BobObjPtr3);//2
00095     ScreenObjectArray.push_back(AliceObjPtr1);//3
00096     ScreenObjectArray.push_back(AliceObjPtr2);//4
00097     ScreenObjectArray.push_back(AliceObjPtr3);//5
00098     ScreenObjectArray.push_back(ShipObjPtr);//6
00099     ScreenObjectArray.push_back(BulletObjPtr);//7
00100     ScreenObjectArray.push_back(RocketObjPtr);//8
00101     //Ship Starting Position
00102     ScreenObjectArray[6]->setPosition(64,100);
00103     
00104    // seedAssist = abs(static_cast<int> (10000*myTMP36.read()) % 80+1);
00105     //Enemy Starting Positions
00106      //enemy 1
00107     ScreenObjectArray[0]->setPosition(10,10);
00108     ScreenObjectArray[0]->draw(ScreenObjectArray[0]->getPosition()[0],ScreenObjectArray[0]->getPosition()[1]);
00109     //uLCD.printf("%i",pos);
00110     //enemy2
00111     ScreenObjectArray[1]->setPosition(40,20);
00112     ScreenObjectArray[1]->draw(ScreenObjectArray[1]->getPosition()[0],ScreenObjectArray[1]->getPosition()[1]);
00113     //enemy3
00114     ScreenObjectArray[2]->setPosition(86,60);
00115     ScreenObjectArray[2]->draw(ScreenObjectArray[2]->getPosition()[0],ScreenObjectArray[2]->getPosition()[1]);
00116     //enemy4
00117     ScreenObjectArray[3]->setPosition(69,74);
00118     ScreenObjectArray[3]->draw(ScreenObjectArray[3]->getPosition()[0],ScreenObjectArray[3]->getPosition()[1]);
00119     //enemy5
00120     ScreenObjectArray[4]->setPosition(20,64);
00121     ScreenObjectArray[4]->draw(ScreenObjectArray[4]->getPosition()[0],ScreenObjectArray[4]->getPosition()[1]);
00122     //enemy6
00123     ScreenObjectArray[5]->setPosition(50,17);
00124     ScreenObjectArray[5]->draw(ScreenObjectArray[5]->getPosition()[0],ScreenObjectArray[5]->getPosition()[1]);
00125     
00126     //bulletPtr->move(*shipPtr);
00127 
00128     while(1) {
00129         drawVector(ScreenObjectArray);
00130         updateVector(ScreenObjectArray);
00131         
00132         
00133         /*bulleT.draw(bulleT.getPosition()[0],bulleT.getPosition()[1]);
00134         uLCD.printf("%i x, %i y",bulleT.getShipPositio()[0],bulleT.getShipPosition()[1]);
00135         bulleT.update();*/
00136         wait(.01);
00137         buttonA.attach_deasserted(&shoot);
00138          buttonA.setSampleFrequency();
00139         if(!acc.isXYZReady()) {
00140             wait(.01);
00141         } else {
00142             acc.readXYZGravity(&x,&y,&z);
00143             //uLCD.printf("%g\n",y);
00144             shipPtr->setDirection(shipPtr->move(y));
00145            
00146            
00147         }
00148     }
00149 }
00150 
00151 
00152 
00153 void setUpAccelerometer()
00154 {
00155     acc.setBitDepth(MMA8452::BIT_DEPTH_12);
00156     acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G);
00157     acc.setDataRate(MMA8452::RATE_100);
00158 }
00159 
00160 void setUpHardware(){
00161     //uLCD screen
00162     uLCD.baudrate(3000000);
00163     wait(0.3);
00164     //accelermoter
00165     acc.activate();
00166     //buttons
00167     buttonA.mode(PullDown);
00168     buttonB.mode(PullDown);
00169     buttonC.mode(PullDown);
00170     }
00171