
AsteroidDefender
Dependencies: 4DGL-uLCD-SE DebounceIn mbed
main.cpp
- Committer:
- rquinn7
- Date:
- 2015-10-20
- Revision:
- 0:bbc2ad180020
- Child:
- 1:34bb7c386b9f
File content as of revision 0:bbc2ad180020:
#include "mbed.h" #include "game.h" #include "uLCD_4DGL.h" #include <list> #include <stdlib.h> uLCD_4DGL lcd(p28,p27,p29); DigitalOut myled(LED1); Serial pc(USBTX, USBRX); AnalogIn sliderh(p17); AnalogIn sliderv(p19); DigitalIn pb1(p21); bool down = false; bool lost = false; int lives = 2; std::list<Missile> missiles; std::list<Projectile> projectiles; Shooter shooter; int counter = 0; int speed = 128; void render_missiles() { for(std::list<Missile>::iterator j = missiles.begin(); j != missiles.end(); j++){ if(j->moved) { lcd.filled_rectangle(j->old_coord.x, j->old_coord.y, j->old_coord.x + j->size.x, j->old_coord.y + j->size.y, 0x000000); } lcd.filled_rectangle(j->coord.x, j->coord.y, j->coord.x + j->size.x, j->coord.y + j->size.y, 0xFF0000); if(j->coord.y >= 128) { j = missiles.erase(j); lives--; if(lives == 0) lost = true; } else { j->move(); } } } void check_collisions() { for(std::list<Projectile>::iterator j = projectiles.begin(); j != projectiles.end(); j++){ for(std::list<Missile>::iterator k = missiles.begin(); k != missiles.end(); k++){ // if(k->coord.y < (j->coord.y - 6)) // continue if( (j->old_coord.x >= k->old_coord.x && j->old_coord.x <= (k->old_coord.x + k->size.x)) || ((j->coord.x + j->size.x) >= k->old_coord.x && (j->old_coord.x + j->size.x) <= (k->old_coord.x + k->size.x)) ){ //Now we look at the y axis: if( (j->old_coord.y >= k->old_coord.y && j->old_coord.y <= (k->old_coord.y + k->size.y)) || ((j->old_coord.y + j->size.y) >= k->old_coord.y && (j->old_coord.y + j->size.y) <= (k->old_coord.y + k->size.y)) ){ //The sprites appear to overlap. lcd.filled_rectangle(j->old_coord.x, j->old_coord.y, j->old_coord.x + j->size.x, j->old_coord.y + j->size.y, 0x000000); lcd.filled_rectangle(k->old_coord.x, k->old_coord.y, k->old_coord.x + k->size.x, k->old_coord.y + k->size.y, 0x000000); k = missiles.erase(k); j = projectiles.erase(j); } } } } } void render_shooter() { if(shooter.moved) { lcd.filled_rectangle(shooter.old_coord.x, shooter.old_coord.y, shooter.old_coord.x + shooter.size.x, shooter.old_coord.y + shooter.size.y, 0x000000); shooter.moved = false; } lcd.filled_rectangle(shooter.coord.x, shooter.coord.y, shooter.coord.x + shooter.size.x, shooter.coord.y + shooter.size.y, 0xFF0000); } void render_projectiles() { for(std::list<Projectile>::iterator j = projectiles.begin(); j != projectiles.end(); j++){ if(j->moved) { lcd.filled_rectangle(j->old_coord.x, j->old_coord.y, j->old_coord.x + j->size.x, j->old_coord.y + j->size.y, 0x000000); } lcd.filled_rectangle(j->coord.x, j->coord.y, j->coord.x + j->size.x, j->coord.y + j->size.y, 0xFF0000); if(j->coord.y < -4) { j = projectiles.erase(j); } else { j->move(); } } } void check_button() { if(pb1 == 0 && !down) { down = true; if(projectiles.size() >= 3) { } else{ Projectile bullet1(shooter.coord); projectiles.push_back(bullet1); } } if(pb1 == 1) { down = false; } } void render() { if(counter >= 4) { render_missiles(); counter = 0; } render_shooter(); check_button(); render_projectiles(); check_collisions(); counter++; } void shooter_move() { if(sliderh < 0.4) { shooter.old_coord = shooter.coord; if(shooter.coord.x - 4 > 0) { shooter.coord.x -= 4; shooter.moved = true; } } else if(sliderh > 0.6) { shooter.old_coord = shooter.coord; if(shooter.coord.x + 4 < 128) { shooter.coord.x += 4; shooter.moved = true; } } // if(sliderv < 0.4) { // shooter.coord.x -= 0.2; // } // if(sliderv > 0.6) { // shooter.coord.x += 0.2; // } } void create_rocks(int number, int speed) { for(int i = 0; i<number; i++) { vec2 spawn, dest; spawn.x = rand() % 124 + 0; spawn.y = 0; dest.x = rand() % 124 + 0; dest.y = 129; int steps = speed; Missile missile(spawn, dest, steps); missiles.push_back(missile); } } int main() { pb1.mode(PullUp); pc.baud(9600); lcd.baudrate(3000000); lcd.cls(); int counter2 = 0; int rock_number = 5; //lcd.printf("hello"); //lcd.filled_rectangle(0, 0, 128, 64.5, 0xFF0000); while(1) { if(lost) { lcd.filled_rectangle(0, 0, 128, 128, 0xFF0000); break; } // vec2 spawn, dest; // spawn.x = rand() % 124 + 0; // spawn.y = 0; // dest.x = rand() % 124 + 0; // dest.y = 129; // int steps = 128; // Missile yolo(spawn, dest, steps); // missiles.push_back(yolo); // spawn.x = rand() % 124 + 0; // spawn.y = 0; // dest.x = 0; // dest.y = 129; // Missile yolo2(spawn, dest, steps); // missiles.push_back(yolo2); //CHANGE TO INCREASE OVER TIME create_rocks(rock_number, speed); //render(); // wait(.5); //lcd.cls(); //yolo.move(); for (int x = 0; x<128000000; x++) { render(); shooter_move(); if(missiles.size() == 0) { speed -= 15; if(counter % 2 == 1) { rock_number += 1; } counter2 += 1; break; } wait(.041); } //lcd.cls(); //yolo.move(); // render(); wait(2.5); } }