📄 score.c
字号:
/* * CS 453 - Final project : An OpenGL version of the pegboard game IQ * Due : June 5, 1997 * Author : Kiri Wagstaff * * File : score.c * Description : Maintains and adds to highscores. * */#include "gliq.h"int scores[10];int totpegs[10];char inits[10][4];int minscore=0;int minpegs=100;char newinits[3];int numentered=0;int written=0;float color1=1.0, color2=1.0, color3=0.0;int lasthigh=-1;void highscore(void);void readscores(void);void showhighscores(void);void keyscores(unsigned char key, int x, int y);void highscore(void){ int i, j; int width = glutGet(GLUT_WINDOW_WIDTH); int height = glutGet(GLUT_WINDOW_HEIGHT); FILE* fp; /* Prompt for initials */ glColor3f(1.0, 1.0, 0.0); /* yellow */ text(0.08*width, 0.85*height, 0.1*height, "CONGRATULATIONS!"); glColor3f(1.0, 0.0, 0.0); /* red */ text(0.05*width, 0.7*height, 0.07*height, "You made it into the top 10!"); glColor3f(1.0, 1.0, 0.0); /* yellow */ text(0.2*width, 0.55*height, 0.07*height, "%02d remaining of %02d", pegs, totalpegs); glColor3f(0.0, 0.0, 1.0); /* blue */ text(0.13*width, 0.4*height, 0.07*height, "Please enter your initials:"); /* Display what's been entered */ glColor3f(color1, color2, color3); for (i=0; i<numentered; i++) text((0.4+i/10.0)*width, 0.2*height, 0.2*height, "%c", newinits[i]); if (!written && numentered == 3) {#if 0// printf("Saving to file scores.txt...\n");#endif for (i=0; i<10; i++) if (scores[i]==-1 || (pegs<scores[i] || (pegs==scores[i] && totalpegs>totpegs[i]))) break; for (j=9; j>i; j--) { if (scores[j-1]==-1 || scores[j-1]==0) continue;#if 0// printf("compare : ");// printf(" %s %02d %02d\n", inits[j], scores[j], totpegs[j]);#endif scores[j] = scores[j-1]; totpegs[j] = totpegs[j-1]; inits[j][0] = inits[j-1][0]; inits[j][1] = inits[j-1][1]; inits[j][2] = inits[j-1][2]; inits[j][3] = inits[j-1][3];#if 0// printf("with : ");// printf(" %s %02d %02d\n", inits[j], scores[j], totpegs[j]);#endif }#if 0// printf("Storing in index %d\n", i);#endif lasthigh=i; scores[i] = pegs; totpegs[i] = totalpegs; inits[i][0] = newinits[0]; inits[i][1] = newinits[1]; inits[i][2] = newinits[2]; inits[i][3] = 0; /* get the new min */ for (j=9; j>0; j--) if (scores[j]==-1 || scores[j]==0) continue; else { minscore = scores[j]; minpegs = totpegs[j]; break; }#if 0// printf("New minscore %d, minpegs %d\n", minscore, minpegs);#endif fp = fopen("scores.txt", "w"); if (!fp) { printf("Could not open scores.txt, exiting.\n"); exit(1); } for (i=0; i<10; i++) if (scores[i]!=-1 && scores[i]!=0) fprintf(fp, "%02d %02d %s\n", scores[i], totpegs[i], inits[i]); else break; written=1; } }void readscores(void){ int i; FILE* fp; newinits[0] = 0; newinits[1] = 0; newinits[2] = 0; /* Read in the current high scores */ fp = fopen("scores.txt", "r"); if (!fp) { printf("Could not open scores.txt, exiting.\n"); exit(1); } for (i=0; i<10; i++) { /* Pegs remaining */ if ((fscanf(fp, "%d", &(scores[i])))!=1) { scores[i] = -1; break; } /* Total pegs */ if ((fscanf(fp, "%d", &(totpegs[i])))!=1) { totpegs[i] = -1; break; } fscanf(fp, "%s", inits[i]);#if 0// printf("read %s\n", inits[i]);#endif } if (i>0) { minscore = scores[i-1]; minpegs = totpegs[i-1]; } if (i<10) { minscore=100; minpegs=0; }#if 0// printf("Minscore is %d, minpegs is %d\n", minscore, minpegs);#endif}void showhighscores(void){ int i; int width = glutGet(GLUT_WINDOW_WIDTH); int height = glutGet(GLUT_WINDOW_HEIGHT); /* Display the current highs */ glColor3f(1.0, 1.0, 0.0); /* yellow */ text(0.15*width, 0.9*height, 0.07*height, "Initials Score Out of"); for (i=0; i<10; i++) { if (i>=1) glColor3f(1.0, 0.0, 0.0); /* red */ else if (i>=5) glColor3f(0.0, 0.0, 1.0); /* blue */ if (scores[i]>0) { if (i==lasthigh) glColor3f(color1, color2, color3); text(0.15*width, (8.0-0.65*i)/10.0*height, 0.05*height, " %s", inits[i]); text(0.48*width, (8.0-0.65*i)/10.0*height, 0.05*height, "%02d", scores[i]); text(0.75*width, (8.0-0.65*i)/10.0*height, 0.05*height, "%02d", totpegs[i]); } } glColor3f(color1, color2, color3); text(0.15*width, 0.1*height, 0.07*height, "Click to continue...");}/* ARGSUSED1 */void keyscores(unsigned char key, int x, int y){#if 0 if (key == '\r') /*return*/ { } else if (key == '\b') /*backspace*/ { }#endif if (numentered>=3) return; newinits[numentered] = key; numentered++;#if 0// printf("Read a %c\n", key);#endif glutPostRedisplay();}void idlescore(void){ static int hscolor=0; switch(hscolor) { case 0: color1=1.0; color2=0.0; color3=0.0; hscolor++; break; case 1: color1=0.5; color2=0.5; color3=0.0; hscolor++; break; case 2: color1=1.0; color2=1.0; color3=0.0; hscolor++; break; case 3: color1=0.0; color2=1.0; color3=0.0; hscolor++; break; case 4: color1=0.0; color2=0.0; color3=1.0; hscolor++; break; case 5: color1=1.0; color2=0.0; color3=1.0; hscolor=0; break; } if (curstate==HIGHSC) highscore(); else if (curstate==VIEWSCORES) showhighscores(); else { printf("Unknown state %d, exiting\n", curstate); exit(1); } glutPostRedisplay();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -