score.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:6k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /*  
  2.  *  CS 453 - Final project : An OpenGL version of the pegboard game IQ
  3.  *  Due : June 5, 1997
  4.  *  Author : Kiri Wagstaff
  5.  *
  6.  *  File : score.c
  7.  *  Description : Maintains and adds to highscores.
  8.  *
  9.  */
  10. #include "gliq.h"
  11. int scores[10];
  12. int totpegs[10];
  13. char inits[10][4];
  14. int minscore=0;
  15. int minpegs=100;
  16. char newinits[3];
  17. int numentered=0;
  18. int written=0;
  19. float color1=1.0, color2=1.0, color3=0.0;
  20. int lasthigh=-1;
  21. void highscore(void);
  22. void readscores(void);
  23. void showhighscores(void);
  24. void keyscores(unsigned char key, int x, int y);
  25. void highscore(void)
  26. {
  27.   int i, j;
  28.   int width = glutGet(GLUT_WINDOW_WIDTH);
  29.   int height = glutGet(GLUT_WINDOW_HEIGHT);
  30.   FILE* fp;
  31.   
  32.   /* Prompt for initials */
  33.   glColor3f(1.0, 1.0, 0.0); /* yellow */
  34.   text(0.08*width, 0.85*height, 0.1*height, "CONGRATULATIONS!");
  35.   glColor3f(1.0, 0.0, 0.0); /* red */
  36.   text(0.05*width, 0.7*height, 0.07*height, "You made it into the top 10!");
  37.   glColor3f(1.0, 1.0, 0.0); /* yellow */
  38.   text(0.2*width, 0.55*height, 0.07*height, "%02d remaining of %02d",
  39.        pegs, totalpegs);
  40.   glColor3f(0.0, 0.0, 1.0); /* blue */
  41.   text(0.13*width, 0.4*height, 0.07*height, "Please enter your initials:");
  42.   /* Display what's been entered */
  43.   glColor3f(color1, color2, color3);
  44.   for (i=0; i<numentered; i++)
  45.     text((0.4+i/10.0)*width, 0.2*height, 0.2*height, "%c", newinits[i]);
  46.   if (!written && numentered == 3)
  47.     {
  48. #if 0
  49. //      printf("Saving to file scores.txt...n");
  50. #endif
  51.       for (i=0; i<10; i++)
  52. if (scores[i]==-1 || 
  53.     (pegs<scores[i] || (pegs==scores[i] && totalpegs>totpegs[i])))
  54.   break;
  55.       for (j=9; j>i; j--)
  56. {
  57.   if (scores[j-1]==-1 || scores[j-1]==0)
  58.     continue;
  59. #if 0
  60. //   printf("compare : ");
  61. //   printf(" %s      %02d     %02dn", inits[j], scores[j], totpegs[j]);
  62. #endif
  63.   scores[j] = scores[j-1];
  64.   totpegs[j] = totpegs[j-1];
  65.   inits[j][0] = inits[j-1][0];
  66.   inits[j][1] = inits[j-1][1];
  67.   inits[j][2] = inits[j-1][2];
  68.   inits[j][3] = inits[j-1][3];
  69. #if 0
  70. //   printf("with : ");
  71. //   printf(" %s      %02d     %02dn", inits[j], scores[j], totpegs[j]);
  72. #endif
  73. }
  74. #if 0
  75. //      printf("Storing in index %dn", i);
  76. #endif
  77.       lasthigh=i;
  78.       scores[i] = pegs;
  79.       totpegs[i] = totalpegs;
  80.       inits[i][0] = newinits[0];
  81.       inits[i][1] = newinits[1];
  82.       inits[i][2] = newinits[2];
  83.       inits[i][3] = 0;
  84.       /* get the new min */
  85.       for (j=9; j>0; j--)
  86. if (scores[j]==-1 || scores[j]==0)
  87.   continue;
  88. else
  89.   {
  90.     minscore = scores[j];
  91.     minpegs = totpegs[j];
  92.     break;
  93.   }
  94. #if 0
  95. //      printf("New minscore %d, minpegs %dn", minscore, minpegs);
  96. #endif
  97.       fp = fopen("scores.txt", "w");
  98.       if (!fp)
  99. {
  100.   printf("Could not open scores.txt, exiting.n");
  101.   exit(1);
  102. }
  103.       for (i=0; i<10; i++)
  104. if (scores[i]!=-1 && scores[i]!=0)
  105.   fprintf(fp, "%02d  %02d  %sn", scores[i], totpegs[i], inits[i]);
  106. else
  107.   break;
  108.       written=1;
  109.     }
  110.       
  111. }
  112. void readscores(void)
  113. {
  114.   int i;
  115.   FILE* fp;
  116.   
  117.   newinits[0] = 0;
  118.   newinits[1] = 0;
  119.   newinits[2] = 0;
  120.   
  121.   /* Read in the current high scores */
  122.   fp = fopen("scores.txt", "r");
  123.   if (!fp)
  124.     {
  125.       printf("Could not open scores.txt, exiting.n");
  126.       exit(1);
  127.     }
  128.   for (i=0; i<10; i++)
  129.     {
  130.        /* Pegs remaining */
  131.       if ((fscanf(fp, "%d", &(scores[i])))!=1)
  132. {
  133.   scores[i] = -1;
  134.   break;
  135. }
  136.       /* Total pegs */
  137.       if ((fscanf(fp, "%d", &(totpegs[i])))!=1)
  138. {
  139.   totpegs[i] = -1;
  140.   break;
  141. }
  142.       fscanf(fp, "%s", inits[i]);
  143. #if 0
  144. //      printf("read %sn", inits[i]);
  145. #endif
  146.     }
  147.   if (i>0)
  148.     {
  149.       minscore = scores[i-1];
  150.       minpegs = totpegs[i-1];
  151.     }
  152.   
  153.   if (i<10)
  154.     {
  155.       minscore=100;
  156.       minpegs=0;
  157.     }
  158. #if 0
  159. //  printf("Minscore is %d, minpegs is %dn", minscore, minpegs);
  160. #endif
  161. }
  162. void showhighscores(void)
  163. {
  164.   int i;
  165.   int width = glutGet(GLUT_WINDOW_WIDTH);
  166.   int height = glutGet(GLUT_WINDOW_HEIGHT);
  167.   
  168.   /* Display the current highs */
  169.   glColor3f(1.0, 1.0, 0.0);  /* yellow */
  170.   text(0.15*width, 0.9*height, 0.07*height, "Initials  Score  Out of");
  171.   for (i=0; i<10; i++)
  172.     {
  173.       if (i>=1)
  174. glColor3f(1.0, 0.0, 0.0); /* red */
  175.       else if (i>=5)
  176. glColor3f(0.0, 0.0, 1.0); /* blue */
  177.       if (scores[i]>0)
  178. {
  179.   if (i==lasthigh)
  180.     glColor3f(color1, color2, color3);
  181.   text(0.15*width, (8.0-0.65*i)/10.0*height, 0.05*height,
  182.        " %s", inits[i]);
  183.   text(0.48*width, (8.0-0.65*i)/10.0*height, 0.05*height,
  184.        "%02d", scores[i]);
  185.   text(0.75*width, (8.0-0.65*i)/10.0*height, 0.05*height,
  186.        "%02d", totpegs[i]);
  187. }
  188.    }
  189.   glColor3f(color1, color2, color3);
  190.   text(0.15*width, 0.1*height, 0.07*height, "Click to continue...");
  191. }
  192. /* ARGSUSED1 */
  193. void keyscores(unsigned char key, int x, int y)
  194. {
  195. #if 0
  196.   if (key == 'r') /*return*/ {
  197.   } else if (key == 'b') /*backspace*/ {
  198.   }
  199. #endif
  200.   if (numentered>=3)
  201.     return;
  202.   newinits[numentered] = key;
  203.   numentered++;
  204. #if 0
  205. //  printf("Read a %cn", key);
  206. #endif
  207.   glutPostRedisplay();
  208. }
  209. void idlescore(void)
  210. {
  211.   static int hscolor=0;
  212.   switch(hscolor)
  213.     {
  214.     case 0:
  215.       color1=1.0;
  216.       color2=0.0;
  217.       color3=0.0;
  218.       hscolor++;
  219.       break;
  220.     case 1:
  221.       color1=0.5;
  222.       color2=0.5;
  223.       color3=0.0;
  224.       hscolor++;
  225.       break;
  226.     case 2:
  227.       color1=1.0;
  228.       color2=1.0;
  229.       color3=0.0;
  230.       hscolor++;
  231.       break;
  232.     case 3:
  233.       color1=0.0;
  234.       color2=1.0;
  235.       color3=0.0;
  236.       hscolor++;
  237.       break;
  238.     case 4:
  239.       color1=0.0;
  240.       color2=0.0;
  241.       color3=1.0;
  242.       hscolor++;
  243.       break;
  244.     case 5:
  245.       color1=1.0;
  246.       color2=0.0;
  247.       color3=1.0;
  248.       hscolor=0;
  249.       break;
  250.     }
  251.   if (curstate==HIGHSC)
  252.     highscore();
  253.   else if (curstate==VIEWSCORES)
  254.     showhighscores();
  255.   else
  256.     {
  257.       printf("Unknown state %d, exitingn", curstate);
  258.       exit(1);
  259.     }
  260.   glutPostRedisplay();
  261. }