Hilfe. Programmiere Snake und möchte spielstand speichern!!
-
Hi Leutz, ich bin noch ein n00b in c. Habe ein prob. In einer gruppe sollen wir snake (wie bei nokia handys) programmieren und ich hab die abteilung Spielstand speichern ( wie bei nokia handys, so das man ab dem zeitpunkt ab dem man aufgehört hat weiter spielen kann) abbekommen. Ich weis einfach nich wie ich das machen soll. Habe sehr grosse schierigkeiten mit c aber kann mir keine schlechte note mehr leisten. Darum möchte ich alle die mir helfen können bitten mir zu helfen. Ich bedanke mich schon mal im vorraus für jegliche hilfe stellung oder beispiele. Dank, euer neuer c n00b
-
Hier mal ein Beispiel das ich aus der Hilfe des Borland 3.1 Compilers kopiert habe:
/* Program to create backup of the AUTOEXEC.BAT file */ #include <stdio.h> int main(void) { FILE *in, *out; if ((in = fopen("\\AUTOEXEC.BAT", "rt")) == NULL) { fprintf(stderr, "Cannot open input file.\n"); return 1; } if ((out = fopen("\\AUTOEXEC.BAK", "wt")) == NULL) { fprintf(stderr, "Cannot open output file.\n"); return 1; } while (!feof(in)) fputc(fgetc(in), out); fclose(in); fclose(out); return 0; }
"wt" bedeutet - Datei zum schreiben öffnen. t steht für Textmodus. b steht für Binärmodus
-
DrZoidberg schrieb:
while (!feof(in))
Du jetzt auch?
"wt" bedeutet - Datei zum schreiben öffnen. t steht für Textmodus.
Das gibt es offiziell gar nicht.
-
Daniel E. schrieb:
DrZoidberg schrieb:
while (!feof(in))
Du jetzt auch?
-
Daniel E. schrieb:
DrZoidberg schrieb:
while (!feof(in))
Du jetzt auch?
DrZoidberg schrieb:
Hier mal ein Beispiel das ich aus der Hilfe des Borland 3.1 Compilers kopiert habe:
Ich glaube somit kann man es nochmal verzeihen
@ripper.de
Wo genau liegt dein Problem?
-
Jo thx, aber wie mache ich das wenn ich dem programm sagen will das es z.B. wenn ich auf die taste z drücke er das spiel dann weiter führt?
-
@AJ
ich möchte das man während das programm(spiel) ausgeführt wird man auf s drückt und der spielstand gespeichert wird und das programm beendet wird. so das, wenn man auf z drückt das spiel wieder weiter geführt wird. komme voll durcheinander
-
@ripper.de
Du hast doch geschrieben, dass du nur den Teil mit dem Speichern (und wahrscheinlich auch Laden) als Aufgabe bekommen hast. Das was du willst (mit der Tastatureingabe) ist, meines Erachtens, Sache der Person, die die Spielsteuerung umsetzen muss.
-
Mit den Funktionen aus der ANSI C Library kann man leider nicht direkt auf einen Tastendruck reagieren.
Frag mal deine Mitschüler welche Funktion die da benutzt haben. Bei vielen Compilern gibt es eine getch und eine kbhit Funktion, die man dort verwenden könnte.
-
@AJ
Ne das muss ich auch machen. Jeder macht seine steuerung selber (ich weis is scheiße so aber so haben wa es abgemacht).@ DrZoidberg
Jo das mit kbhit kenn ich aber was muss ich dadrunter schreiben damit die autoexec.bat geladen wird und das spiel an der gespeicherten stelle weiter macht?
-
ripper.de schrieb:
@AJ
Ne das muss ich auch machen. Jeder macht seine steuerung selber (ich weis is scheiße so aber so haben wa es abgemacht).Das ist aber nicht DEINE Steuerung. Deine Steuerung wirds in dem Moment, wo das Programm aus der Hauptschleife raus ist, nicht vorher.
-
ripper.de schrieb:
Jo das mit kbhit kenn ich aber was muss ich dadrunter schreiben damit die autoexec.bat geladen wird und das spiel an der gespeicherten stelle weiter macht?
Wieso autoexec.bat? Nenn die Datei doch "Spielstand" oder "Snake.save" oder irgendwas anderes.
int main() { char c; ... if(kbhit) { c=getch(); if(c='s') speichern(); } } int speichern() { FILE *out; if ((out = fopen("spielstand", "wb")) == NULL) { printf("Fehler. Kann Datei nicht öffnen.\n"); return 1; } fwrite(...); // sieh dir die Dokumentation zu fwrite und fread an }
-
@DrZoidberg
Ist zwar kleinlich, aber if(s='s') ist falsch@ripper.de
Da habt ihr es euch aber extrem schwer gemacht, wenn jeder die Tastatursteuerung extra macht. Das wird beim Zusammensetzen des Ganzen ein heilloses Chaos geben. Besonders weil es bei jedem etwas anders aussehn wird.Normalerweise sollte man eine Hauptschleife haben, in der alles durch "Module" geregelt wird. In etwa so:
... while(!ende) { //Funktion für die Bewegung ... //Funktion für die Ausgabe ... //Benutzereingabe if(kbhit()) //Wenn eine Taste gedrückt wurde { //Taste auswerten switch(getch()) { case 0: //Sondertasten (z. B. Steuerung über die Cursortasten) //Code der Sondertaste auswerten switch(getch()) { ... } break; case 's': case 'S': //Funktion zum Speichern ... break; case 'l': case 'L': //Funktion zum Laden ... break; ... } } //ENDE if(kbhit()) } //ENDE while(!ende) ...
PS: kbhit() und getch() sind nicht ANSI-C Standard
-
und wie lade ich jetzt die gespeicherte datei?
-
Hi!
Mit fopen("spielstand", "rb"). Die Option rb greift lesend auf eine Binärdatei zu. Danach verwendest du fread.
Code-Hacker
-
@ripper.de
Am besten schaust du dir folgende Funktionen an:- fopen() zum Öffnen von Dateien
- fprintf(), fputs(), fwrite() zum Schreiben von Dateien
- fscanf(), fgets(), fread() zum Lesen von Dateien
- fclose() zum Schließen von DateienWeißt du überhaupt, in welcher Form du die Daten zum Speichern erhältst? (Ich hoffe es ist eine Struktur)