home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / TANK11.ZIP / SOURCE.ZIP / CONFIG.BAK next >
Encoding:
Text File  |  1993-01-17  |  10.3 KB  |  371 lines

  1. /* CONFIG.C is the main screen and config routines */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <conio.h>
  7.  
  8. #include "tankdefs.h"
  9. #include "types.h"
  10. #include "extern.h"
  11. #include "joy.h"
  12.  
  13. extern joy_stick joystick;
  14. extern int JoyStickNumber;
  15. extern int StickOnTank;
  16.  
  17. #define UPKEY    0x4800
  18. #define DOWNKEY  0x5000
  19. #define ESCKEY   0x011b
  20. #define SPACEKEY 0x3920
  21. #define RETKEY   0x1c0d
  22.  
  23. #define YBASE 11
  24. #define X 21
  25.  
  26. /* define menu order */
  27. #define BEGIN        0
  28. #define SCORES        1
  29. #define GUIDED        2
  30. #define TREES        3
  31. #define TDELAY        4
  32. #define SDELAY        5
  33. #define SRANGE        6
  34. #define NTANKS        7
  35. #define JOYTANK        8
  36. #define CALJOY        9
  37. #define SCONFIG        10
  38. #define DEFAULTS    11
  39.  
  40. void drawconfig()
  41. {
  42.     clrscr();
  43.     textattr(0x0e);
  44.    gotoxy(18,1); cprintf("╔═══════════════════════════════════════╗");
  45.     gotoxy(18,2); cprintf("║            SUPER TANK 1.0             ║");
  46.     gotoxy(18,3); cprintf("║                                       ║");
  47.     gotoxy(18,4); cprintf("║  (C) Copyright 1992 Kevin Dahlhausen  ║");
  48.    gotoxy(18,5); cprintf("║                                       ║");
  49.    gotoxy(18,6); cprintf("╚═══════════════════════════════════════╝");
  50. }
  51.  
  52. void updatescreen()
  53. /* requires: none
  54.  * ensures:  current values of config variables are written,
  55.  *              starting at YBASE,X
  56.  */
  57. {  int x=wherex(), y=wherey();
  58.     gotoxy(X,YBASE+BEGIN);         textattr(0x07); cprintf("Begin game");
  59.  
  60.     gotoxy(X,YBASE+SCORES);        textattr(0x07); cprintf("Reset scores");
  61.  
  62.     gotoxy(X,YBASE+GUIDED);     textattr(0x0f);
  63.     if (GuidedShots) cprintf(" ON"); else cprintf("OFF");
  64.     textattr(0x07); cprintf(" Guided Bullets");
  65.  
  66.     gotoxy(X,YBASE+TREES);     textattr(0x0f);
  67.     if (TreesOn) cprintf(" ON"); else cprintf("OFF");
  68.     textattr(0x07); cprintf(" Trees Option");
  69.  
  70.     gotoxy(X,YBASE+TDELAY);
  71.     textattr(0x0f); cprintf("%03d", TankSpeed);
  72.     textattr(0x07); cprintf(" Tank Delay");
  73.  
  74.     gotoxy(X,YBASE+SDELAY);
  75.     textattr(0x0f); cprintf("%03d", ShotSpeed);
  76.     textattr(0x07); cprintf(" Bullet Delay");
  77.  
  78.     gotoxy(X,YBASE+SRANGE);
  79.     textattr(0x0f); cprintf("%03d",ShotRange);
  80.     textattr(0x07); cprintf(" Bullet Range");
  81.  
  82.     gotoxy(X,YBASE+NTANKS);
  83.     textattr(0x0f); cprintf("%03d", NumTanks);
  84.     textattr(0x07); cprintf(" Number of players");
  85.  
  86.     gotoxy(X,YBASE+JOYTANK);
  87.     textattr(0x0f);
  88.     if (StickOnTank=-1) cprintf("OFF");
  89.     else cprintf("%03d", StickOnTank);
  90.     textattr(0x07); cprintf(" Joystick on tank");
  91.  
  92.  
  93.     gotoxy(X,YBASE+CALJOY);
  94.     textattr(0x07); cprintf("    Calibrate joystick");
  95.  
  96.     gotoxy(X, YBASE+1+SCONFIG); cprintf("Save configuration");
  97.     gotoxy(X, YBASE+1+DEFAULTS); cprintf("Restore default values");
  98.  
  99.     gotoxy(x,y); /* restore original cursor position */
  100. }
  101.  
  102. void saveconfig()
  103. /* requires: none
  104.  * ensures: config is saved to CONFIGFILE
  105.  */
  106. { FILE *cfile;
  107.   if (cfile=fopen(CONFIGFILE, "wt")) {
  108.      fprintf(cfile, "trees=%d\n", TreesOn);
  109.      fprintf(cfile, "guided=%d\n", GuidedShots);
  110.      fprintf(cfile, "tankspeed=%d\n", TankSpeed);
  111.      fprintf(cfile, "shotspeed=%d\n", ShotSpeed);
  112.      fprintf(cfile, "shotrange=%d\n", ShotRange);
  113.      fprintf(cfile, "numtanks=%d\n",  NumTanks);
  114.      fprintf(cfile, "stickon=%d\n", StickOnTank);
  115.      fprintf(cfile, "sticknumber=%d\n", JoyStickNumber);
  116.      fclose(cfile);
  117.  }
  118. }
  119.  
  120.  
  121. int configmenu()
  122. /* handles the config options in opening screen */
  123. {
  124.  int state=0;
  125.  int keyp, i;
  126.  int cpos;
  127.  int returnstate;
  128.  int *valptr;
  129.  
  130.  CursorOff;
  131.  drawconfig();
  132.  while(1) {
  133.     updatescreen();
  134.     switch (state) {
  135.         case BEGIN:  gotoxy(X-3,YBASE+BEGIN); printf("->");
  136.                     switch(bioskey(0)) {
  137.                     case RETKEY:
  138.                     case SPACEKEY:    return (1);  /* begin game */
  139.                     case ESCKEY:    return (0);  /* decided not to play */
  140.                case UPKEY:    state=DEFAULTS; break;
  141.                     case DOWNKEY:    state++; break;
  142.                   };
  143.                   gotoxy(X-3, YBASE+BEGIN); printf("  ");
  144.                   break;
  145.  
  146.         case SCORES:  gotoxy(X-3,YBASE+SCORES); printf("->");
  147.                 switch(bioskey(0)) {
  148.                     case ESCKEY:    return (0);  /* decided not to play */
  149.                     case UPKEY:        state--; break;
  150.                     case DOWNKEY:    state++; break;
  151.                     case RETKEY:
  152.                     case SPACEKEY: for(i=0; i<MAXNUMTANKS; i++) tank[i].score=0;
  153.                  };
  154.                  gotoxy(X-3, YBASE+SCORES); printf("  ");
  155.                  break;
  156.  
  157.  
  158.         case GUIDED:  gotoxy(X-3,YBASE+GUIDED); printf("->");
  159.                     switch(bioskey(0)) {
  160.                     case ESCKEY:    return (0);  /* decided not to play */
  161.                     case UPKEY:        state--; break;
  162.                     case DOWNKEY:    state++; break;
  163.                     case RETKEY:
  164.                     case SPACEKEY: GuidedShots = !GuidedShots;
  165.                   };
  166.                   gotoxy(X-3, YBASE+GUIDED); printf("  ");
  167.                   break;
  168.  
  169.  
  170.         case TREES:  gotoxy(X-3,YBASE+TREES); printf("->");
  171.                     switch(bioskey(0)) {
  172.                     case ESCKEY:    return (0);  /* decided not to play */
  173.                     case UPKEY:        state--; break;
  174.                     case DOWNKEY:    state++; break;
  175.                     case RETKEY:
  176.                     case SPACEKEY: TreesOn = !TreesOn;
  177.                   };
  178.                   gotoxy(X-3, YBASE+TREES); printf("  ");
  179.                   break;
  180.  
  181.         case TDELAY: gotoxy(X-3,YBASE+TDELAY); printf("->");
  182.                   switch(keyp=bioskey(0)) {
  183.                      case ESCKEY:     return (0);  /* decided not to play */
  184.                      case UPKEY:     state--; break;
  185.                      case DOWNKEY:     state++; break;
  186.                      default:       keyp=(keyp&0x00ff)-0x30;  /* check for # key */
  187.                                          if ((keyp>=0)&&(keyp<=9)) {
  188.                                             returnstate=TDELAY;
  189.                                             valptr=&TankSpeed;
  190.                                             state=101;
  191.                                             gotoxy(X, YBASE+TDELAY);
  192.                                             CursorOn;
  193.                                          }
  194.                   };
  195.                   gotoxy(X-3, YBASE+TDELAY); printf("  ");
  196.                   break;
  197.  
  198.         case SDELAY: gotoxy(X-3,YBASE+SDELAY); printf("->");
  199.                   switch(keyp=bioskey(0)) {
  200.                      case ESCKEY:     return (0);  /* decided not to play */
  201.                      case UPKEY:     state--; break;
  202.                      case DOWNKEY:     state++; break;
  203.                      default:       keyp=(keyp&0x00ff)-0x30;  /* check for # key */
  204.                                          if ((keyp>=0)&&(keyp<=9)) {
  205.                                             returnstate=SDELAY;
  206.                                             valptr=&ShotSpeed;
  207.                                             state=101;
  208.                                             gotoxy(X, YBASE+SDELAY);
  209.                                             CursorOn;
  210.                                          }
  211.                   };
  212.                   gotoxy(X-3, YBASE+SDELAY); printf("  ");
  213.                   break;
  214.  
  215.         case SRANGE: gotoxy(X-3,YBASE+SRANGE); printf("->");
  216.                   switch(keyp=bioskey(0)) {
  217.                      case ESCKEY:     return (0);  /* decided not to play */
  218.                      case UPKEY:     state--; break;
  219.                      case DOWNKEY:     state++; break;
  220.                      default:       keyp=(keyp&0x00ff)-0x30;  /* check for # key */
  221.                                          if ((keyp>=0)&&(keyp<=9)) {
  222.                                             returnstate=SRANGE;
  223.                                             valptr=&ShotRange;
  224.                                             state=101;
  225.                                             gotoxy(X, YBASE+SRANGE);
  226.                                             CursorOn;
  227.                                          }
  228.                   };
  229.                   gotoxy(X-3, YBASE+SRANGE); printf("  ");
  230.                   break;
  231.  
  232.         case NTANKS:    gotoxy(X-3, YBASE+NTANKS); printf("->");
  233.                     switch(keyp=bioskey(0)) {
  234.                         case ESCKEY:    return(0);
  235.                         case UPKEY:        state--; break;
  236.                         case DOWNKEY:    state++; break;
  237.                         case 0x0332:            NumTanks=2;
  238.                                             for (i=0; i<NumTanks; i++) tank[i].score=0;
  239.                                             break;
  240.                         case 0x0433:            NumTanks=3;
  241.                                             for (i=0; i<NumTanks; i++) tank[i].score=0;
  242.                                             break;
  243.                         case SPACEKEY:
  244.                         case RETKEY:    NumTanks=((NumTanks-1)%(MAXNUMTANKS-1))+2;
  245.                                             for (i=0; i<NumTanks; i++) tank[i].score=0;
  246.  
  247.                   }
  248.  
  249.                   gotoxy(X-3, YBASE+NTANKS); printf("  ");
  250.                   break;
  251.  
  252.         case JOYTANK: gotoxy(X-3, YBASE+JOYTANK); printf("->");
  253.                     switch(bioskey(0)) {
  254.                         case ESCKEY:    return(0);
  255.                         case UPKEY:        state--; break;
  256.                         case DOWNKEY:    state++; break;
  257.                         case RETKEY:
  258.                         case SPACEKEY:   StickOnTank++;
  259.                                          if (StickOnTank=MAXNUMTANKS) StickOnTank=-1;
  260.                                           break;
  261.                     }
  262.                     gotoxy(X-3, YBASE+JOYTANK); printf("  ");
  263.                     break;
  264.  
  265.         case CALJOY: gotoxy(X-3, YBASE+CALJOY); printf("->");
  266.                     switch(bioskey(0)) {
  267.                         case ESCKEY:    return(0);
  268.                         case UPKEY:        state--; break;
  269.                         case DOWNKEY:    state++; break;
  270.                         case RETKEY:
  271.                         case SPACEKEY:  clrscr();
  272.                                         drawconfig();
  273.                                         printf("\n");
  274.                                         /* joystick routines */
  275.                                         JoyStickNumber=choose_stick();
  276.                                         set_thresh(JoyStickNumber, &joystick);
  277.                                         clrscr();
  278.                                         drawconfig();
  279.                                         break;
  280.                     }
  281.                     gotoxy(X-3, YBASE+CALJOY); printf("  ");
  282.                     break;
  283.  
  284.  
  285.         case SCONFIG:  gotoxy(X-3, YBASE+SCONFIG+1); printf("->");
  286.                     switch(bioskey(0)) {
  287.                         case ESCKEY:    return(0);
  288.                         case UPKEY:        state--; break;
  289.                         case DOWNKEY:    state++; break;
  290.                         case RETKEY:
  291.                         case SPACEKEY:   saveconfig(); break;
  292.                     }
  293.                     gotoxy(X-3, YBASE+SCONFIG+1); printf("  ");
  294.                     break;
  295.  
  296.         case DEFAULTS:    gotoxy(X-3,YBASE+DEFAULTS+1); printf("->");
  297.                     switch(bioskey(0)) {
  298.                         case ESCKEY:    return(0);
  299.                         case UPKEY:        state--; break;
  300.                   case DOWNKEY:  state=0; break;
  301.                         case RETKEY:
  302.                         case SPACEKEY:    GuidedShots=0;
  303.                                             TreesOn=0;
  304.                                             TankSpeed=DEFTANKSPEED;
  305.                                             ShotSpeed=DEFSHOTSPEED;
  306.                                             ShotRange=DEFSHOTRANGE;
  307.                                             NumTanks=DEFNUMTANKS;
  308.                                             break;
  309.                     }
  310.                     gotoxy(X-3, YBASE+DEFAULTS+1); printf("  ");
  311.                     break;
  312.  
  313.         case 101: /* keyp contains 0-9 */
  314.                           *valptr=keyp*100;
  315.                         state=102;
  316.                         gotoxy(wherex()+2, wherey());
  317.                         break;
  318.  
  319.         case 102: /* 2nd digit */
  320.                        keyp=(bioskey(0)&0x00ff)-0x30;
  321.                        if ((keyp>=0)&&(keyp<=9)) {
  322.                            *valptr += (keyp*10);
  323.                            state=103;
  324.                            gotoxy(wherex()+1, wherey());
  325.                        }
  326.                        break;
  327.  
  328.         case 103: /* 3rd digit */
  329.                      keyp=(bioskey(0)&0x00ff)-0x30;
  330.                      if ((keyp>=0)&&(keyp<=9)) {
  331.                          *valptr += keyp;
  332.                          state=returnstate;
  333.                          CursorOff;
  334.                      }
  335.                      break;
  336.  
  337.     } /* main switch */
  338.  } /* while(1) */
  339. }
  340.  
  341. void readconfig()
  342. /* requires: none
  343.  * ensures:  config is read from data file
  344.  */
  345. {
  346.     FILE *cfile;
  347.     char nextline[81];
  348.     char string[81];
  349.     int  newval;
  350.     int eqpos;
  351.  
  352.  /* parse config file */
  353.  if (cfile=fopen(CONFIGFILE,"rt")) {
  354.     while (fgets(nextline, 80, cfile)!=NULL) {
  355.         if (eqpos=strcspn(nextline,"=")) {
  356.             strncpy(string, nextline, eqpos);  /* contains the arguement */
  357.             string[eqpos]='\0';
  358.             strlwr(string);
  359.             newval=atoi(nextline+eqpos+1);
  360.             if (strcmp(string,"trees")==0)            TreesOn=newval;
  361.             else if (strcmp(string,"guided")==0)     GuidedShots=newval;
  362.             else if (strcmp(string,"shotrange")==0) ShotRange=newval;
  363.             else if (strcmp(string,"shotspeed")==0) ShotSpeed=newval;
  364.             else if (strcmp(string,"tankspeed")==0) TankSpeed=newval;
  365.             else if (strcmp(string,"numtanks")==0)  NumTanks=newval;
  366.  
  367.         }
  368.     }
  369.     fclose(cfile);
  370.  }
  371. }