Added shields.
authorlimb <limb@bc5cbbab-a4ec-0310-bb52-ff3d296db539>
Fri, 26 Jan 2007 18:55:38 +0000 (18:55 +0000)
committerlimb <limb@bc5cbbab-a4ec-0310-bb52-ff3d296db539>
Fri, 26 Jan 2007 18:55:38 +0000 (18:55 +0000)
git-svn-id: svn+ssh://svn/var/repos/curfender@619 bc5cbbab-a4ec-0310-bb52-ff3d296db539

layout.txt
main.cpp

index bf8e088..c934ab6 100644 (file)
@@ -3,9 +3,9 @@
 3
 4\     {=}
 5/     
-6
-7
-8
+6                                 /---\
+7                                (<_==>)
+8                                 \---/
 9
 0\
 1/
@@ -19,7 +19,7 @@
 9                   /|\            x + x +     
 0-------------------------------------------------------------------------------
 1Lv:<=><=><=><=>|                         /        \                           |
-2 Out: X In: X  |                                                              |
-3 Level :   XX  |                                                              |
+2 O:X I:X BBBB  |                                                              |
+3 Lvl:XXX S:XXX |                                                              |
 4 Score:XXXXXX  |                         \        /                           |   
 5
index d291865..2f77942 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -4,7 +4,7 @@
 #include <time.h>
 
 const int podmax = 8;
-const int bulletmax = 4;
+const int bulletmax = 10;
 const int landershotmax = 10;
 const int landermax = 4;
 
@@ -15,6 +15,7 @@ int level;
 int drawlocation = 0;
 int pod_in = 0;
 int pause = 0;
+int shieldsleft = 400;
 
 struct game_object {
   int number; //object number
@@ -39,9 +40,15 @@ struct game_object {
 
 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;
     };
   };
@@ -156,8 +163,58 @@ game_object process_motion(game_object object, game_object player){
       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];
@@ -432,8 +489,8 @@ void draw_board(){
     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){
@@ -659,7 +716,13 @@ int main(){
     { 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++){ 
@@ -719,6 +782,35 @@ int main(){
     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
@@ -743,6 +835,7 @@ int main(){
   int alertleft = 0;
   int alertright = 0;
   int smartbombs = 4;
+  int shieldup = 0;
 
   cbreak();
   halfdelay(1);
@@ -757,6 +850,10 @@ int main(){
     //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
@@ -836,6 +933,12 @@ int main(){
     // 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); };
 
@@ -915,6 +1018,26 @@ int main(){
     //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);
@@ -1069,6 +1192,14 @@ int main(){
            };
          };
        };
+       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;
+           };
+         };
+       };
       };
     };
 
@@ -1096,6 +1227,14 @@ int main(){
            };
          };
        };
+       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;
+           };
+         };
+       };
       };
     };
 
@@ -1188,9 +1327,17 @@ int main(){
            };
          };
        };
+       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