#include #include #include #include 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); }