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

Committer:
nasiromar
Date:
Wed Apr 27 05:31:20 2022 +0000
Revision:
0:660af2d0e42d
Lame Game Lab 6

Who changed what in which revision?

UserRevisionLine numberNew 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