Meteor defense project

Dependencies:   N5110 mbed

Committer:
jasper0712
Date:
Tue Apr 18 21:50:14 2017 +0000
Revision:
30:2e2d48cbfec3
Parent:
29:6632dd9c48d8
Child:
31:1c0e47931e84
disastrous bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jasper0712 1:f5cda0674f24 1 #include "Spawn.h"
jasper0712 0:5fbc0fbc9d30 2
jasper0712 1:f5cda0674f24 3 Spawn::Spawn()
jasper0712 1:f5cda0674f24 4 {
jasper0712 1:f5cda0674f24 5
jasper0712 1:f5cda0674f24 6 }
jasper0712 1:f5cda0674f24 7
jasper0712 1:f5cda0674f24 8 Spawn::~Spawn()
jasper0712 1:f5cda0674f24 9 {
jasper0712 1:f5cda0674f24 10
jasper0712 1:f5cda0674f24 11 }
jasper0712 30:2e2d48cbfec3 12
jasper0712 30:2e2d48cbfec3 13
jasper0712 30:2e2d48cbfec3 14 void Spawn::init(int w) {
jasper0712 30:2e2d48cbfec3 15 statsA(w);
jasper0712 30:2e2d48cbfec3 16 statsB(w);
jasper0712 30:2e2d48cbfec3 17 statsC(w);
jasper0712 30:2e2d48cbfec3 18 statsDE(w);
jasper0712 30:2e2d48cbfec3 19 //printf("waveNumber = %d \n",w);
jasper0712 30:2e2d48cbfec3 20 //printf("hA = %d, rA = %d, rB = %d, hC = %d, rC = %d, hDE = %d, rDE = %d \n"
jasper0712 30:2e2d48cbfec3 21 //,A.health, A.spawnRate, B.spawnRate, C.health, C.spawnRate, DE.health, DE.spawnRate);
jasper0712 30:2e2d48cbfec3 22 healthA = A.health;
jasper0712 30:2e2d48cbfec3 23 healthC = C.health;
jasper0712 30:2e2d48cbfec3 24 healthDE = DE.health;
jasper0712 30:2e2d48cbfec3 25 spawnRateA = A.spawnRate; //32
jasper0712 30:2e2d48cbfec3 26 spawnRateB = B.spawnRate; //1
jasper0712 30:2e2d48cbfec3 27 spawnRateC = C.spawnRate; //2
jasper0712 30:2e2d48cbfec3 28 spawnRateDE = DE.spawnRate; //1
jasper0712 18:d82059ce929b 29 }
jasper0712 30:2e2d48cbfec3 30 Stats Spawn::statsA(int w) {
jasper0712 30:2e2d48cbfec3 31 A.spawnRate = 32 + w;
jasper0712 30:2e2d48cbfec3 32 A.health = 10 + 4 * w;
jasper0712 30:2e2d48cbfec3 33 Stats A = {A.spawnRate, A.health};
jasper0712 30:2e2d48cbfec3 34 return A;
jasper0712 30:2e2d48cbfec3 35 }
jasper0712 30:2e2d48cbfec3 36 Stats Spawn::statsB(int w) {
jasper0712 30:2e2d48cbfec3 37 if ( w % 2 == 0) { //every 2 wave, increase spawn rate of B by 1.
jasper0712 30:2e2d48cbfec3 38 B.spawnRate = 1 + w;
jasper0712 30:2e2d48cbfec3 39 }
jasper0712 30:2e2d48cbfec3 40 B.health = 0;
jasper0712 30:2e2d48cbfec3 41 Stats B = {B.spawnRate, B.health};
jasper0712 30:2e2d48cbfec3 42 return B;
jasper0712 30:2e2d48cbfec3 43 }
jasper0712 30:2e2d48cbfec3 44 Stats Spawn::statsC(int w) {
jasper0712 30:2e2d48cbfec3 45 C.spawnRate = 3 + w;
jasper0712 30:2e2d48cbfec3 46 C.health = 150 + 2 * w;
jasper0712 30:2e2d48cbfec3 47 Stats C = {C.spawnRate, C.health};
jasper0712 30:2e2d48cbfec3 48 return C;
jasper0712 30:2e2d48cbfec3 49 }
jasper0712 30:2e2d48cbfec3 50 Stats Spawn::statsDE(int w) {
jasper0712 30:2e2d48cbfec3 51 if ( w % 2 == 0) { //every 2 wave, increase spawn rate of DE by 1.
jasper0712 30:2e2d48cbfec3 52 DE.spawnRate = 1 + DE.spawnRate;
jasper0712 30:2e2d48cbfec3 53 }
jasper0712 30:2e2d48cbfec3 54 DE.health = 15 + 2 * w ;
jasper0712 30:2e2d48cbfec3 55 Stats DE = {DE.spawnRate, DE.health};
jasper0712 30:2e2d48cbfec3 56 return DE;
jasper0712 30:2e2d48cbfec3 57 }
jasper0712 20:32f115462bbc 58 void Spawn::randomizeSpawn(int Arr[][Rows], char cArr[][Rows]) {
jasper0712 24:d6187d39f09b 59 //there is 4 kind of different spawn - a, b, c and d/e.
jasper0712 23:6d197a452d7c 60 if (stopSpawnA == 1) { //spawn for this row
jasper0712 25:edd6a95607b1 61 spawnA(Arr, cArr);
jasper0712 23:6d197a452d7c 62 stopSpawnA= 0;
jasper0712 19:7ccbb19703f9 63 } else { //stop spawn for the next row
jasper0712 23:6d197a452d7c 64 stopSpawnA = 1;
jasper0712 24:d6187d39f09b 65 spawnC(Arr, cArr);
jasper0712 13:38cbce17d7d7 66 }
jasper0712 1:f5cda0674f24 67 for ( int x = 0; x < Cols; x++) {
jasper0712 20:32f115462bbc 68 spawnB(x, Arr, cArr);
jasper0712 24:d6187d39f09b 69 spawnDE(x, Arr, cArr);
jasper0712 1:f5cda0674f24 70 }
jasper0712 7:3be4369131c6 71 //printf("at x=2, y=0. value = %d \n",Arr1[2][0]);
jasper0712 1:f5cda0674f24 72 }
jasper0712 20:32f115462bbc 73 void Spawn::spawnA(int Arr[][Rows],char cArr[][Rows]) {
jasper0712 19:7ccbb19703f9 74 for ( int x = 0; x < Cols; x++) {
jasper0712 19:7ccbb19703f9 75 //32/200 chance of spawning for A.
jasper0712 19:7ccbb19703f9 76 //can depends on level
jasper0712 19:7ccbb19703f9 77 bool TrueFalseA = (rand() % 200) < spawnRateA;
jasper0712 19:7ccbb19703f9 78 if (TrueFalseA) {
jasper0712 19:7ccbb19703f9 79 //spawning from the top of the screen
jasper0712 20:32f115462bbc 80 Arr[x][0] = healthA;
jasper0712 20:32f115462bbc 81 cArr[x][0] = 'a';
jasper0712 19:7ccbb19703f9 82 //printf("spawn set at x = is %d \n",x);
jasper0712 19:7ccbb19703f9 83 }
jasper0712 19:7ccbb19703f9 84 }
jasper0712 19:7ccbb19703f9 85 }
jasper0712 20:32f115462bbc 86 void Spawn::spawnB(int x, int Arr[][Rows],char cArr[][Rows]) {
jasper0712 19:7ccbb19703f9 87 bool TrueFalseB = (rand() % 200) < spawnRateB;
jasper0712 19:7ccbb19703f9 88 if (TrueFalseB) {
jasper0712 20:32f115462bbc 89 Arr[x][0] = 100000;
jasper0712 20:32f115462bbc 90 cArr[x][0] = 'b';
jasper0712 19:7ccbb19703f9 91 }
jasper0712 19:7ccbb19703f9 92 }
jasper0712 23:6d197a452d7c 93 void Spawn::spawnC(int Arr[][Rows],char cArr[][Rows]) {
jasper0712 23:6d197a452d7c 94 for ( int x = 0; x < Cols; x++) {
jasper0712 19:7ccbb19703f9 95 bool TrueFalseC = (rand() % 200) < spawnRateC;
jasper0712 23:6d197a452d7c 96 if (TrueFalseC) {
jasper0712 23:6d197a452d7c 97 Arr[x][1] = healthC;
jasper0712 23:6d197a452d7c 98 cArr[x][1] = 'c';
jasper0712 23:6d197a452d7c 99 cArr[x-1][0] = 'l';
jasper0712 23:6d197a452d7c 100 cArr[x+1][0] = 'r';
jasper0712 23:6d197a452d7c 101 }
jasper0712 19:7ccbb19703f9 102 }
jasper0712 19:7ccbb19703f9 103 }
jasper0712 24:d6187d39f09b 104 void Spawn::spawnDE(int x, int Arr[][Rows], char cArr[][Rows]) {
jasper0712 24:d6187d39f09b 105 bool TrueFalseD = (rand() % 201) < spawnRateDE;
jasper0712 23:6d197a452d7c 106 if (TrueFalseD) {
jasper0712 23:6d197a452d7c 107 bool LeftRightD = (rand() % 10) <5; //its a 50-50 chance
jasper0712 23:6d197a452d7c 108 if (LeftRightD) {
jasper0712 24:d6187d39f09b 109 Arr[x][0] = healthDE;
jasper0712 23:6d197a452d7c 110 cArr[x][0] = 'd'; //d denotes spawnD starts by moving left
jasper0712 23:6d197a452d7c 111 } else {
jasper0712 24:d6187d39f09b 112 Arr[x][0] = healthDE;
jasper0712 23:6d197a452d7c 113 cArr[x][0] = 'e'; //e denotes spawnD starts by moving right
jasper0712 23:6d197a452d7c 114 }
jasper0712 23:6d197a452d7c 115 }
jasper0712 22:2e75b50b26f0 116 }
jasper0712 20:32f115462bbc 117 void Spawn::moveSpawnABC(int Arr[][Rows], int Arr2[][Rows], char cArr[][Rows], char cArr2[][Rows]) {
jasper0712 2:2c60c92bf65b 118 //printf("x=2,y =0. value = %d \n",array[2][0]);
jasper0712 1:f5cda0674f24 119 //scan through the whole array
jasper0712 13:38cbce17d7d7 120 for (int x = 0; x < Cols; x++) {
jasper0712 13:38cbce17d7d7 121 for (int y = 0; y < Rows; y++) {
jasper0712 27:d4926f19c12a 122 if (cArr[x][y] == 'a' || cArr[x][y] == 'b' || cArr[x][y] == 'c' || cArr[x][y] == 'l' || cArr[x][y] == 'r' || cArr[x][y] == 'm') {
jasper0712 23:6d197a452d7c 123 Arr2[x][y+1] = Arr[x][y]; cArr2[x][y+1] = cArr[x][y]; //move everything down a row
jasper0712 2:2c60c92bf65b 124 } else {
jasper0712 23:6d197a452d7c 125 Arr2[x][y+1] = 0; cArr2[x][y+1] = '\0';
jasper0712 1:f5cda0674f24 126 }
jasper0712 1:f5cda0674f24 127 }
jasper0712 1:f5cda0674f24 128 }
jasper0712 6:a554424e4517 129 printf("at x=2, y=47. number is =%d \n",Arr2[2][47]);
jasper0712 1:f5cda0674f24 130 }
jasper0712 24:d6187d39f09b 131 void Spawn::moveSpawnDE(int Arr[][Rows], int Arr2[][Rows], char cArr[][Rows], char cArr2[][Rows]) { //spawnD moves in a zig zag behavior.
jasper0712 23:6d197a452d7c 132 for (int x = 0; x < Cols; x++) { // moves other direction when hit 'L' or 'R' of spawnC and walls.
jasper0712 23:6d197a452d7c 133 for (int y = 0; y < Rows; y++) { //jumps over spawnA and spawnB
jasper0712 24:d6187d39f09b 134 if (cArr[x][y] == 'd') { //d = move left & down
jasper0712 24:d6187d39f09b 135 movementD(x, y, Arr, Arr2, cArr, cArr2);
jasper0712 24:d6187d39f09b 136 } else if ( cArr[x][y] == 'e') { //e = move right & down
jasper0712 24:d6187d39f09b 137 movementE(x, y, Arr, Arr2, cArr, cArr2);
jasper0712 23:6d197a452d7c 138 }
jasper0712 23:6d197a452d7c 139 }
jasper0712 23:6d197a452d7c 140 }
jasper0712 23:6d197a452d7c 141 }
jasper0712 27:d4926f19c12a 142 void Spawn::movementD(int x, int y, int Arr[][Rows], int Arr2[][Rows], char cArr[][Rows], char cArr2[][Rows]) { //d = move left & down
jasper0712 27:d4926f19c12a 143 if (cArr[x-1][y+1] == 'a' || cArr[x-1][y] == 'b' ) { //if the path is blocked by spawnA or spawnB
jasper0712 24:d6187d39f09b 144 cArr2[x-2][y+2] = 'd'; Arr2[x-2][y+2] = Arr[x][y]; //jumps over it
jasper0712 24:d6187d39f09b 145 cArr2[x][y] = '\0'; Arr2[x][y] = 0;
jasper0712 24:d6187d39f09b 146 //printf("jump over at [%d][%d] \n",x-1,y+1);
jasper0712 27:d4926f19c12a 147 } else if (x == 0 || x == 83 || cArr[x-1][y+1] == 'l' || cArr[x-1][y+1] == 'r' || cArr[x-1][y+1] == 'm') { //if it hits the wall or 'l' or 'r' or 'm'.
jasper0712 24:d6187d39f09b 148 if (cArr[x-1][y+1] == 'l' || cArr[x-1][y+1] == 'r') {
jasper0712 25:edd6a95607b1 149 //printf("char = %c \n",cArr[x-1][y+1]);
jasper0712 24:d6187d39f09b 150 }
jasper0712 24:d6187d39f09b 151 cArr2[x+1][y+1] = 'e'; Arr2[x+1][y+1] = Arr[x][y]; //start moving right & down
jasper0712 24:d6187d39f09b 152 cArr2[x][y] = '\0'; Arr2[x][y] = 0;
jasper0712 24:d6187d39f09b 153 //printf("spawn d at x = %d is shifted to e \n",x);
jasper0712 24:d6187d39f09b 154 } else { //if nothing is blocking the path
jasper0712 24:d6187d39f09b 155 cArr2[x-1][y+1] = cArr[x][y]; Arr2[x-1][y+1] = Arr[x][y]; //move as usual.
jasper0712 24:d6187d39f09b 156 cArr2[x][y] = '\0'; Arr2[x][y] = 0;
jasper0712 24:d6187d39f09b 157 //printf("work pls. \n");
jasper0712 24:d6187d39f09b 158 }
jasper0712 24:d6187d39f09b 159 }
jasper0712 27:d4926f19c12a 160 void Spawn::movementE(int x, int y, int Arr[][Rows], int Arr2[][Rows], char cArr[][Rows], char cArr2[][Rows]) { //e = move right & down
jasper0712 27:d4926f19c12a 161 if (cArr[x+1][y+1] == 'a' || cArr[x+1][y] == 'b' ) { //if the path is blocked by spawnA or spawnB
jasper0712 24:d6187d39f09b 162 cArr2[x+2][y+2] = 'e'; Arr2[x+2][y+2] = Arr[x][y]; //jumps over it
jasper0712 24:d6187d39f09b 163 cArr2[x][y] = '\0'; Arr2[x][y] = 0;
jasper0712 24:d6187d39f09b 164 //printf("jump over at [%d][%d] \n",x+1,y+1);
jasper0712 27:d4926f19c12a 165 } else if (x == 0 || x == 83 || cArr[x+1][y+1] == 'l' || cArr[x+1][y+1] == 'r' || cArr[x+1][y+1] == 'm') { //if it hits the wall or 'l' or 'r' or 'm'.
jasper0712 24:d6187d39f09b 166 cArr2[x-1][y+1] = 'd'; Arr2[x-1][y+1] = Arr[x][y]; //start moving left & down
jasper0712 24:d6187d39f09b 167 cArr2[x][y] = '\0'; Arr2[x][y] = 0;
jasper0712 24:d6187d39f09b 168 //printf("spawn d at x = %d is shifted to e \n",x);
jasper0712 24:d6187d39f09b 169 } else { //if nothing is blocking the path
jasper0712 24:d6187d39f09b 170 cArr2[x+1][y+1] = cArr[x][y]; Arr2[x+1][y+1] = Arr[x][y]; //move as usual.
jasper0712 24:d6187d39f09b 171 cArr2[x][y] = '\0'; Arr2[x][y] = 0;
jasper0712 24:d6187d39f09b 172 //printf("work pls. \n");
jasper0712 24:d6187d39f09b 173 }
jasper0712 24:d6187d39f09b 174 }
jasper0712 20:32f115462bbc 175 void Spawn::moveSpawnB(int Arr[][Rows], int Arr2[][Rows], char cArr[][Rows], char cArr2[][Rows]){
jasper0712 13:38cbce17d7d7 176 //printf("moving spawn B \n");
jasper0712 13:38cbce17d7d7 177 for (int x = 0; x < Cols; x++) {
jasper0712 13:38cbce17d7d7 178 for (int y = 0; y < Rows; y++) {
jasper0712 25:edd6a95607b1 179 //deleteChar(x, y, Arr2, cArr2);
jasper0712 20:32f115462bbc 180 if (cArr[x][y] == 'b') {
jasper0712 20:32f115462bbc 181 Arr2[x][y+1] = Arr[x][y];
jasper0712 20:32f115462bbc 182 cArr2[x][y+1] = 'b';
jasper0712 20:32f115462bbc 183 cArr2[x][y] = '\0';
jasper0712 20:32f115462bbc 184 Arr2[x][y] = 0;
jasper0712 13:38cbce17d7d7 185 }
jasper0712 13:38cbce17d7d7 186 }
jasper0712 13:38cbce17d7d7 187 }
jasper0712 13:38cbce17d7d7 188 }
jasper0712 20:32f115462bbc 189 void Spawn::updateSpawn(int Arr[][Rows], int Arr2[][Rows], char cArr[][Rows], char cArr2[][Rows], N5110 &lcd) {
jasper0712 24:d6187d39f09b 190 for ( int y = 0; y < Rows; y++) {
jasper0712 24:d6187d39f09b 191 for ( int x = 0; x < Cols; x++) {
jasper0712 21:e5585569a938 192 deleteChar(x, y, Arr2, cArr2); //cleaning up the array
jasper0712 27:d4926f19c12a 193 if (cArr2[x][y] == 'a' || cArr2[x][y] == 'd' || cArr2[x][y] == 'e') {
jasper0712 1:f5cda0674f24 194 lcd.setPixel(x,y);
jasper0712 23:6d197a452d7c 195 Arr[x][y] = Arr2[x][y]; //to update the main array
jasper0712 23:6d197a452d7c 196 cArr[x][y] = cArr2[x][y];
jasper0712 20:32f115462bbc 197 } else if (cArr2[x][y] == 'b') {
jasper0712 27:d4926f19c12a 198 lcd.setPixel(x,y); lcd.setPixel(x,y-1);
jasper0712 23:6d197a452d7c 199 Arr[x][y] = Arr2[x][y]; //to update the main array
jasper0712 20:32f115462bbc 200 cArr[x][y] = 'b';
jasper0712 27:d4926f19c12a 201 } else if (cArr2[x][y] == 'c') {// l and r (left and right) side of the spawn C for bigger hit box & to deflect spawnDE.
jasper0712 24:d6187d39f09b 202 if (cArr2[x-1][y-1] == '\0'){ //this code to prevent b, d and e from getting replaced
jasper0712 24:d6187d39f09b 203 cArr[x-1][y-1] = 'l'; cArr2[x-1][y-1] = 'l';
jasper0712 24:d6187d39f09b 204 }
jasper0712 24:d6187d39f09b 205 if (cArr2[x+1][y-1] == '\0'){ //this code to prevent b, d and e from getting replaced
jasper0712 24:d6187d39f09b 206 cArr[x+1][y-1] = 'r'; cArr2[x+1][y-1] = 'r';
jasper0712 24:d6187d39f09b 207 }
jasper0712 27:d4926f19c12a 208 cArr[x][y-1] = 'm'; //to deflect spawnDE.
jasper0712 24:d6187d39f09b 209 cArr[x][y] = cArr2[x][y]; Arr[x][y] = Arr2[x][y]; //to update the main array
jasper0712 24:d6187d39f09b 210 lcd.setPixel(x,y); lcd.setPixel(x,y-1);
jasper0712 24:d6187d39f09b 211 lcd.setPixel(x+1,y-1); lcd.setPixel(x-1,y-1);
jasper0712 24:d6187d39f09b 212 } else {
jasper0712 20:32f115462bbc 213 Arr[x][y] = 0;
jasper0712 20:32f115462bbc 214 cArr[x][y] = '\0';
jasper0712 1:f5cda0674f24 215 }
jasper0712 1:f5cda0674f24 216 }
jasper0712 1:f5cda0674f24 217 }
jasper0712 1:f5cda0674f24 218 }
jasper0712 21:e5585569a938 219 void Spawn::deleteChar(int x, int y, int Arr2[][Rows], char cArr2[][Rows]) { // to clean up the array after killing the spawn.
jasper0712 26:140515d80457 220 if (Arr2[x][y] <= 0) {
jasper0712 20:32f115462bbc 221 cArr2[x][y] = '\0';
jasper0712 24:d6187d39f09b 222 //printf("char at Arr2[%d][%d] cleared for good. \n",x,y);
jasper0712 26:140515d80457 223 }
jasper0712 13:38cbce17d7d7 224 }