#include #include "svmwgraph/svmwgraph.h" #include "tb1_state.h" #include "graphic_tools.h" #include "tblib.h" #include /* For usleep */ #include /* For strncpy */ /* Yes these routines are simplistic, but they seemed amazingly */ /* clever when I came up with them 6 years ago. */ int showhiscore(tb1_state *game_state,int showchart,int return_highest) { FILE *hilist; char tempstr[10]; int i; char names[10][25]; int scores[10]; hilist=fopen(tb1_data_file("hiscore.tb1",game_state->path_to_data),"r"); if (hilist==NULL) { printf("Error! can't open high score file!\n"); return 0; } for(i=0;i<10;i++) { fgets(names[i],11,hilist); /* There has to be a cleaner way of getting rid of that '\n' */ names[i][strlen(names[i])-1]='\0'; } for (i=0;i<10;i++) fscanf(hilist,"%i",&scores[i]); fclose(hilist); if (!showchart) { if (return_highest) return scores[0]; else return scores[9]; } if (showchart) { vmwDrawBox(45,40,240,120,7,game_state->virtual_1); coolbox(45,40,285,160,1,game_state->virtual_1); for(i=0;i<10;i++) vmwTextXY(names[i],51,46+(i*10),9,7,1,game_state->graph_state->default_font,game_state->virtual_1); for(i=0;i<10;i++){ sprintf(tempstr,"%i",scores[i]); vmwTextXY(tempstr,181,46+(i*10),9,7,1,game_state->graph_state->default_font,game_state->virtual_1); } vmwBlitMemToDisplay(game_state->graph_state,game_state->virtual_1); while(vmwGetInput()==0) usleep(100); } return 0; } typedef struct { char name[12]; int score; } vmwHighScore; void write_hs_list(tb1_state *game_state,int score,char *hiname,int wipe) { int i,place,in_place; FILE *hilist; vmwHighScore old_list[12]; vmwHighScore new_list[12]; hilist=fopen(tb1_data_file("hiscore.tb1",game_state->path_to_data),"r"); for(i=0;i<10;i++) { fgets(old_list[i].name,12,hilist); old_list[i].name[strlen(old_list[i].name)-1]='\0'; } for (i=0;i<10;i++) fscanf(hilist,"%i",&old_list[i].score); fclose(hilist); place=0; i=0; in_place=0; while (i<10) { if ((score>old_list[place].score) && (in_place==0)) { strncpy(new_list[i].name,hiname,10); new_list[i].score=score; i++; in_place=1; } if (i<10) { strncpy(new_list[i].name,old_list[place].name,10); new_list[i].score=old_list[place].score; } place++; i++; } // if (!read_only_mode) { if ((hilist=fopen(tb1_data_file("hiscore.tb1", game_state->path_to_data),"w"))==NULL) { printf("Error opening high score file!\n"); return; } if (wipe) { fprintf(hilist,"Vince\nChipper\nHairold\nLeonard\n" "Susie\nJim\nPete\nBrigid\nLizann\nMarie\n" "5000\n4500\n4000\n3500\n3000\n" "2500\n2000\n1500\n1000\n500\n"); } else { for(i=0;i<10;i++) fprintf(hilist,"%s\n",new_list[i].name); for(i=0;i<10;i++) fprintf(hilist,"%i\n",new_list[i].score); } fclose(hilist); // } }