In den letzten Tagen hab ich wieder ein bisschen bei EatTheBlocks weiterprogrammiert. Schließlich hab ich es sogar unter Windows zum Laufen bekommen

Natürlich wollte ichs dann mal unter BSD versuchen. Also die Pakete für SDL und SDL_ttf runtergeladen, kopiert und installiert.
Das Programm erfolgreich mit gmake kompiliert. Es lässt sich auch problemlos spielen. Wenn ich in der Liste mit den Punkten aber mehr als einen Eintrag habe, wird der Rest einfach weggelassen.
Durch die Ausgabe des Return-Wertes von fwrite habe ich gemerkt, dass ich nicht in das File schreiben kann (Return-Wert = 0, normalerweise Anzahl der erfolgreich geschriebenen Elemente). D.h. ich kann zwar das File erstellen und was reinschreiben, aber nichts nachträglich einfügen.
So sieht die gekürzte Version des Codes aus:
Code: Alles auswählen
if ((scorelist = fopen (".scores", "r + b")))
{
nr = fread (scoresfromlist, sizeof (highscoreinfo), MAXSCORES, scorelist);
rewind (scorelist);
for (i = 0; i < MAXSCORES && !entry; i++)
{
if (reachedscore > scoresfromlist[i].score)
{
getname (newscore.name);
newscore.score = reachedscore;
entryscore (i, nr, newscore, scoresfromlist);
newpos = i;
printf ("old nr of scores: %d\n", nr);
if (nr < MAXSCORES)
nr++;
printf ("new nr of scores: %d\n", nr);
int succ;
succ = fwrite (scoresfromlist, sizeof (highscoreinfo), nr, scorelist);
printf ("%d scores successfully written to file\n", succ); // 0
entry = 1;
printf ("score entered\n");
}
else if (i == nr && nr != MAXSCORES)
{
getname (newscore.name);
newscore.score = reachedscore;
scorecpy (&scoresfromlist[nr], newscore);
newpos = i;
printf ("old nr of scores: %d\n", nr);
nr++;
printf ("new nr of scores: %d\n", nr);
int succ;
succ = fwrite (scoresfromlist, sizeof (highscoreinfo), nr, scorelist);
printf ("%d scores successfully written to file\n", succ); // 0
entry = 1;
printf ("score appended\n");
}
}
fclose (scorelist);
printf ("new score at: %d\n", newpos);
draw_highscorelist (newpos);
}
else if ((scorelist = fopen (".scores", "wb")))
{
[...]
}
Ich bin ratlos... Hätte es unter Windows auch nicht funktioniert hätte ich auf einen Fehler im Programm getippt, aber so...
