#include <time.h>
const int podmax = 8;
-const int bulletmax = 4;
+const int bulletmax = 10;
const int landershotmax = 10;
const int landermax = 4;
int drawlocation = 0;
int pod_in = 0;
int pause = 0;
+int shieldsleft = 400;
struct game_object {
int number; //object number
int check_collision(game_object object1, game_object object2){
int collided = 0;
+ int spacing = 2;
+ int vspacing = 0;
+ if((object1.number>=100&&object1.number<=111)||(object2.number>=100&&object2.number<=111)){
+ spacing = 4;
+ vspacing = 2;
+ };
- if(object1.x==object2.x){
- if(abs(object1.y-object2.y)<=2){
+ if(abs(object1.x-object2.x)<=vspacing){
+ if(abs(object1.y-object2.y)<=spacing){
collided=1;
};
};
object.speed=player.speed;
object.x=player.x;
object.y=player.y;
+ } else if(object.number>=100&&object.number<=111){
+ object.direction = player.direction;
+ object.speed = player.speed;
+ if(object.number==100){
+ object.x = player.x-1;
+ object.y = player.y+1;
+ };
+ if(object.number==101){
+ object.x = player.x-1;
+ object.y = player.y+2;
+ };
+ if(object.number==102){
+ object.x = player.x-1;
+ object.y = player.y+3;
+ };
+ if(object.number==103){
+ object.x = player.x+1;
+ object.y = player.y+1;
+ };
+ if(object.number==104){
+ object.x = player.x+1;
+ object.y = player.y+2;
+ };
+ if(object.number==105){
+ object.x = player.x+1;
+ object.y = player.y+3;
+ };
+ if(object.number==106){
+ object.x = player.x-1;
+ object.y = player.y;
+ };
+ if(object.number==107){
+ object.x = player.x+1;
+ object.y = player.y+4;
+ };
+ if(object.number==108){
+ object.x = player.x-1;
+ object.y = player.y+4;
+ };
+ if(object.number==109){
+ object.x = player.x+1;
+ object.y = player.y;
+ };
+ if(object.number==110){
+ object.x = player.x;
+ object.y = player.y+5;
+ };
+ if(object.number==111){
+ object.x = player.x;
+ object.y = player.y-1;
+ };
} else {
-
if(object.number==1){
object.xtrail[9]=object.xtrail[8];
object.xtrail[8]=object.xtrail[7];
count--;
};
//Level
- mvprintw(22,1,"Level:%8d", level);
-
+ mvprintw(22,1,"Lvl:%3d", level);
+ mvprintw(22,9,"S:%3d", shieldsleft);
}
int life_loss(int lives, int score){
{ 40, 0, 0, 0, 5, 0, 0, 0, 0 },
{ 41, 0, 0, 0, 5, 0, 0, 0, 0 },
{ 42, 0, 0, 0, 5, 0, 0, 0, 0 },
- { 43, 0, 0, 0, 5, 0, 0, 0, 0 }
+ { 43, 0, 0, 0, 5, 0, 0, 0, 0 },
+ { 44, 0, 0, 0, 5, 0, 0, 0, 0 },
+ { 45, 0, 0, 0, 5, 0, 0, 0, 0 },
+ { 46, 0, 0, 0, 5, 0, 0, 0, 0 },
+ { 47, 0, 0, 0, 5, 0, 0, 0, 0 },
+ { 48, 0, 0, 0, 5, 0, 0, 0, 0 },
+ { 49, 0, 0, 0, 5, 0, 0, 0, 0 }
};
for(int bulletloop = 0; bulletloop<bulletmax; bulletloop++){
strcpy (crazies[crazyloop].radar, "!");
};
+ //shield
+ struct game_object shields[12] = {
+ { 100, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 101, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 102, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 103, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 104, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 105, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 106, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 107, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 108, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 109, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 110, 1, 0, 0, 5, 0, 1, 0, 0 },
+ { 111, 1, 0, 0, 5, 0, 1, 0, 0 }
+ };
+
+ strcpy (shields[0].line0, "-");
+ strcpy (shields[1].line0, "-");
+ strcpy (shields[2].line0, "-");
+ strcpy (shields[3].line0, "-");
+ strcpy (shields[4].line0, "-");
+ strcpy (shields[5].line0, "-");
+ strcpy (shields[6].line0, "/");
+ strcpy (shields[7].line0, "/");
+ strcpy (shields[8].line0, "\\");
+ strcpy (shields[9].line0, "\\");
+ strcpy (shields[10].line0, ")");
+ strcpy (shields[11].line0, "(");
+
initscr();
//Check screen size 80x24 and exit if not big enough
int alertleft = 0;
int alertright = 0;
int smartbombs = 4;
+ int shieldup = 0;
cbreak();
halfdelay(1);
//process object motion
player = process_motion(player, player);
+ for(int shieldloop = 0; shieldloop<12; shieldloop++){
+ shields[shieldloop] = process_motion(shields[shieldloop], player);
+ };
+
for(int podloop = 0; podloop<podmax; podloop++){
pods[podloop] = process_motion(pods[podloop], player);
//If lander dies, release pod
// Draw player object 1
drawlocation = draw_object(player, drawlocation);
+ if(shieldup==1){
+ for(int shieldloop = 0; shieldloop<12; shieldloop++){
+ drawlocation = draw_object(shields[shieldloop], drawlocation);
+ };
+ };
+
// Draw pods objects 2-9
for(int podloop = 0; podloop<podmax; podloop++){ drawlocation = draw_object(pods[podloop], drawlocation); };
//quit
if(input=='q'){loopvar=1;};
+ //check for/toggle shield
+ if(input=='s'){
+ if(shieldup==0){
+ if(shieldsleft>=1){
+ shieldup=1;
+ };
+ } else {
+ shieldup=0;
+ };
+ };
+
+ //deplete shields if necessary.
+ if(shieldup==1){
+ if(shieldsleft>0){
+ shieldsleft--;
+ } else {
+ shieldup=0;
+ };
+ };
+
//check for / process direction change
if(input==66||input==68||input==67||input==65||input==69){
player = process_direction(player, input);
};
};
};
+ if(shieldup==1){
+ for(int shieldloop = 0; shieldloop<12; shieldloop++){
+ if(check_collision(landers[landerloop], shields[shieldloop])==1){
+ landers[landerloop] = object_out(landers[landerloop]);
+ score = score + 20;
+ };
+ };
+ };
};
};
};
};
};
+ if(shieldup==1){
+ for(int shieldloop = 0; shieldloop<12; shieldloop++){
+ if(check_collision(crazies[crazyloop], shields[shieldloop])==1){
+ crazies[crazyloop] = object_out(crazies[crazyloop]);
+ score = score + 20;
+ };
+ };
+ };
};
};
};
};
};
+ if(shieldup==1){
+ for(int shieldloop = 0; shieldloop<12; shieldloop++){
+ if(check_collision(landershot[landershotloop], shields[shieldloop])==1){
+ landershot[landershotloop].vtime = 100;
+ landershot[landershotloop] = age_bullet(landershot[landershotloop]);
+ };
+ };
+ };
};
};
-
+
//lander pod grab logic
//steps:
//decide to grab a pod