流れは現在 タイトル→ゲーム開始→ゲームクリア→タイムランキングの表示→タイトルとループになっています。
プログラムを落とさないでゲームを続けるとタイムランキングは正常に表示されるのですが、一旦プログラムを落として起動するとタイムランキングの値がおかしくなってしまいます。
1位が1秒
2位が0秒
3位が0秒
というふうになってしまいます。
Ranking_Load()をwinmainのウィンドウ生成時に呼び出し、
Ranking_saveはゲームクリア画面で呼び出しています。
Ranking.h
#include <stdio.h>
#include <windows.h>
extern int r_time[5]; //ランキングのタイム
extern int now_time[5]; //現在プレイしているタイム
static char FileName[] = "Ranking.txt"; //ランキングテキスト
void Ranking_Load();
void Ranking_save();
Ranking.cpp
void Ranking_Load() //ランキング読み込み
{
FILE *fp;
int i, j, tmp;
if ((fp = fopen(FileName, "r")) == NULL){
for (i = 0; i < 3; i++){
r_time[i] = 999;
}
}else{
for (i = 0; i < 3; i++){
fscanf(fp, "%d", &r_time[i]); //読み込み
}
fclose(fp);
}
return;
}
void Ranking_save() //ランキング保存
{
FILE *fp;
TCHAR mes[80];
int i,tmp,tmp2;
if ((fp = fopen(FileName, "w")) == NULL)
{
wsprintf(mes, TEXT("データファイルのオープンに失敗しました。保存を中止しました。\n"));
OutputDebugString(mes);
return;
}
if (r_time[0] > S_time){ //ランキング1位より現在プレイしてる人のほうが早ければ
tmp = r_time[0];
r_time[0] = S_time; //現在の1位を上書き
tmp2 = r_time[1];
r_time[1] = tmp; //ランキング1位の人を2位に下げる
r_time[2] = tmp2; //ランキング2位の人を3位に下げる
}
else if (r_time[1] > S_time && S_time >r_time[0]){ //ランキング2位より現在プレイしてる人のほうが高ければ
tmp = r_time[1];
r_time[1] = S_time;
r_time[2] = tmp;
}
else if (r_time[2] > S_time && S_time >r_time[1]){
r_time[2] = S_time;
}
fprintf(fp, "1位 %d秒\n", r_time[0]);
fprintf(fp, "2位 %d秒\n", r_time[1]);
fprintf(fp, "3位 %d秒\n", r_time[2]);
fclose(fp);
}