JianWei Lee
/
project_game
Meteor defense project
Spawn/Spawn.cpp@30:2e2d48cbfec3, 2017-04-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |