Meteor defense project

Dependencies:   N5110 mbed

Committer:
jasper0712
Date:
Wed Apr 19 21:42:46 2017 +0000
Revision:
31:1c0e47931e84
Parent:
30:2e2d48cbfec3
Child:
32:580d74825810
solved the problem with drone. trying to start over at linking spawn to waveNumber. it went wrong last time

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