JianWei Lee
/
project_game
Meteor defense project
Spawn/Spawn.cpp@23:6d197a452d7c, 2017-04-13 (annotated)
- Committer:
- jasper0712
- Date:
- Thu Apr 13 14:05:25 2017 +0000
- Revision:
- 23:6d197a452d7c
- Parent:
- 22:2e75b50b26f0
- Child:
- 24:d6187d39f09b
got spawnD up working. seems like theres still a lot need to be polished.
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 | 18:d82059ce929b | 12 | void Spawn::init() { |
jasper0712 | 18:d82059ce929b | 13 | healthA = 10; |
jasper0712 | 18:d82059ce929b | 14 | healthC = 100; |
jasper0712 | 23:6d197a452d7c | 15 | healthD = 50; |
jasper0712 | 18:d82059ce929b | 16 | spawnRateA = 32; |
jasper0712 | 18:d82059ce929b | 17 | spawnRateB = 1; |
jasper0712 | 18:d82059ce929b | 18 | spawnRateC = 2; |
jasper0712 | 22:2e75b50b26f0 | 19 | spawnRateD = 1; |
jasper0712 | 18:d82059ce929b | 20 | } |
jasper0712 | 20:32f115462bbc | 21 | void Spawn::randomizeSpawn(int Arr[][Rows], char cArr[][Rows]) { |
jasper0712 | 13:38cbce17d7d7 | 22 | //there is 3 kind of different spawn - a, b and c. |
jasper0712 | 23:6d197a452d7c | 23 | if (stopSpawnA == 1) { //spawn for this row |
jasper0712 | 20:32f115462bbc | 24 | spawnA(Arr, cArr); |
jasper0712 | 23:6d197a452d7c | 25 | spawnC(Arr, cArr); |
jasper0712 | 23:6d197a452d7c | 26 | stopSpawnA= 0; |
jasper0712 | 19:7ccbb19703f9 | 27 | } else { //stop spawn for the next row |
jasper0712 | 23:6d197a452d7c | 28 | stopSpawnA = 1; |
jasper0712 | 13:38cbce17d7d7 | 29 | } |
jasper0712 | 1:f5cda0674f24 | 30 | for ( int x = 0; x < Cols; x++) { |
jasper0712 | 20:32f115462bbc | 31 | spawnB(x, Arr, cArr); |
jasper0712 | 23:6d197a452d7c | 32 | spawnD(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 | 23:6d197a452d7c | 67 | void Spawn::spawnD(int x, int Arr[][Rows], char cArr[][Rows]) { |
jasper0712 | 23:6d197a452d7c | 68 | bool TrueFalseD = (rand() % 201) < spawnRateD; |
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 | 23:6d197a452d7c | 72 | Arr[x][0] = healthD; |
jasper0712 | 23:6d197a452d7c | 73 | cArr[x][0] = 'd'; //d denotes spawnD starts by moving left |
jasper0712 | 23:6d197a452d7c | 74 | } else { |
jasper0712 | 23:6d197a452d7c | 75 | Arr[x][0] = healthD; |
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 | 23:6d197a452d7c | 85 | if (cArr[x][y] == 'a' || cArr[x][y] == 'b' || cArr[x][y] == 'c' || cArr[x][y] == 'l' || cArr[x][y] == 'r') { |
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 | 23:6d197a452d7c | 94 | void Spawn::moveSpawnD(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 | 23:6d197a452d7c | 97 | if (cArr[x][y] == 'd') { //d1 = move left & down |
jasper0712 | 23:6d197a452d7c | 98 | if (cArr[x-1][y+1] == 'a' || cArr[x-1][y+1] == 'b' ) { //if the path is blocked by spawnA or spawnB |
jasper0712 | 23:6d197a452d7c | 99 | cArr2[x-2][y+2] = 'd'; Arr2[x-2][y+2] = Arr[x][y]; //jumps over it |
jasper0712 | 23:6d197a452d7c | 100 | cArr2[x][y] = '\0'; Arr2[x][y] = 0; |
jasper0712 | 23:6d197a452d7c | 101 | } else if (x == 0 || x == 83 || cArr[x-1][y+1] == 'l' || cArr[x-1][y+1] == 'r') { //if it hits the wall or 'l' or 'r'. |
jasper0712 | 23:6d197a452d7c | 102 | cArr2[x+1][y+1] = 'e'; Arr2[x+1][y+1] = Arr[x][y]; //start moving right & down |
jasper0712 | 23:6d197a452d7c | 103 | cArr2[x][y] = '\0'; Arr2[x][y] = 0; |
jasper0712 | 23:6d197a452d7c | 104 | } else { //if nothing is blocking the path |
jasper0712 | 23:6d197a452d7c | 105 | cArr2[x-1][y+1] = cArr[x][y]; Arr2[x-1][y+1] = Arr[x][y]; //move as usual. |
jasper0712 | 23:6d197a452d7c | 106 | cArr2[x][y] = '\0'; Arr2[x][y] = 0; |
jasper0712 | 23:6d197a452d7c | 107 | } |
jasper0712 | 23:6d197a452d7c | 108 | } else if ( cArr[x][y] == 'e') { //move right & down |
jasper0712 | 23:6d197a452d7c | 109 | if (cArr[x+1][y+1] == 'a' || cArr[x+1][y+1] == 'b' ) { //if the path is blocked by spawnA or spawnB |
jasper0712 | 23:6d197a452d7c | 110 | cArr2[x+2][y+2] = 'e'; Arr2[x+2][y+2] = Arr[x][y]; //jumps over it |
jasper0712 | 23:6d197a452d7c | 111 | cArr2[x][y] = '\0'; Arr2[x][y] = 0; |
jasper0712 | 23:6d197a452d7c | 112 | } else if (x == 0 || x == 83 || cArr[x-1][y+1] == 'l' || cArr[x-1][y+1] == 'r') { //if it hits the wall or 'l' or 'r'. |
jasper0712 | 23:6d197a452d7c | 113 | cArr2[x-1][y+1] = 'd'; Arr2[x-1][y+1] = Arr[x][y]; //start moving left & down |
jasper0712 | 23:6d197a452d7c | 114 | cArr2[x][y] = '\0'; Arr2[x][y] = 0; |
jasper0712 | 23:6d197a452d7c | 115 | } else { //if nothing is blocking the path |
jasper0712 | 23:6d197a452d7c | 116 | cArr2[x+1][y+1] = cArr[x][y]; Arr2[x+1][y+1] = Arr[x][y]; //move as usual. |
jasper0712 | 23:6d197a452d7c | 117 | cArr2[x][y] = '\0'; Arr2[x][y] = 0; |
jasper0712 | 23:6d197a452d7c | 118 | } |
jasper0712 | 23:6d197a452d7c | 119 | } |
jasper0712 | 23:6d197a452d7c | 120 | } |
jasper0712 | 23:6d197a452d7c | 121 | } |
jasper0712 | 23:6d197a452d7c | 122 | } |
jasper0712 | 20:32f115462bbc | 123 | void Spawn::moveSpawnB(int Arr[][Rows], int Arr2[][Rows], char cArr[][Rows], char cArr2[][Rows]){ |
jasper0712 | 13:38cbce17d7d7 | 124 | //printf("moving spawn B \n"); |
jasper0712 | 13:38cbce17d7d7 | 125 | for (int x = 0; x < Cols; x++) { |
jasper0712 | 13:38cbce17d7d7 | 126 | for (int y = 0; y < Rows; y++) { |
jasper0712 | 20:32f115462bbc | 127 | deleteChar(x, y, Arr2, cArr2); |
jasper0712 | 20:32f115462bbc | 128 | if (cArr[x][y] == 'b') { |
jasper0712 | 20:32f115462bbc | 129 | Arr2[x][y+1] = Arr[x][y]; |
jasper0712 | 20:32f115462bbc | 130 | cArr2[x][y+1] = 'b'; |
jasper0712 | 20:32f115462bbc | 131 | cArr2[x][y] = '\0'; |
jasper0712 | 20:32f115462bbc | 132 | Arr2[x][y] = 0; |
jasper0712 | 13:38cbce17d7d7 | 133 | } |
jasper0712 | 13:38cbce17d7d7 | 134 | } |
jasper0712 | 13:38cbce17d7d7 | 135 | } |
jasper0712 | 13:38cbce17d7d7 | 136 | } |
jasper0712 | 20:32f115462bbc | 137 | void Spawn::updateSpawn(int Arr[][Rows], int Arr2[][Rows], char cArr[][Rows], char cArr2[][Rows], N5110 &lcd) { |
jasper0712 | 2:2c60c92bf65b | 138 | for ( int x = 0; x < Cols; x++) { |
jasper0712 | 2:2c60c92bf65b | 139 | for ( int y = 0; y < Rows; y++) { |
jasper0712 | 21:e5585569a938 | 140 | deleteChar(x, y, Arr2, cArr2); //cleaning up the array |
jasper0712 | 23:6d197a452d7c | 141 | if (cArr2[x][y] == 'a' || cArr2[x][y] == 'd' || cArr2[x][y] == 'e') { |
jasper0712 | 1:f5cda0674f24 | 142 | lcd.setPixel(x,y); |
jasper0712 | 23:6d197a452d7c | 143 | Arr[x][y] = Arr2[x][y]; //to update the main array |
jasper0712 | 23:6d197a452d7c | 144 | cArr[x][y] = cArr2[x][y]; |
jasper0712 | 20:32f115462bbc | 145 | } else if (cArr2[x][y] == 'b') { |
jasper0712 | 18:d82059ce929b | 146 | lcd.setPixel(x,y); lcd.setPixel(x,y+1); |
jasper0712 | 23:6d197a452d7c | 147 | Arr[x][y] = Arr2[x][y]; //to update the main array |
jasper0712 | 20:32f115462bbc | 148 | cArr[x][y] = 'b'; |
jasper0712 | 23:6d197a452d7c | 149 | } else if (cArr2[x][y] == 'c' || cArr2[x][y] == 'l' || cArr2[x][y] == 'r') { |
jasper0712 | 23:6d197a452d7c | 150 | //cArr[x-1][y-1] = 'l'; cArr[x+1][y-1] = 'r'; // L and R (left and right) side of the spawn C for bigger hit box. |
jasper0712 | 23:6d197a452d7c | 151 | cArr[x][y] = cArr2[x][y]; |
jasper0712 | 23:6d197a452d7c | 152 | Arr[x][y] = Arr2[x][y]; //to update the main array |
jasper0712 | 18:d82059ce929b | 153 | lcd.setPixel(x,y); lcd.setPixel(x,y+1); |
jasper0712 | 18:d82059ce929b | 154 | lcd.setPixel(x+1,y); lcd.setPixel(x-1,y); |
jasper0712 | 13:38cbce17d7d7 | 155 | }else { |
jasper0712 | 20:32f115462bbc | 156 | Arr[x][y] = 0; |
jasper0712 | 20:32f115462bbc | 157 | cArr[x][y] = '\0'; |
jasper0712 | 1:f5cda0674f24 | 158 | } |
jasper0712 | 1:f5cda0674f24 | 159 | } |
jasper0712 | 1:f5cda0674f24 | 160 | } |
jasper0712 | 1:f5cda0674f24 | 161 | } |
jasper0712 | 21:e5585569a938 | 162 | void Spawn::deleteChar(int x, int y, int Arr2[][Rows], char cArr2[][Rows]) { // to clean up the array after killing the spawn. |
jasper0712 | 20:32f115462bbc | 163 | if (Arr2[x][y] <= 0) { |
jasper0712 | 20:32f115462bbc | 164 | cArr2[x][y] = '\0'; |
jasper0712 | 13:38cbce17d7d7 | 165 | } |
jasper0712 | 13:38cbce17d7d7 | 166 | } |
jasper0712 | 7:3be4369131c6 | 167 | |
jasper0712 | 3:6b50fe9d3848 | 168 |