Wer wird Millionär



  • Hallo,
    ich arbeite an einem kleinen Spiel ähnlich wie wer wird millionär. Jetzt habe ich 4 Labels mit den verschiedenen Lösungen wie kann ich es jetzt mit Borland VCL umsetzten das 2 falsche gelöscht werden. Ich brauche ein paar Lösungsansätze wie man soetwas realisiert!!!

    Gruß heino



  • hm....naja markiere dir irgendwie das label mit der richtigen antwort, und lass dann per zufallszahl zwischen 1 und 4 , 2 andere labels unsichtbar machen (siehe visible eigenschaft)



  • ok,
    kannst du mir ein etwas Code zeigen



  • Beispiel aus der BCB-Hilfe:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    
    {
      const AnsiString InfoStr[10] = {"CompanyName", "FileDescription", "FileVersion", "InternalName", "LegalCopyright", "LegalTradeMarks", "OriginalFileName", "ProductName", "ProductVersion", "Comments"};
      char *ExeName = Application->ExeName.c_str();
      DWORD n = GetFileVersionInfoSize(ExeName, n);
      if (n > 0)
      {
        char *pBuf = (char *) malloc(n);
        AnsiString temp = "VersionInfoSize = ";
        Memo1->Lines->Add(temp + IntToStr(n));
    
        GetFileVersionInfo(ExeName, 0, n, pBuf);
        for (i = 0; i < 10; i++)
        {
          char *pValue;
          DWORD Len;
          temp = "StringFileInfo\\040904E4\\";
          temp = temp + InfoStr[i];
          if (VerQueryValue(pBuf, temp.c_str(), pValue, Len)
            Memo1->Lines->Add(InfoStr[i] + " = " + pValue);
        }
        free(pBuf);
      }
      else
        Memo1->Lines->Add("Keine Versionsinformation gefunden");
    
    }
    


  • Für solche Markierungen bietet sich die Eigenschaft TLabel::Tag an.

    Davon abgesehen, sind wir hier ein echt fieses Pack und geben primär Hilfe zur Selbsthilfe. 😃



  • Erstelle doch einfach ein Array aus TLabel und erstelle diese zum Programmstart dynamisch, dann kannst du sie viel leichter handhaben:

    // Anzahl der Labels definieren, sodass diese ggf. leicht geaendert werden kann
    #define LBLCNT 4
    
    /* ... */
    
    // Globale Deklaration des Arrays
    TLabel* LabelArray[LBLCNT];
    
    /* ... */
    
    // z.B. in OnCreate der Form:
    for(int i=0;i<LBLCNT;++i)
    {
        LabelArray[i]=new TLabel(MyForm);
        LabelArray[i]->Parent=MyForm;
    }
    

    EDIT: Quelltext nicht getestet, da ich derzeit nicht den BCB zur Hand habe.



  • Wenn er nur 4 Labels hat und die Anzahl sich nicht verändert, ist eine dynaische Erzeugung nicht nötig.
    Das mit dem Array kann man natürlich trotzdem machen aber bitte ohne define. Dafür gibt es const.



  • Und globale Variablen sind auch nicht sinnvoll. In den FAQ gibt es einen Beitrag dazu.



  • OK, dann mit const... ja, global ist nicht die feinste Variante, das stimmt, dann kann er halt ein Label-Array im Header in die Klasse seiner Form als Attribut eintragen. Viele Wege führen nach Rom. 😉

    EDIT:

    /* Im Header in der Klasse der Form,
    unter __published, wo alle anderen
    Komponenten eingetragen sind: */
    const int LabelCount;
    TLabel* LabelArray[LabelCount];
    
    /* ... */
    
    // Im OnCreate deiner Form oder im Konstruktor:
    LabelCount=4;
    for(int i=0;i<LabelCount;++i)
    {
        LabelArray[i]=new TLabel(MyForm);
        LabelArray[i]->Parent=MyForm;
    }
    

    Ich bin mir allerdings nicht ganz sicher, ob das const innerhalb der Klasse funktioniert...



  • Sphy schrieb:

    Erstelle doch einfach ein Array aus TLabel und erstelle diese zum Programmstart dynamisch, dann kannst du sie viel leichter handhaben

    Besser: Erstelle dir deine Labels zur Designzeit, erstelle dir einen privaten Array vom Typ TLabel*

    private:
        TLabel* OptionLabels[4];
    

    und schreibe dann in TForm::OnCreate oder in den Konstruktor der Form:

    OptionLabels[0] = Label1;
    OptionLabels[1] = Label2;
    OptionLabels[2] = Label3;
    OptionLabels[3] = Label4;
    

    Dann sind deine Labels klar numeriert.



  • Oder so...


Anmelden zum Antworten