home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 7 Games / 07-Games.zip / MVTREK.ZIP / HISCORE.C next >
C/C++ Source or Header  |  1989-12-26  |  2KB  |  128 lines

  1. #include    "vtrek.h"
  2.  
  3.  
  4. #define    SCOREFILE    "vtrek.scr"
  5.  
  6. /*
  7.  * score -- figure score and post it.
  8.  */
  9.     struct sc_ent {
  10.     char sc_name[80];
  11.     char sc_ship[80];
  12.     int sc_level;
  13.     } top_ten[10];
  14.  
  15. score(win)
  16. int    win;
  17. {
  18.     FILE    *fp;
  19.     int    i;
  20.     int    j;
  21.     int    killrate;
  22.     float    rate;
  23.  
  24.     /*
  25.      * Open file and read list
  26.      */
  27.     if ((fp = fopen(SCOREFILE, "r+")) == (FILE *)NULL)
  28.     {
  29.         fprintf(stderr, "Cannot access scorefile\n");
  30.         return;
  31.     }
  32.     for (i = 0; i < 10; i++)
  33.     {
  34.     for (j = 0; j < 80 ; j++)
  35.     {
  36.         top_ten[i].sc_name[j] = ' ';
  37.         top_ten[i].sc_ship[j] = ' ';
  38.     }
  39.     top_ten[i].sc_level = 0;
  40.     }
  41.  
  42.     scload(fp, top_ten);
  43.     /*
  44.      * Insert her in list if need be
  45.      */
  46.     if (win > 0)
  47.     {
  48.         if (stardate == begdate)
  49.             killrate = 0;
  50.         else
  51.         {
  52.             rate = (begkling - numkling)/(stardate - begdate);
  53.             killrate = (int)(rate * 500 * (skill + 1)/2);
  54.         }
  55.  
  56.         for (i = 0; i < 10; i++)
  57.             if (killrate > top_ten[i].sc_level) break;
  58.         if (i < 10)
  59.         {
  60.             for (j = 9; j > i; j--)
  61.                 top_ten[j] = top_ten[j-1];
  62.             top_ten[i].sc_level = killrate;
  63.             strcpy(top_ten[i].sc_name, captain);
  64.             strcpy(top_ten[i].sc_ship, shipname);
  65.          }
  66.     }
  67.  
  68.     /*
  69.      * Print the list
  70.      */
  71.     printf("\nTop Ten Trekkies\nScore\t\tName\t\tShip\n");
  72.     for (i = 0; i < 10; i++)
  73.     if (top_ten[i].sc_level)
  74.         printf("%8d\t%-16s%s\n",
  75.             top_ten[i].sc_level,
  76.             top_ten[i].sc_name,
  77.             top_ten[i].sc_ship);
  78.     if (win > 0)
  79.     {
  80.         fseek(fp, 0L, 0);
  81.         scdump(fp, top_ten);
  82.     }
  83.     fclose(fp);
  84. }
  85.  
  86. scload(fp, rec)
  87. FILE    *fp;
  88. struct sc_ent    rec[];
  89. {
  90.     int    i;
  91.  
  92.     i  = 0;
  93.     while
  94.     (
  95.         fscanf
  96.         (
  97.             fp,
  98.             "%d %s %s",
  99.             &(rec[i].sc_level),
  100.             rec[i].sc_name,
  101.             rec[i].sc_ship
  102.         ) != EOF &&
  103.         i < 10
  104.     )
  105.         i++;
  106. }
  107.  
  108. scdump(fp, rec)
  109. FILE    *fp;
  110. struct sc_ent    rec[];
  111. {
  112.     int    i;
  113.  
  114.     i = 0;
  115.     while (i < 10 && rec[i].sc_level > 0)
  116.     {
  117.         fprintf
  118.         (
  119.             fp,
  120.             "%d %s %s\n",
  121.             rec[i].sc_level,
  122.             rec[i].sc_name,
  123.             rec[i].sc_ship
  124.         );
  125.         i++;
  126.     }
  127. }
  128.