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@0:660af2d0e42d, 2022-04-27 (annotated)
- Committer:
- nasiromar
- Date:
- Wed Apr 27 05:31:20 2022 +0000
- Revision:
- 0:660af2d0e42d
Lame Game Lab 6
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nasiromar | 0:660af2d0e42d | 1 | #include "mbed.h" |
nasiromar | 0:660af2d0e42d | 2 | #include "global.h" |
nasiromar | 0:660af2d0e42d | 3 | #include "graphics.h" |
nasiromar | 0:660af2d0e42d | 4 | #include "TMP36.h" |
nasiromar | 0:660af2d0e42d | 5 | #include <cstdlib> |
nasiromar | 0:660af2d0e42d | 6 | #include <vector> |
nasiromar | 0:660af2d0e42d | 7 | |
nasiromar | 0:660af2d0e42d | 8 | bool loadedBullet = false; |
nasiromar | 0:660af2d0e42d | 9 | |
nasiromar | 0:660af2d0e42d | 10 | template <typename T> void drawVector(vector<T> &listRef) |
nasiromar | 0:660af2d0e42d | 11 | { |
nasiromar | 0:660af2d0e42d | 12 | for (int i = 0; i < listRef.size(); i++) |
nasiromar | 0:660af2d0e42d | 13 | listRef[i]->draw(listRef[i]->getPosition()[0],listRef[i]->getPosition()[1]); |
nasiromar | 0:660af2d0e42d | 14 | } |
nasiromar | 0:660af2d0e42d | 15 | |
nasiromar | 0:660af2d0e42d | 16 | template <typename T> void updateVector(vector<T> &listRef) |
nasiromar | 0:660af2d0e42d | 17 | { |
nasiromar | 0:660af2d0e42d | 18 | for (int i = 0; i < listRef.size(); i++) |
nasiromar | 0:660af2d0e42d | 19 | listRef[i]->update(); |
nasiromar | 0:660af2d0e42d | 20 | } |
nasiromar | 0:660af2d0e42d | 21 | |
nasiromar | 0:660af2d0e42d | 22 | void shoot(void){ |
nasiromar | 0:660af2d0e42d | 23 | loadedBullet = true; |
nasiromar | 0:660af2d0e42d | 24 | } |
nasiromar | 0:660af2d0e42d | 25 | |
nasiromar | 0:660af2d0e42d | 26 | void setUpAccelerometer(); |
nasiromar | 0:660af2d0e42d | 27 | void setUpHardware(); |
nasiromar | 0:660af2d0e42d | 28 | |
nasiromar | 0:660af2d0e42d | 29 | //Initalize Parts used |
nasiromar | 0:660af2d0e42d | 30 | uLCD_4DGL uLCD(p9,p10,p11); // LCD Screen (tx, rx, reset) |
nasiromar | 0:660af2d0e42d | 31 | Serial pc(USBTX,USBRX); //not used in this program |
nasiromar | 0:660af2d0e42d | 32 | MMA8452 acc(p28,p27,40000);// Accelerometer (sda, sdc, rate) |
nasiromar | 0:660af2d0e42d | 33 | TMP36 myTMP36(p15);//TmepReading |
nasiromar | 0:660af2d0e42d | 34 | //Button Setup |
nasiromar | 0:660af2d0e42d | 35 | PinDetect buttonA(p21); //End turn |
nasiromar | 0:660af2d0e42d | 36 | PinDetect buttonB(p22); // Dice change |
nasiromar | 0:660af2d0e42d | 37 | PinDetect buttonC(p23);//Continue |
nasiromar | 0:660af2d0e42d | 38 | |
nasiromar | 0:660af2d0e42d | 39 | //Acclerometer values |
nasiromar | 0:660af2d0e42d | 40 | double x =0.0l; |
nasiromar | 0:660af2d0e42d | 41 | double y =0.0l; |
nasiromar | 0:660af2d0e42d | 42 | double z =0.0l; |
nasiromar | 0:660af2d0e42d | 43 | |
nasiromar | 0:660af2d0e42d | 44 | int pos; |
nasiromar | 0:660af2d0e42d | 45 | int seedAssist; |
nasiromar | 0:660af2d0e42d | 46 | |
nasiromar | 0:660af2d0e42d | 47 | |
nasiromar | 0:660af2d0e42d | 48 | bool gameOver = false; //This is to check if the game is over or not in the while update loop |
nasiromar | 0:660af2d0e42d | 49 | |
nasiromar | 0:660af2d0e42d | 50 | int main() |
nasiromar | 0:660af2d0e42d | 51 | { |
nasiromar | 0:660af2d0e42d | 52 | setUpHardware(); |
nasiromar | 0:660af2d0e42d | 53 | setUpAccelerometer(); |
nasiromar | 0:660af2d0e42d | 54 | |
nasiromar | 0:660af2d0e42d | 55 | //Instaniating objects |
nasiromar | 0:660af2d0e42d | 56 | BobAlien BobObj1; |
nasiromar | 0:660af2d0e42d | 57 | BobAlien BobObj2; |
nasiromar | 0:660af2d0e42d | 58 | BobAlien BobObj3; |
nasiromar | 0:660af2d0e42d | 59 | AliceAlien AliceObj1; |
nasiromar | 0:660af2d0e42d | 60 | AliceAlien AliceObj2; |
nasiromar | 0:660af2d0e42d | 61 | AliceAlien AliceObj3; |
nasiromar | 0:660af2d0e42d | 62 | Ship shipObj; |
nasiromar | 0:660af2d0e42d | 63 | Bullet bulletObj; |
nasiromar | 0:660af2d0e42d | 64 | Rocket rocketObj; |
nasiromar | 0:660af2d0e42d | 65 | |
nasiromar | 0:660af2d0e42d | 66 | //Initializing derived pointers |
nasiromar | 0:660af2d0e42d | 67 | BobAlien * BobPtr1 = &BobObj1; |
nasiromar | 0:660af2d0e42d | 68 | BobAlien * BobPtr2 = &BobObj2; |
nasiromar | 0:660af2d0e42d | 69 | BobAlien * BobPtr3 = &BobObj3; |
nasiromar | 0:660af2d0e42d | 70 | AliceAlien * AlicePtr1 = &AliceObj1; |
nasiromar | 0:660af2d0e42d | 71 | AliceAlien * AlicePtr2 = &AliceObj2; |
nasiromar | 0:660af2d0e42d | 72 | AliceAlien * AlicePtr3 = &AliceObj3; |
nasiromar | 0:660af2d0e42d | 73 | Ship * shipPtr = &shipObj; |
nasiromar | 0:660af2d0e42d | 74 | Bullet * bulletPtr = &bulletObj; |
nasiromar | 0:660af2d0e42d | 75 | Rocket * rocketPtr = &rocketObj; |
nasiromar | 0:660af2d0e42d | 76 | |
nasiromar | 0:660af2d0e42d | 77 | //Base Pointers |
nasiromar | 0:660af2d0e42d | 78 | ScreenObjects * BobObjPtr1 = &BobObj1; |
nasiromar | 0:660af2d0e42d | 79 | ScreenObjects * BobObjPtr2 = &BobObj2; |
nasiromar | 0:660af2d0e42d | 80 | ScreenObjects * BobObjPtr3 = &BobObj3; |
nasiromar | 0:660af2d0e42d | 81 | ScreenObjects * AliceObjPtr1 = &AliceObj1; |
nasiromar | 0:660af2d0e42d | 82 | ScreenObjects * AliceObjPtr2 = &AliceObj2; |
nasiromar | 0:660af2d0e42d | 83 | ScreenObjects * AliceObjPtr3 = &AliceObj3; |
nasiromar | 0:660af2d0e42d | 84 | ScreenObjects * ShipObjPtr = &shipObj; |
nasiromar | 0:660af2d0e42d | 85 | ScreenObjects * BulletObjPtr = &bulletObj; |
nasiromar | 0:660af2d0e42d | 86 | ScreenObjects * RocketObjPtr = &rocketObj; |
nasiromar | 0:660af2d0e42d | 87 | |
nasiromar | 0:660af2d0e42d | 88 | |
nasiromar | 0:660af2d0e42d | 89 | vector<ScreenObjects *>ScreenObjectArray; |
nasiromar | 0:660af2d0e42d | 90 | |
nasiromar | 0:660af2d0e42d | 91 | //Pushing the values onto the vector |
nasiromar | 0:660af2d0e42d | 92 | ScreenObjectArray.push_back(BobObjPtr1);//0 |
nasiromar | 0:660af2d0e42d | 93 | ScreenObjectArray.push_back(BobObjPtr2);//1 |
nasiromar | 0:660af2d0e42d | 94 | ScreenObjectArray.push_back(BobObjPtr3);//2 |
nasiromar | 0:660af2d0e42d | 95 | ScreenObjectArray.push_back(AliceObjPtr1);//3 |
nasiromar | 0:660af2d0e42d | 96 | ScreenObjectArray.push_back(AliceObjPtr2);//4 |
nasiromar | 0:660af2d0e42d | 97 | ScreenObjectArray.push_back(AliceObjPtr3);//5 |
nasiromar | 0:660af2d0e42d | 98 | ScreenObjectArray.push_back(ShipObjPtr);//6 |
nasiromar | 0:660af2d0e42d | 99 | ScreenObjectArray.push_back(BulletObjPtr);//7 |
nasiromar | 0:660af2d0e42d | 100 | ScreenObjectArray.push_back(RocketObjPtr);//8 |
nasiromar | 0:660af2d0e42d | 101 | //Ship Starting Position |
nasiromar | 0:660af2d0e42d | 102 | ScreenObjectArray[6]->setPosition(64,100); |
nasiromar | 0:660af2d0e42d | 103 | |
nasiromar | 0:660af2d0e42d | 104 | // seedAssist = abs(static_cast<int> (10000*myTMP36.read()) % 80+1); |
nasiromar | 0:660af2d0e42d | 105 | //Enemy Starting Positions |
nasiromar | 0:660af2d0e42d | 106 | //enemy 1 |
nasiromar | 0:660af2d0e42d | 107 | ScreenObjectArray[0]->setPosition(10,10); |
nasiromar | 0:660af2d0e42d | 108 | ScreenObjectArray[0]->draw(ScreenObjectArray[0]->getPosition()[0],ScreenObjectArray[0]->getPosition()[1]); |
nasiromar | 0:660af2d0e42d | 109 | //uLCD.printf("%i",pos); |
nasiromar | 0:660af2d0e42d | 110 | //enemy2 |
nasiromar | 0:660af2d0e42d | 111 | ScreenObjectArray[1]->setPosition(40,20); |
nasiromar | 0:660af2d0e42d | 112 | ScreenObjectArray[1]->draw(ScreenObjectArray[1]->getPosition()[0],ScreenObjectArray[1]->getPosition()[1]); |
nasiromar | 0:660af2d0e42d | 113 | //enemy3 |
nasiromar | 0:660af2d0e42d | 114 | ScreenObjectArray[2]->setPosition(86,60); |
nasiromar | 0:660af2d0e42d | 115 | ScreenObjectArray[2]->draw(ScreenObjectArray[2]->getPosition()[0],ScreenObjectArray[2]->getPosition()[1]); |
nasiromar | 0:660af2d0e42d | 116 | //enemy4 |
nasiromar | 0:660af2d0e42d | 117 | ScreenObjectArray[3]->setPosition(69,74); |
nasiromar | 0:660af2d0e42d | 118 | ScreenObjectArray[3]->draw(ScreenObjectArray[3]->getPosition()[0],ScreenObjectArray[3]->getPosition()[1]); |
nasiromar | 0:660af2d0e42d | 119 | //enemy5 |
nasiromar | 0:660af2d0e42d | 120 | ScreenObjectArray[4]->setPosition(20,64); |
nasiromar | 0:660af2d0e42d | 121 | ScreenObjectArray[4]->draw(ScreenObjectArray[4]->getPosition()[0],ScreenObjectArray[4]->getPosition()[1]); |
nasiromar | 0:660af2d0e42d | 122 | //enemy6 |
nasiromar | 0:660af2d0e42d | 123 | ScreenObjectArray[5]->setPosition(50,17); |
nasiromar | 0:660af2d0e42d | 124 | ScreenObjectArray[5]->draw(ScreenObjectArray[5]->getPosition()[0],ScreenObjectArray[5]->getPosition()[1]); |
nasiromar | 0:660af2d0e42d | 125 | |
nasiromar | 0:660af2d0e42d | 126 | //bulletPtr->move(*shipPtr); |
nasiromar | 0:660af2d0e42d | 127 | |
nasiromar | 0:660af2d0e42d | 128 | while(1) { |
nasiromar | 0:660af2d0e42d | 129 | drawVector(ScreenObjectArray); |
nasiromar | 0:660af2d0e42d | 130 | updateVector(ScreenObjectArray); |
nasiromar | 0:660af2d0e42d | 131 | |
nasiromar | 0:660af2d0e42d | 132 | |
nasiromar | 0:660af2d0e42d | 133 | /*bulleT.draw(bulleT.getPosition()[0],bulleT.getPosition()[1]); |
nasiromar | 0:660af2d0e42d | 134 | uLCD.printf("%i x, %i y",bulleT.getShipPositio()[0],bulleT.getShipPosition()[1]); |
nasiromar | 0:660af2d0e42d | 135 | bulleT.update();*/ |
nasiromar | 0:660af2d0e42d | 136 | wait(.01); |
nasiromar | 0:660af2d0e42d | 137 | buttonA.attach_deasserted(&shoot); |
nasiromar | 0:660af2d0e42d | 138 | buttonA.setSampleFrequency(); |
nasiromar | 0:660af2d0e42d | 139 | if(!acc.isXYZReady()) { |
nasiromar | 0:660af2d0e42d | 140 | wait(.01); |
nasiromar | 0:660af2d0e42d | 141 | } else { |
nasiromar | 0:660af2d0e42d | 142 | acc.readXYZGravity(&x,&y,&z); |
nasiromar | 0:660af2d0e42d | 143 | //uLCD.printf("%g\n",y); |
nasiromar | 0:660af2d0e42d | 144 | shipPtr->setDirection(shipPtr->move(y)); |
nasiromar | 0:660af2d0e42d | 145 | |
nasiromar | 0:660af2d0e42d | 146 | |
nasiromar | 0:660af2d0e42d | 147 | } |
nasiromar | 0:660af2d0e42d | 148 | } |
nasiromar | 0:660af2d0e42d | 149 | } |
nasiromar | 0:660af2d0e42d | 150 | |
nasiromar | 0:660af2d0e42d | 151 | |
nasiromar | 0:660af2d0e42d | 152 | |
nasiromar | 0:660af2d0e42d | 153 | void setUpAccelerometer() |
nasiromar | 0:660af2d0e42d | 154 | { |
nasiromar | 0:660af2d0e42d | 155 | acc.setBitDepth(MMA8452::BIT_DEPTH_12); |
nasiromar | 0:660af2d0e42d | 156 | acc.setDynamicRange(MMA8452::DYNAMIC_RANGE_4G); |
nasiromar | 0:660af2d0e42d | 157 | acc.setDataRate(MMA8452::RATE_100); |
nasiromar | 0:660af2d0e42d | 158 | } |
nasiromar | 0:660af2d0e42d | 159 | |
nasiromar | 0:660af2d0e42d | 160 | void setUpHardware(){ |
nasiromar | 0:660af2d0e42d | 161 | //uLCD screen |
nasiromar | 0:660af2d0e42d | 162 | uLCD.baudrate(3000000); |
nasiromar | 0:660af2d0e42d | 163 | wait(0.3); |
nasiromar | 0:660af2d0e42d | 164 | //accelermoter |
nasiromar | 0:660af2d0e42d | 165 | acc.activate(); |
nasiromar | 0:660af2d0e42d | 166 | //buttons |
nasiromar | 0:660af2d0e42d | 167 | buttonA.mode(PullDown); |
nasiromar | 0:660af2d0e42d | 168 | buttonB.mode(PullDown); |
nasiromar | 0:660af2d0e42d | 169 | buttonC.mode(PullDown); |
nasiromar | 0:660af2d0e42d | 170 | } |
nasiromar | 0:660af2d0e42d | 171 |