Meteor defense project

Dependencies:   N5110 mbed

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?

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 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