Announcement

Collapse
No announcement yet.

Bestenliste ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bestenliste ?

    Hi,

    ich wollt noch mal was fragen also ich wollte vllt noch in dem Projekt (galgen-männchen) wollte ich eine Bestenlist einbauen.

    Ich prüfe immer wenn das label(da wird das wort angezeigt(durch Tastendruck)) == dem zu erratenen Wort.

    Wenn das gleich dem Label ist dann wird ein merker (gewonnen) hochgezählt und dann wieder eine neue runde gemacht.

    oder wenn der man 12 fehler macht dann wird auch ein merker (verloren) hochgezählt und dann wieder eine neue runde gemacht.

    so nun will ich einfach in einem Memo Feld geordnet eine Bestenlist ausgeben will mit dem Namen des spielers , der gewonnen runden , der verlorennen runden.

    Eben eine Bestenrunde(aber geordnet nach den Gewonnen runden).

    Als maximum an Runden habe ich 5 gemacht!

    Hat da jemand vllt ne idee wie ich das am besten machen könnte

  • #2
    ???
    1) z.B. ein TMemIniFile-Objekt aufmachen
    Code:
    HighScore = new TMemIniFile(ChangeFileExt(Aplication->ExeName, ".highscore"));
    2) Namen abfragen und in Variable speichern (hier: TheName)
    3) Werte holen und aktuelle Werte addieren
    Code:
    g = HighScore->ReadInteger(TheName, "gewonnen", 0) + g_act;
    v = HighScore->ReadInteger(TheName, "verloren", 0) + v_act;
    4) Werte wieder wegschreiben
    Code:
    HighScore->WriteInteger(TheName, "gewonnen", g);
    HighScore->WriteInteger(TheName, "verloren", v);
    HighScore->UpdateFile();
    delete HighScore;
    5) Zum Anzeigen alle Werte wieder einlesen, dazu zuerst die Abschnitte holen und diese dann durchgehen, Werte formatieren und anzeigen
    Code:
    Lst = new TStringList();
    HighScore->ReadSections(Lst);
    for (i=0; i<Lst->Count; i++)
    {
        TheName = Lst->Strings[i];
         g = HighScore->ReadInteger(TheName, "gewonnen", 0);
        ...
    }
    Den Rest solltest Du Dir selbst erarbeiten... ;-)
    Du kannst natürlich auch Schlüssel aus den Namen basteln und alles in einen Abschnitt schreiben, das ist Geschmackssache, so wie das Ganze hier nur eine von vielen Möglichkeiten darstellt.

    Gruß vom Knut

    Comment


    • #3
      danke war 2 tage lang pc los aber dickes danke !!

      Comment


      • #4
        Entschuldigung aber irgendwie kapier ich das nicht !! kannst du mir das genauer erklären?


        Es fängt schon oben an :

        HighScore = new TMemIniFile(ChangeFileExt(Aplication->ExeName, ".highscore"));

        was is ein MemIniFile ?

        wenns geht erklär mir bitte alle punkte noch einmal einzel!

        Comment


        • #5
          Knut hat das doch recht gut dokumentiert.
          Einfach mal in der Hilfe des BCB TMemIniFile eingeben...

          Grüße Jochen

          Comment


          • #6
            Wo soll das alle bitte hin alles in den Konstruktor oder ?
            Originally posted by Knut Lohse View Post
            ???
            1) z.B. ein TMemIniFile-Objekt aufmachen.
            Code:
            HighScore = new TMemIniFile(ChangeFileExt(Aplication->ExeName, ".highscore"));
            kann man das alles so hinschreiben das highscore muss doch auch noch irgendwo deklariert werden

            2) Namen abfragen und in Variable speichern (hier: TheName// das wäre bei mir win & lose)
            3) Werte holen und aktuelle Werte addieren
            Code:
            g = HighScore->ReadInteger(win, "gewonnen", 0) + g_act;
            v = HighScore->ReadInteger(lose, "verloren", 0) + v_act;
            was soll das g_act (aktuelle klar aber wie soll ich das machen einfach +win) und muss ich g,v nicht auch vorher deklarieren ? was ist da gut für, String ?
            4) Werte wieder wegschreiben
            Code:
            HighScore->WriteInteger(win, "gewonnen", g);
            HighScore->WriteInteger(lose, "verloren", v);
            HighScore->UpdateFile();
            delete HighScore;
            5) Zum Anzeigen alle Werte wieder einlesen, dazu zuerst die Abschnitte holen und diese dann durchgehen, Werte formatieren und anzeigen
            Code:
            Lst = new TStringList();
            HighScore->ReadSections(Lst);
            for (i=0; i<Lst->Count; i++)
            {
                TheName = Lst->Strings[i];                  
                 g = HighScore->ReadInteger(win, "gewonnen", 0);
                ...
            }
            also kannst du mir gerade sagen wo ich überall alles hinschreiben muss ?
            ich hab manche sachen abgeändert ! also musst da nicht denken das du etwas falsch gemacht hast, nur zur Anmerkung !

            Comment


            • #7
              Natürlich musst Du die Variablen vorher deklarieren, das glaubte ich nun nicht extra erwähnen zu müssen... Du solltest sie auch so deklarieren, dass alle Klassenfunktionen sie kennen (also z.B. im private-Teil der Header-Datei).
              und muss ich g,v nicht auch vorher deklarieren ? was ist da gut für, String ?
              1. Klar!
              2. Sicher nicht! Wenn Du wachen Auges liest: ReadInteger, sollte Dich der Datentyp int anspringen.

              Und: ich kann Dir (wie auch Christian Dir schon mehrmals erklärt hat) natürlich nicht sagen, wo Du das alles hinschreiben sollst, da ich Dein Programm nicht kenne.
              • Konfigurationsdatei (TMemIniFile) aufmachen zu Beginn (siehe 'randomize')
              • den Rest irgendwo nach einem gewonnenen bzw. verlorenen Spiel
              • das Speichern und Löschen (UpdateFile, delete) am Ende (FormCloseQuery, FormClose)
              • HighScore anzeigen - wo immer Du willst
              Lies auch mal in der Hilfe über die Ereignisse OnCreate, OnShow, OnActivate, OnCloseQuery, OnClose und OnDestroy nach, da steht noch Einiges über Erzeugen und Freigeben von Variablen (glaube ich wenigstens). Zum Beispiel gehören OnCreate und OnDestroy bzw. OnShow und OnClose sozusagen zusammen, d.h. Variablen, die Du im einen Ereignis mit new anlegst, solltest Du im dazugehörigen auch wieder wegputzen (Free(), delete).

              So, für heute ist's genug.
              Gruß vom Knut

              Comment


              • #8
                ich hab aber 2 verschieden Formular (eigentlich noch mehr).

                in dem einen bekomm ich die Werte win,lose,spielername.

                so nun hab ich aber in einem anderen Formular die Highscore.
                Da muss ich doch jetzt die Werte per funktion mit return zurückgeben?

                kannst du mir da ein bsp geben wie ich die Werte da rüber bekomme?

                Comment


                • #9
                  http://www.marquardtnet.info/cecke/q...quicky_15.html
                  Christian

                  Comment


                  • #10
                    In dem Header des Fromulars (bspw. TForm1) mit den Werten (Du solltest sie, dem 'Standard' gemäß FWin, FLose und FSpielername nennen) deklarierst Du:
                    Code:
                    ...
                    private:
                    String FSpielername;
                    int FWin, FLose;
                    ...
                    public:
                    __property String Spielrname = { read=FSpielername };
                    __property int Win = { read=FWin };
                    __property int Lose = { read=FLose };
                    Dann kannst Du z.B. auf Win in TForm2 darauf zugreifen mit:
                    Code:
                    int Win = Form1->Win;
                    #edit# Schon wieder die Show gestohlen, Christian (ich bin einfach zu langsam)

                    Comment


                    • #11
                      Dann kannst Du z.B. auf Win in TForm2 darauf zugreifen mit:
                      Ohne die Unit einzubinden wird das nicht gehen....
                      Christian

                      Comment


                      • #12
                        die units hab ich alle eingebunden wie komm ich in WIN rein ?

                        Comment


                        • #13
                          @Christian
                          Originally posted by Christian Marquardt View Post
                          Ohne die Unit einzubinden wird das nicht gehen....
                          Ja, klar, das ist natürlich Voraussetzung.
                          @Mister Love
                          Was meinst Du? Ich versteh' die Frage nicht.

                          Comment


                          • #14
                            Lies die Erklärungen....(Ich versteh' die Frage nicht.)
                            Christian

                            Comment


                            • #15
                              Originally posted by Christian Marquardt View Post
                              Lies die Erklärungen....(Ich versteh' die Frage nicht.)
                              Heißt das jetzt, Du verstehst die Frage auch nicht oder meinst Du, ich soll die Erklärungen lesen?

                              Comment

                              Working...
                              X