#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct{ // tein structil tiedot ku sil saa vähän helpommin filuihin
char nimi[40];
int score;
}scoreja[10];
int hiscore(int pisteet);
int tarkistus(int a);
void ekakerta(void);
void luku();
int main(void){ //testimaini
int a = 2;
hiscore(a);
getch();
return(0);
}
int hiscore(int pisteet){
char uusinimi[40];
int uusi,palautus;
uusi= tarkistus(pisteet); //tarkitusfunktio
if(uusi<10){ // jos uusi hiscore
FILE *tiedosto;
tiedosto = fopen("HISCORE.DAT","rb+");
fread(&scoreja,sizeof(scoreja),10,tiedosto);
printf("Onneksi olkoon uusi HISCORE!!! Syötä nimesi: ");
scanf("%s",uusinimi); //pelaajan nimi
for(int k=9;k>uusi;k--){ //pistetään edelliset nimet yks slotti eteenpäin jotta saadaan uusi nimi ja score väliin
strcpy(scoreja[k].nimi,scoreja[k-1].nimi);
scoreja[k].score = scoreja[k-1].score;
}
strcpy(scoreja[uusi].nimi,uusinimi);
scoreja[uusi].score=pisteet;
tiedosto = fopen("HISCORE.DAT","wb+");
fwrite(&scoreja,sizeof(scoreja),10,tiedosto);//kirjotetaan uudet tiedot
luku();
fclose(tiedosto);
palautus = 1;
}
else{
printf("Ei uutta hiscorea\n\n");
luku();
palautus = 0;
}
return(palautus); //palauttaa arvon 1 jos uusi highscore ja 0 jos ei uutta highscorea
}
void luku(){
FILE *tiedosto;
tiedosto = fopen("HISCORE.DAT","ab+");
fread(&scoreja,sizeof(scoreja),10,tiedosto);
printf("HISCORELISTA: \n\n\n");
for(int i=0;i<10;i++){
printf("%d.\t %s :%d\n",i+1,scoreja[i].nimi,scoreja[i].score);
}
getch();
}
int tarkistus(int a){ //kattoo eka et onko tiedostoa hiscore.dat ees olemassa jos ei niin kysyy käyttäjältä luodaanko uusi
int i;
FILE *tiedosto;
tiedosto = fopen("HISCORE.DAT","rb+");
if(tiedosto == NULL){
printf("Tiedoston avaus ei onnistunu. Luodaan uusi hiscore.dat");
ekakerta(); //käy ekakerta funktios luomassa uuden tiedoston
}
tiedosto = fopen("HISCORE.DAT","rb+");
fread(&scoreja,sizeof(scoreja),10,tiedosto);
for(i=0;i<10;i++){ // tarkistetaan onko suurempi kuin yksikään hiscorelistassa
if(scoreja[i].score < a){
a=i;
fclose(tiedosto);
break; //hypätään loopista puis jos on uus hiscore
}
else{
a=10; //palautetaan 10 jos ei uutta hiscorea
}
fclose(tiedosto);
}
return(a); //returnataan löytyikö uus hiscore ja monennessa slotissa se on
}
void ekakerta(void){ //luo 10 kertaa eikukaan 0 pisteellä hiscore.dattiin
FILE *tiedosto;
tiedosto = fopen("HISCORE.DAT","ab+");
for(int i = 0;i<10;i++){
strcpy(scoreja[i].nimi,"eikukaan");
scoreja[i].score = 0;
}
fwrite(&scoreja,sizeof(scoreja),10,tiedosto);
fclose(tiedosto);
}