Hilfe. Programmiere Snake und möchte spielstand speichern!!



  • @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 Dateien

    Weißt du überhaupt, in welcher Form du die Daten zum Speichern erhältst? (Ich hoffe es ist eine Struktur)


Anmelden zum Antworten