AsteroidDefender

Dependencies:   4DGL-uLCD-SE DebounceIn mbed

Committer:
rquinn7
Date:
Tue Oct 20 02:49:21 2015 +0000
Revision:
0:bbc2ad180020
Child:
1:34bb7c386b9f
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rquinn7 0:bbc2ad180020 1 #include "mbed.h"
rquinn7 0:bbc2ad180020 2 #include "game.h"
rquinn7 0:bbc2ad180020 3 #include "uLCD_4DGL.h"
rquinn7 0:bbc2ad180020 4 #include <list>
rquinn7 0:bbc2ad180020 5 #include <stdlib.h>
rquinn7 0:bbc2ad180020 6
rquinn7 0:bbc2ad180020 7 uLCD_4DGL lcd(p28,p27,p29);
rquinn7 0:bbc2ad180020 8
rquinn7 0:bbc2ad180020 9 DigitalOut myled(LED1);
rquinn7 0:bbc2ad180020 10 Serial pc(USBTX, USBRX);
rquinn7 0:bbc2ad180020 11 AnalogIn sliderh(p17);
rquinn7 0:bbc2ad180020 12 AnalogIn sliderv(p19);
rquinn7 0:bbc2ad180020 13 DigitalIn pb1(p21);
rquinn7 0:bbc2ad180020 14 bool down = false;
rquinn7 0:bbc2ad180020 15 bool lost = false;
rquinn7 0:bbc2ad180020 16 int lives = 2;
rquinn7 0:bbc2ad180020 17 std::list<Missile> missiles;
rquinn7 0:bbc2ad180020 18 std::list<Projectile> projectiles;
rquinn7 0:bbc2ad180020 19 Shooter shooter;
rquinn7 0:bbc2ad180020 20 int counter = 0;
rquinn7 0:bbc2ad180020 21
rquinn7 0:bbc2ad180020 22 int speed = 128;
rquinn7 0:bbc2ad180020 23
rquinn7 0:bbc2ad180020 24 void render_missiles() {
rquinn7 0:bbc2ad180020 25 for(std::list<Missile>::iterator j = missiles.begin(); j != missiles.end(); j++){
rquinn7 0:bbc2ad180020 26 if(j->moved) {
rquinn7 0:bbc2ad180020 27 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);
rquinn7 0:bbc2ad180020 28 }
rquinn7 0:bbc2ad180020 29 lcd.filled_rectangle(j->coord.x, j->coord.y, j->coord.x + j->size.x, j->coord.y + j->size.y, 0xFF0000);
rquinn7 0:bbc2ad180020 30 if(j->coord.y >= 128) {
rquinn7 0:bbc2ad180020 31 j = missiles.erase(j);
rquinn7 0:bbc2ad180020 32 lives--;
rquinn7 0:bbc2ad180020 33 if(lives == 0)
rquinn7 0:bbc2ad180020 34 lost = true;
rquinn7 0:bbc2ad180020 35 }
rquinn7 0:bbc2ad180020 36 else {
rquinn7 0:bbc2ad180020 37 j->move();
rquinn7 0:bbc2ad180020 38 }
rquinn7 0:bbc2ad180020 39 }
rquinn7 0:bbc2ad180020 40 }
rquinn7 0:bbc2ad180020 41
rquinn7 0:bbc2ad180020 42 void check_collisions() {
rquinn7 0:bbc2ad180020 43 for(std::list<Projectile>::iterator j = projectiles.begin(); j != projectiles.end(); j++){
rquinn7 0:bbc2ad180020 44 for(std::list<Missile>::iterator k = missiles.begin(); k != missiles.end(); k++){
rquinn7 0:bbc2ad180020 45 // if(k->coord.y < (j->coord.y - 6))
rquinn7 0:bbc2ad180020 46 // continue
rquinn7 0:bbc2ad180020 47 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)) ){
rquinn7 0:bbc2ad180020 48 //Now we look at the y axis:
rquinn7 0:bbc2ad180020 49 if( (j->old_coord.y >= k->old_coord.y && j->old_coord.y <= (k->old_coord.y + k->size.y)) ||
rquinn7 0:bbc2ad180020 50 ((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)) ){
rquinn7 0:bbc2ad180020 51 //The sprites appear to overlap.
rquinn7 0:bbc2ad180020 52 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);
rquinn7 0:bbc2ad180020 53 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);
rquinn7 0:bbc2ad180020 54 k = missiles.erase(k);
rquinn7 0:bbc2ad180020 55 j = projectiles.erase(j);
rquinn7 0:bbc2ad180020 56 }
rquinn7 0:bbc2ad180020 57 }
rquinn7 0:bbc2ad180020 58 }
rquinn7 0:bbc2ad180020 59 }
rquinn7 0:bbc2ad180020 60 }
rquinn7 0:bbc2ad180020 61
rquinn7 0:bbc2ad180020 62 void render_shooter() {
rquinn7 0:bbc2ad180020 63 if(shooter.moved) {
rquinn7 0:bbc2ad180020 64 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);
rquinn7 0:bbc2ad180020 65 shooter.moved = false;
rquinn7 0:bbc2ad180020 66 }
rquinn7 0:bbc2ad180020 67 lcd.filled_rectangle(shooter.coord.x, shooter.coord.y, shooter.coord.x + shooter.size.x, shooter.coord.y + shooter.size.y, 0xFF0000);
rquinn7 0:bbc2ad180020 68 }
rquinn7 0:bbc2ad180020 69
rquinn7 0:bbc2ad180020 70 void render_projectiles() {
rquinn7 0:bbc2ad180020 71 for(std::list<Projectile>::iterator j = projectiles.begin(); j != projectiles.end(); j++){
rquinn7 0:bbc2ad180020 72 if(j->moved) {
rquinn7 0:bbc2ad180020 73 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);
rquinn7 0:bbc2ad180020 74 }
rquinn7 0:bbc2ad180020 75 lcd.filled_rectangle(j->coord.x, j->coord.y, j->coord.x + j->size.x, j->coord.y + j->size.y, 0xFF0000);
rquinn7 0:bbc2ad180020 76 if(j->coord.y < -4) {
rquinn7 0:bbc2ad180020 77 j = projectiles.erase(j);
rquinn7 0:bbc2ad180020 78 }
rquinn7 0:bbc2ad180020 79 else {
rquinn7 0:bbc2ad180020 80 j->move();
rquinn7 0:bbc2ad180020 81 }
rquinn7 0:bbc2ad180020 82 }
rquinn7 0:bbc2ad180020 83 }
rquinn7 0:bbc2ad180020 84
rquinn7 0:bbc2ad180020 85 void check_button() {
rquinn7 0:bbc2ad180020 86 if(pb1 == 0 && !down) {
rquinn7 0:bbc2ad180020 87 down = true;
rquinn7 0:bbc2ad180020 88 if(projectiles.size() >= 3) {
rquinn7 0:bbc2ad180020 89 }
rquinn7 0:bbc2ad180020 90 else{
rquinn7 0:bbc2ad180020 91 Projectile bullet1(shooter.coord);
rquinn7 0:bbc2ad180020 92 projectiles.push_back(bullet1);
rquinn7 0:bbc2ad180020 93 }
rquinn7 0:bbc2ad180020 94 }
rquinn7 0:bbc2ad180020 95
rquinn7 0:bbc2ad180020 96 if(pb1 == 1) {
rquinn7 0:bbc2ad180020 97 down = false;
rquinn7 0:bbc2ad180020 98 }
rquinn7 0:bbc2ad180020 99 }
rquinn7 0:bbc2ad180020 100 void render() {
rquinn7 0:bbc2ad180020 101 if(counter >= 4) {
rquinn7 0:bbc2ad180020 102 render_missiles();
rquinn7 0:bbc2ad180020 103 counter = 0;
rquinn7 0:bbc2ad180020 104 }
rquinn7 0:bbc2ad180020 105 render_shooter();
rquinn7 0:bbc2ad180020 106 check_button();
rquinn7 0:bbc2ad180020 107 render_projectiles();
rquinn7 0:bbc2ad180020 108 check_collisions();
rquinn7 0:bbc2ad180020 109 counter++;
rquinn7 0:bbc2ad180020 110 }
rquinn7 0:bbc2ad180020 111
rquinn7 0:bbc2ad180020 112 void shooter_move() {
rquinn7 0:bbc2ad180020 113 if(sliderh < 0.4) {
rquinn7 0:bbc2ad180020 114 shooter.old_coord = shooter.coord;
rquinn7 0:bbc2ad180020 115 if(shooter.coord.x - 4 > 0) {
rquinn7 0:bbc2ad180020 116 shooter.coord.x -= 4;
rquinn7 0:bbc2ad180020 117 shooter.moved = true;
rquinn7 0:bbc2ad180020 118 }
rquinn7 0:bbc2ad180020 119 }
rquinn7 0:bbc2ad180020 120 else if(sliderh > 0.6) {
rquinn7 0:bbc2ad180020 121 shooter.old_coord = shooter.coord;
rquinn7 0:bbc2ad180020 122 if(shooter.coord.x + 4 < 128) {
rquinn7 0:bbc2ad180020 123 shooter.coord.x += 4;
rquinn7 0:bbc2ad180020 124 shooter.moved = true;
rquinn7 0:bbc2ad180020 125 }
rquinn7 0:bbc2ad180020 126 }
rquinn7 0:bbc2ad180020 127 // if(sliderv < 0.4) {
rquinn7 0:bbc2ad180020 128 // shooter.coord.x -= 0.2;
rquinn7 0:bbc2ad180020 129 // }
rquinn7 0:bbc2ad180020 130 // if(sliderv > 0.6) {
rquinn7 0:bbc2ad180020 131 // shooter.coord.x += 0.2;
rquinn7 0:bbc2ad180020 132 // }
rquinn7 0:bbc2ad180020 133 }
rquinn7 0:bbc2ad180020 134
rquinn7 0:bbc2ad180020 135 void create_rocks(int number, int speed) {
rquinn7 0:bbc2ad180020 136 for(int i = 0; i<number; i++) {
rquinn7 0:bbc2ad180020 137 vec2 spawn, dest;
rquinn7 0:bbc2ad180020 138 spawn.x = rand() % 124 + 0;
rquinn7 0:bbc2ad180020 139 spawn.y = 0;
rquinn7 0:bbc2ad180020 140 dest.x = rand() % 124 + 0;
rquinn7 0:bbc2ad180020 141 dest.y = 129;
rquinn7 0:bbc2ad180020 142 int steps = speed;
rquinn7 0:bbc2ad180020 143 Missile missile(spawn, dest, steps);
rquinn7 0:bbc2ad180020 144 missiles.push_back(missile);
rquinn7 0:bbc2ad180020 145 }
rquinn7 0:bbc2ad180020 146 }
rquinn7 0:bbc2ad180020 147 int main() {
rquinn7 0:bbc2ad180020 148 pb1.mode(PullUp);
rquinn7 0:bbc2ad180020 149 pc.baud(9600);
rquinn7 0:bbc2ad180020 150 lcd.baudrate(3000000);
rquinn7 0:bbc2ad180020 151 lcd.cls();
rquinn7 0:bbc2ad180020 152 int counter2 = 0;
rquinn7 0:bbc2ad180020 153 int rock_number = 5;
rquinn7 0:bbc2ad180020 154 //lcd.printf("hello");
rquinn7 0:bbc2ad180020 155 //lcd.filled_rectangle(0, 0, 128, 64.5, 0xFF0000);
rquinn7 0:bbc2ad180020 156 while(1) {
rquinn7 0:bbc2ad180020 157
rquinn7 0:bbc2ad180020 158 if(lost) {
rquinn7 0:bbc2ad180020 159 lcd.filled_rectangle(0, 0, 128, 128, 0xFF0000);
rquinn7 0:bbc2ad180020 160 break;
rquinn7 0:bbc2ad180020 161 }
rquinn7 0:bbc2ad180020 162
rquinn7 0:bbc2ad180020 163 // vec2 spawn, dest;
rquinn7 0:bbc2ad180020 164 // spawn.x = rand() % 124 + 0;
rquinn7 0:bbc2ad180020 165 // spawn.y = 0;
rquinn7 0:bbc2ad180020 166 // dest.x = rand() % 124 + 0;
rquinn7 0:bbc2ad180020 167 // dest.y = 129;
rquinn7 0:bbc2ad180020 168 // int steps = 128;
rquinn7 0:bbc2ad180020 169 // Missile yolo(spawn, dest, steps);
rquinn7 0:bbc2ad180020 170 // missiles.push_back(yolo);
rquinn7 0:bbc2ad180020 171 // spawn.x = rand() % 124 + 0;
rquinn7 0:bbc2ad180020 172 // spawn.y = 0;
rquinn7 0:bbc2ad180020 173 // dest.x = 0;
rquinn7 0:bbc2ad180020 174 // dest.y = 129;
rquinn7 0:bbc2ad180020 175 // Missile yolo2(spawn, dest, steps);
rquinn7 0:bbc2ad180020 176 // missiles.push_back(yolo2);
rquinn7 0:bbc2ad180020 177
rquinn7 0:bbc2ad180020 178 //CHANGE TO INCREASE OVER TIME
rquinn7 0:bbc2ad180020 179 create_rocks(rock_number, speed);
rquinn7 0:bbc2ad180020 180 //render();
rquinn7 0:bbc2ad180020 181 // wait(.5);
rquinn7 0:bbc2ad180020 182 //lcd.cls();
rquinn7 0:bbc2ad180020 183 //yolo.move();
rquinn7 0:bbc2ad180020 184 for (int x = 0; x<128000000; x++) {
rquinn7 0:bbc2ad180020 185 render();
rquinn7 0:bbc2ad180020 186 shooter_move();
rquinn7 0:bbc2ad180020 187 if(missiles.size() == 0) {
rquinn7 0:bbc2ad180020 188 speed -= 15;
rquinn7 0:bbc2ad180020 189 if(counter % 2 == 1) {
rquinn7 0:bbc2ad180020 190 rock_number += 1;
rquinn7 0:bbc2ad180020 191 }
rquinn7 0:bbc2ad180020 192 counter2 += 1;
rquinn7 0:bbc2ad180020 193 break;
rquinn7 0:bbc2ad180020 194 }
rquinn7 0:bbc2ad180020 195 wait(.041);
rquinn7 0:bbc2ad180020 196 }
rquinn7 0:bbc2ad180020 197 //lcd.cls();
rquinn7 0:bbc2ad180020 198 //yolo.move();
rquinn7 0:bbc2ad180020 199 // render();
rquinn7 0:bbc2ad180020 200 wait(2.5);
rquinn7 0:bbc2ad180020 201 }
rquinn7 0:bbc2ad180020 202 }