int checkColPlayerDown(int x, int y, int level, int offset) { int i; int count = 0; // First, we check the pixels directly below the player... for (i = 1; i < 8; i++) { // I don't know why, but if you start at 0, you can jump 1px into the wall. // Because Bob is only 7px wide... // And it has to be "< 8", we don't want to forget the pixel at the very right of Bob... if (getPixel((x + i), (y + 8)) != 0) { count++; } } if (count == 0) { return 0; // All pixels below the player are white. There is nothing! } if (count > 0) { y = translatepixelval(y, &count) + 1; // Remember: Below! x = translatepixelval((x + offset), &count); colY = y; colX = x; if (isBlock(level, x, y) != 0) { return 1; } if (count > 1) { // Player is 7px wide... // We are off... if (isBlock(level, (x + 1), y) != 0) { colX++; return 4; } } if (isBox(level, x, y) != 0) { return 2; } if (count > 1) { if (isBox(level, (x + 1), y) != 0) { colX++; return 5; } } if (isCoin(level, x, y) != 0) { return 3; } if (count > 1) { if (isCoin(level, (x + 1), y) != 0) { colX++; return 6; } } for (i = 0; i < HOWMANYENEMYS; i++) { if (isEnemy(level, x, y, i) != 0) { return 7; } if (isEnemy(level, (x + 1), y, i) != 0) { colX++; return 8; } } } }
int checkColPlayerUp(int x, int y, int level, int offset) { int i; int count = 0; // First, we check the pixels directly above the player... for (i = 1; i < 7; i++) { if (getPixel((x + i), (y - 1))) { count++; } } if (count == 0) { return 0; // All pixels above the player are white. There is nothing! } if (count > 0) { y = translatepixelval(y, &count); x = translatepixelval((x + offset), &count); colY = y; colX = x; if (isBlock(level, x, y) != 0) { return 1; } if (count > 1) { // Player is 7px wide... // We are off... if (isBlock(level, (x + 1), y) != 0) { colX++; return 4; } } if (isBox(level, x, y) != 0) { return 2; } if (count > 1) { if (isBox(level, (x + 1), y) != 0) { colX++; return 5; } } if (isCoin(level, x, y) != 0) { return 3; } if (count > 1) { if (isCoin(level, (x + 1), y) != 0) { colX++; return 6; } } for (i = 0; i < HOWMANYENEMYS; i++) { if (isEnemy(level, x, y, i) != 0) { return 7; } if (isEnemy(level, (x + 1), y, i) != 0) { colX++; return 8; } } } }
int checkColPlayerLeft(int x, int y, int level, int offset) { int i; int count = 0; for (i = 0; i < 8; i++) { if (getPixel((x - 1), (y + i)) != 0) { count++; } } if (count == 0) { return 0; } if (count > 0) { x = translatepixelval((x + offset), &count); y = translatepixelval(y, &count); colY = y; colX = x; if (isBlock(level, x, y) != 0) { return 1; } if (count > 0) { if (isBlock(level, x, (y + 1)) != 0) { colY++; return 4; } } if (isBox(level, x, y) != 0) { return 2; } if (count > 0) { if (isBox(level, x, (y + 1)) != 0) { colY++; return 5; } } if (isCoin(level, x, y) != 0) { return 3; } if (count > 0) { if (isBox(level, x, (y + 1)) != 0) { colY++; return 6; } } for (i = 0; i < HOWMANYENEMYS; i++) { if (isEnemy(level, x, y, i) != 0) { return 7; } if (isEnemy(level, x, (y + 1), i) != 0) { colY++; return 8; } } } }
int *algorithm_1(int *arr, int *outputArr, int size, int value) { int i, k, *tempArr1, *tempArr2, *tempArr3; k = value; if (k == 1) { outputArr[0]++; return outputArr; } else if ((i = isCoin(arr, size, k))) { outputArr[i]++; return outputArr; } else { //loop through every integer from 1 to "value" for (i = 1; i < k; i++) { //create and initilize three temprorary arrays of size "size" to all 0's tempArr1 = createArr(size); tempArr2 = createArr(size); tempArr3 = createArr(size); initArr(tempArr1, size); initArr(tempArr2, size); initArr(tempArr3, size); //recursively call algorithm_1 on array from 1 -> i and i + 1 -> "value" tempArr1 = algorithm_1(arr, tempArr1, size, i); tempArr2 = algorithm_1(arr, tempArr2, size, k - i); //add the sum of all elements at each index of tempArr1 and temArr2 together, assign to tempArr3 addArr(tempArr1, tempArr2, tempArr3, size); //if this new sum of elements array (tempArr3) is less than the running min (outputArr) or the current output array is not a solution, then replace outputArr with tempArr3 if ((sumArray(tempArr3, size) < sumArray(outputArr, size)) || !coinCheck(outputArr, arr, size, k)) { copyArr(tempArr3, outputArr, size); } free(tempArr1); free(tempArr2); free(tempArr3); } } return outputArr; }