int vtime;
int xtrail[10]; //x history
int ytrail[10]; //y history
+ int chase; //the pod a lander is targeting
+ int phase; //chase phase
char line0[6]; //object: left
char line1[6]; //object: right
char line2[6]; //object: alt1
object.y = -1;
object.speed = 0;
object.direction = 0;
+ object.chase = 0;
+ object.phase = 0;
return object;
}
return player;
}
+game_object pod_chase(game_object lander, game_object pod){
+
+ //match y, then direction and speed
+ if(lander.chase>0&&lander.phase==1){
+ if(abs(lander.y-pod.y)<4){
+ lander.speed = 2;
+ };
+ if(lander.y==pod.y){
+ lander.direction = pod.direction;
+ lander.speed = pod.speed;
+ lander.phase = 2;
+ };
+ };
+
+ if(lander.chase>0&&lander.phase==2){
+ //decend to pod's x-1
+ if(lander.x<=pod.x-1){
+ lander.x++;
+ };
+ if(lander.x>pod.x-1){
+ lander.phase = 3;
+ };
+ };
+
+ if(lander.chase>0&&lander.phase==3){
+ //ascend at speed 1 keep pod at x+1
+ lander.x--;
+ if(lander.x<=1){
+ //at x=1, destroy pod, deallocate lander, allocate crazy at same location.
+ lander.phase = 4; //set pod to 'kill'
+ };
+ };
+
+ return lander;
+}
+
int main(){
//Check screen size 80x25 and exit if not big enough
int podsin = 0;
int landercount = 0;
int crazycount = 0;
+ int alertleft = 0;
+ int alertright = 0;
cbreak();
halfdelay(1);
for(int landerloop = 0; landerloop<landermax; landerloop++){
if(landers[landerloop].active==1){
- landers[landerloop] = process_motion(landers[landerloop], player);
+ if(landers[landerloop].chase>0&&landers[landerloop].phase==1){
+ landers[landerloop] = pod_chase(landers[landerloop], pods[landers[landerloop].chase]);
+ };
+ if(landers[landerloop].chase>0&&landers[landerloop].phase==2){
+ landers[landerloop] = pod_chase(landers[landerloop], pods[landers[landerloop].chase]);
+ };
+ if(landers[landerloop].chase>0&&landers[landerloop].phase==3){
+ pods[landers[landerloop].chase].x--;
+ landers[landerloop] = pod_chase(landers[landerloop], pods[landers[landerloop].chase]);
+ };
+ if(landers[landerloop].chase>0&&landers[landerloop].phase==4){ //decode which pod to kill
+ pods[landers[landerloop].chase] = object_out(pods[landers[landerloop].chase]);
+ crazies[landerloop] = encrazify(landers[landerloop], crazies[landerloop]);
+ landers[landerloop] = object_out(landers[landerloop]);
+ };
};
+ landers[landerloop] = process_motion(landers[landerloop], player);
};
-
+
+
for(int crazyloop = 0; crazyloop<landermax; crazyloop++){
if(crazies[crazyloop].active==1){
crazies[crazyloop] = crazy_motion(crazies[crazyloop], player);
for(int crazyloop = 0; crazyloop<landermax; crazyloop++){ radar_plot(crazies[crazyloop], drawlocation); };
radar_plot(player, drawlocation);
+ //alerts
+ if(alertright>0){
+ if(alertright%2==0){
+ mvprintw(19,50," >> ");
+ };
+ alertright--;
+ };
+ if(alertleft>0){
+ if(alertleft%2==0){
+ mvprintw(19,40," << ");
+ };
+ alertleft--;
+ };
+
//pod state
mvprintw(21,1,"Out: %d In: %d", podcount, podsin);
input = getch();
+ //quit
if(input=='q'){loopvar=1;};
+
//check for / process direction change
if(input==66||input==68||input==67||input==65||input==69){
player = process_direction(player, input);
drawlocation = player.y-20;
//kill any carried pods
if(pod_in>0){
- for(int podloop = 0; podloop<8; podloop=podloop+2){
+ for(int podloop = 0; podloop<8; podloop++){
if(pods[podloop].number==pod_in){
pods[podloop] = object_out(pods[podloop]);
pod_in = 0;
drawlocation = player.y-20;
//kill any carried pods
if(pod_in>0){
- for(int podloop = 0; podloop<8; podloop=podloop+2){
+ for(int podloop = 0; podloop<8; podloop++){
if(pods[podloop].number==pod_in){
pods[podloop] = object_out(pods[podloop]);
pod_in = 0;
drawlocation = player.y-20;
//kill any carried pods
if(pod_in>0){
- for(int podloop = 0; podloop<8; podloop=podloop+2){
+ for(int podloop = 0; podloop<8; podloop++){
if(pods[podloop].number==pod_in){
pods[podloop] = object_out(pods[podloop]);
pod_in = 0;
};
//lander pod grab logic
- //steps
+ //steps:
//decide to grab a pod
- //choose the closest pod
- //alert player
- //travel to it at speed 2, match y , then direction and speed
- //decend to pod's x-1
- //ascend at speed 1 keep pod at x+1
- //at x=1, destroy pod, deallocate lander, allocate crazy at same location. still need to define crazy and it's behavior
+ for(int landerloop = 0; landerloop<landermax; landerloop++){
+ if(landers[landerloop].active==1&&landers[landerloop].chase==0){
+ //if(rand()%10000<=10){
+ if(rand()%1000<=10){
+ //choose the closest pod
+ for(int podloop = 0; podloop<8; podloop++){
+ if(landers[landerloop].chase==0&&pods[podloop].chase==0){
+ landers[landerloop].chase = pods[podloop].number;
+ pods[podloop].chase = landers[landerloop].number;
+ };
+ };
+ //alert player print >>>> or <<<< at mid height, flash. set a value, have a function do it in the draw area.
+ //travel to it at speed 4
+ landers[landerloop].speed = 4;
+ if(player.y<landers[landerloop].y){ landers[landerloop].direction = 6; alertright = 20;};
+ if(player.y>=landers[landerloop].y){ landers[landerloop].direction = 4; alertleft = 20;};
+ landers[landerloop].phase = 1;
+ };
+ };
+ };
//check for 0 active pods, saved pods, level victory
podcount = 0;