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
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
Generated on Fri Aug 19 2022 02:30:07 by
1.7.2