LAME

Dependencies:   mbed 4DGL-uLCD-SE SDFileSystem PinDetect

main.cpp

Committer:
kmillion3
Date:
2022-05-01
Revision:
5:05f7a84d0078
Parent:
4:9a4d22a279b3

File content as of revision 5:05f7a84d0078:

#include "mbed.h"
#include "TMP36.h"
#include "SDFileSystem.h"
#include "uLCD_4DGL.h"
#include "PinDetect.h"
#include "Speaker.h"
#include "Alien.h"
#include <vector>

//Initialize button for shooting
PinDetect pb1(p21);

//Create speaker object
Speaker mySpeaker(p21);

using namespace std;

//Variables
bool addBullet = false;
int bul = 0;
int numAliens = 5;

//Interupt function for the shooting button
void pb1_hit_callback (void)
{
    addBullet = true;
}

int main()
{
    //Sets up speaker object
    Speaker mySpeaker(p25);
    //Sets start time of the game
    time_t startTime = time(0);

    //Set up interrupts
    pb1.mode(PullUp);
    // Delay for initial pullup to take effect
    wait(0.3);
    // Setup Interrupt callback functions for a pb hit
    pb1.attach_deasserted(&pb1_hit_callback);
    // Start sampling pb inputs using interrupts
    wait(0.3);
    pb1.setSampleFrequency();
    // pushbuttons now setup and running

    srand(time(0));
    
    vector<ScreenObject *> pieces(7); //Create an STL vector of pointers
    
    //Initialize aliens randomly from each type in random positions
    for (int i = 0; i <= 5; i++) {
        int posX = (20 + rand() % 80);
        int posY = 12*i+10;
        //(new AlienAlice(posX, posY))->draw();
        int type = (rand() % 4 );
        if(type == 0)
            pieces[i] = (new AlienAlice(posX, posY));
        else if(type == 1)
            pieces[i] = (new AlienBob(posX, posY));
        else if(type == 2)
            pieces[i] = (new AlienOne(posX, posY));
        else if(type == 3)
            pieces[i] = (new AlienTwo(posX, posY));
        //pieces[i]->draw();
    }
    
    //Initialize the ship
    pieces[6] = (new Ship(50));
    pieces[6]->draw();
    
    //Initialize the LCD
    pieces[0]->initialize();
    
    bool won = false;
    int inc = 0;
    
    //Loop while playing
    while(won == false) {
        
        //Update the alien positions
        for (int i = 0; i <= numAliens; i++) {
            pieces[i]->clear();
            pieces[i]->update(4);
        }
        
        //Update the ship's position
        pieces[numAliens+1]->clear();
        pieces[numAliens+1]->update(0);
        
        //If a bullet has been trigger and is allowed initialize it
        if(addBullet == 1) {
            bul = 1;
            //addBullet = true;
            if(inc == 1)
                pieces[numAliens + 2]->clear();
            inc = 1;
            pieces[numAliens + 2] = (new Bullet(pieces[numAliens + 1]->getPosX(), 119));
            //pieces[7]->clear();
            //pieces[6]->draw();
            addBullet = 0;
        }
        
        //Check if bullet is in same space as an alien and remove both if that is the case
        if(bul == 1) {
            pieces[numAliens + 2]->clear();
            pieces[numAliens + 2]->update(0);
            for (int i = 0; i < (pieces.size() - 1); i++) {
                if((((pieces[numAliens + 2]->getPosX()+15) > pieces[i]->getPosX() && (pieces[numAliens + 2]->getPosX()+10) < (pieces[i]->getPosX() + 12)) && ((pieces[numAliens + 2]->getPosY()-8) < (pieces[i]->getPosY()+12) && (pieces[numAliens + 2]->getPosY()) > (pieces[i]->getPosY())))) {
                    pieces[numAliens + 2]->clear();
                    pieces[i]->clear();
                    pieces.erase(pieces.begin() + i);
                    numAliens -= 1;
                    bul = 0;
                    mySpeaker.PlayNote(300.0,0.1,0.025);
                }
            }
            
            //End game if all the aliens are gone
            if(numAliens == -1) {
                time_t endTime = time(0)-startTime;
                pieces[numAliens + 1]->end(endTime);
                won = true;
                for(int j = 0; j < 3; j++) {
                    mySpeaker.PlayNote(300.0,0.1,0.025);
                    mySpeaker.PlayNote(400.0,0.1,0.025);
                }
            }
        }
    }
    
    //Loop eternally after winning
    while(1) {
    }
}