Highscore, aber wie?



  • Also ich habe ein Panel angelegt, und darauf sind ein label ein edit feld und 2 buttons.

    http://stetze-online.de/panel.jpg

    1. Wie bekomm ich hin das wenn ich einen Namen eingegeben habe und enter drücke das das Spiel startet?

    so irgendwie??

    if ((Key==VK_Return)&&!(edt_name->Caption==""))
    {
          name->Visible=false;
          hintergrundbild->Visible=false;
          street->Picture->LoadFromFile("Images/street.bmp");
          car->Visible=true;
          timer1->Enabled=true;
          timer2->Enabled=true;
          timer3->Enabled=true;
          timer4->Enabled=true;
          Image1->Visible=true;
          Image2->Visible=true;
          Image3->Visible=true;
          Image4->Visible=true;
          Image5->Visible=true;
          Image6->Visible=true;
          Image7->Visible=true;
          Image8->Visible=true;
          Image9->Visible=true;
          Image10->Visible=true;
          Image11->Visible=true;
          Image12->Visible=true;
          Image13->Visible=true;
          Image14->Visible=true;
          Image15->Visible=true;
          Image16->Visible=true;
          Image17->Visible=true;
          Image18->Visible=true;
          Image19->Visible=true;
          Image20->Visible=true;
          Image21->Visible=true;
          Image22->Visible=true;
          Image23->Visible=true;
          Image24->Visible=true;
    }
    

    Funktioniert aber nicht, weiß net warum...

    2. Highscore

    Ich will das der Name der eingegeben wird in eine Textdatei gespeichert wird... Textdatei.txt = Name des Benutzers.txt und wenn das spiel fertig ist das die Punkte dann in die Textdatei geschrieben werden... und das die textdatei unter highscore anzeigen irgendwie dargestellt wird...

    http://stetze-online.de/highscore.jpg



  • Hallo

    Funktioniert nicht ist keine gute Fehlererklärung...

    Zur Highscore:

    Du kannst alle Namen und die jeweiligen Punkte in eine Textdatei schreiben und musst diese dann eben parsen. Was ist dabei genau dein Problem? Weißt du, wie man mit Dateien umgeht?

    chrische



  • Es macht gar nichts wenn ich Enter drücke 😞
    ....

    Wenn ich ehrlich bin fängt es schon an wenn ich den Namen auslesen muss und als txt speichern... Hab davon keine Ahnung 😞



  • Ach stetze...

    irgendwie werd' ich schon wieder den Eindruck nicht los, dass wir dein Spiel schreiben sollen!

    crische5 hat alle nötigen Hinweise zum Thema Highscore gegeben, den Rest kann man sich wirklich im Netz bzw sogar hier im Forum zusammensuchen.

    zum Thema Enter: Es wär übrigens ganz sinnvoll, wenn du den Kopf der Methode immer mit postest, aus der dein Codeausschnitt stammt. Ein Hinweis:

    // Alt:
    if ((Key==VK_Return)&&!(edt_name->Caption==""))
    // Neu:
    if ((Key==VK_Return)&&(edt_name->Caption!=""))
    

    MfG



  • Kolumbus schrieb:

    Ach stetze...

    irgendwie werd' ich schon wieder den Eindruck nicht los, dass wir dein Spiel schreiben sollen!

    crische5 hat alle nötigen Hinweise zum Thema Highscore gegeben, den Rest kann man sich wirklich im Netz bzw sogar hier im Forum zusammensuchen.

    zum Thema Enter: Es wär übrigens ganz sinnvoll, wenn du den Kopf der Methode immer mit postest, aus der dein Codeausschnitt stammt. Ein Hinweis:

    // Alt:
    if ((Key==VK_Return)&&!(edt_name->Caption==""))
    // Neu:
    if ((Key==VK_Return)&&(edt_name->Caption!=""))
    

    MfG

    Finds ech nett das ihr mir helft :P, naja ein Großteil hab ich immer noch selbst geschrieben 😛
    ......

    Das funzt so auch nicht... vllt kommt er mit dem Enter aus dem EDIT feld net raus? kp

    void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
    {
       if(name->Visible==true)
       {
          if ((Key==VK_RETURN)&&(edt_name->Text!=""))
          {
             name->Visible=false;
             hintergrundbild->Visible=false;
             street->Picture->LoadFromFile("Images/street.bmp");
             car->Visible=true;
             timer1->Enabled=true;
             timer2->Enabled=true;
             timer3->Enabled=true;
             timer4->Enabled=true;
             Image1->Visible=true;
             Image2->Visible=true;
             Image3->Visible=true;
             Image4->Visible=true;
             Image5->Visible=true;
             Image6->Visible=true;
             Image7->Visible=true;
             Image8->Visible=true;
             Image9->Visible=true;
             Image10->Visible=true;
             Image11->Visible=true;
             Image12->Visible=true;
             Image13->Visible=true;
             Image14->Visible=true;
             Image15->Visible=true;
             Image16->Visible=true;
             Image17->Visible=true;
             Image18->Visible=true;
             Image19->Visible=true;
             Image20->Visible=true;
             Image21->Visible=true;
             Image22->Visible=true;
             Image23->Visible=true;
             Image24->Visible=true;
          }
       }
    }
    

    EDIT: Ach ich bin so blöd ^^
    hab das Key Press im formular benutzt und nicht im EDIT Feld ^^
    jetzt gehts 😛



  • void __fastcall TForm1::btn_nameClick(TObject *Sender)
    {
       if(edt_name->Text=="")
       {
          ShowMessage("Bitte geben Sie einen Namen ein!");
       }
       else
       {
          name->Visible=false;
          hintergrundbild->Visible=false;
          street->Picture->LoadFromFile("Images/street.bmp");
          car->Visible=true;
          timer1->Enabled=true;
          timer2->Enabled=true;
          timer3->Enabled=true;
          timer4->Enabled=true;
          Image1->Visible=true;
          Image2->Visible=true;
          Image3->Visible=true;
          Image4->Visible=true;
          Image5->Visible=true;
          Image6->Visible=true;
          Image7->Visible=true;
          Image8->Visible=true;
          Image9->Visible=true;
          Image10->Visible=true;
          Image11->Visible=true;
          Image12->Visible=true;
          Image13->Visible=true;
          Image14->Visible=true;
          Image15->Visible=true;
          Image16->Visible=true;
          Image17->Visible=true;
          Image18->Visible=true;
          Image19->Visible=true;
          Image20->Visible=true;
          Image21->Visible=true;
          Image22->Visible=true;
          Image23->Visible=true;
          Image24->Visible=true;
          TStringList *benutzername ;
          benutzername = new TStringList;
          benutzername->Add (edt_name->Text);
    
          if (SaveDialog1->Execute ())
          {
             benutzername->SaveToFile (SaveDialog1->FileName);
    
             Application->MessageBox("Erfolgreich gespeichert", "Achtung!", 0+48) ;
          }
       }
    }
    

    Da unten das soll mein Text aus TEdit speichern, funktioniert auch soweit...
    nur geht dann das komische fenster auf um eine datei zu speichern :(... wie kann ich machen das der das automatisch als benutzername.txt speichert...
    Hab in der Hilfe nachgeschaut aber nichts passendes gefunden.



  • Hallo

    Du öffnest den Speicherdialog doch selber. Mach das doch weg und hier:

    benutzername->SaveToFile (SaveDialog1->FileName);

    den gewünschten Pfad.

    btw: Du sollltest dir unbedingt Grundlagen der Progrmmierung mit VCL und c++ anschauen, weil dir absolute Basics fehlen.

    chrische



  • stetze schrieb:

    EDIT: Ach ich bin so blöd ^^
    hab das Key Press im formular benutzt und nicht im EDIT Feld ^^
    jetzt gehts 😛

    lol - deswegen schrieb ich:

    Kolumbus schrieb:

    Es wär übrigens ganz sinnvoll, wenn du den Kopf der Methode immer mit postest, aus der dein Codeausschnitt stammt.

    Du könntest den unrelevanten Code auch weglassen beim Posten stetze... so ungefähr:

    void __fastcall TForm1::btn_nameClick(TObject *Sender)
    {
       if(edt_name->Text=="")
       {
          ShowMessage("Bitte geben Sie einen Namen ein!");
       }
       else
       {
          name->Visible=false;
          hintergrundbild->Visible=false;
          street->Picture->LoadFromFile("Images/street.bmp");
          car->Visible=true;
          timer1->Enabled=true;
          //...
          timer4->Enabled=true;
          Image1->Visible=true;
          //...
          Image24->Visible=true;
          TStringList *benutzername ;
          benutzername = new TStringList;
          benutzername->Add (edt_name->Text);
    
          if (SaveDialog1->Execute ())
          {
             benutzername->SaveToFile (SaveDialog1->FileName);
             Application->MessageBox("Erfolgreich gespeichert", "Achtung!", 0+48) ;
          }
       }
    }
    

    Schon sieht das Ganze viel übersichtlicher aus 😉

    Übrigens: Pack' doch die Images in ein (evtl. dynamisches) Array... dann kannst du die in einer Schleife aktivieren / deaktivieren. Das wäre dann schön kurz und und das Aktivieren / Deaktivieren würde ungefähr so aussehen (keine Gewähr auf Richtigkeit):

    for(unsigned char i=0; i<=23; i++)
    {
        TImage *TempImage= Images[i];
        TempImage->Visible= true;
    }
    

    is doch viel kürzer!

    chrische5 schrieb:

    Du öffnest den Speicherdialog doch selber. Mach das doch weg ...

    crische5 meint das hier:

    SaveDialog1->Execute ()
    

    Das öffnet den Dialog, also musst du es weglassen.

    Du kannst den SaveDialog benutzen, ohne ihn anzuzeigen.



  • @chrische5
    Kann leider nur die Grundlagen die ich in der Schule beigebracht bekommen habe und sowas war natürlich nicht dabei ^^

    @Kolumbus
    Danke dir...
    Das mit den Images werd ich wahrscheinlich am schluss so machen... hauptsache es funzt überhaupt mal ^^ umschreiben kann man immer noch...

    So der Text von edt_name wird jetzt in "save/highscore.txt" gespeichert was schoneinmal gut ist ^^... Nur wenn ich das Spiel neu starte und einen anderen namen eingebe wird der alte namen überschrieben... was natürlich doof ist ^^...
    wie bekomm ich das hin das das einfach dazu speichert in einer neuen Reihe...
    Sry das ich soviel frag 😞

    void __fastcall TForm1::btn_nameClick(TObject *Sender)
    {
       if(edt_name->Text=="")
       {
          ShowMessage("Bitte geben Sie einen Namen ein!");
       }
       else
       {
          name->Visible=false;
          hintergrundbild->Visible=false;
          street->Picture->LoadFromFile("Images/street.bmp");
          car->Visible=true;
          timer1->Enabled=true;
          timer2->Enabled=true;
          timer3->Enabled=true;
          timer4->Enabled=true;
         /*
         */
          TStringList *benutzername ;
          benutzername = new TStringList;
          benutzername->Add (edt_name->Text);
          benutzername->SaveToFile("save/higscore.txt");
          Application->MessageBox("Erfolgreich gespeichert", "Achtung!", 0+48);
       }
    


  • Hallo

    Ich kenne mich mit VCL gar nicht aus, aber schau mal, ob du SaveToFile nicht eventuell noch anders aufrufen kannst. Vielleicht mit einem zusätzlichen Parameter (append?)

    chrische



  • Klar kannst Du das, es gibt zwar kein Append, also musst Du die Datei wieder laden, bevor Du neue Einträge hinzufügst. Schau Dir auch mal die Eigenschaften Names und Values von TStringList. Damit kannst Du sehr einfach prüfen, ob ein bestimmter Name schon vorhanden ist und gegebenfalls einen neuen Highscore zuweisen.


Log in to reply