Haupmenu erzeugen



  • Hallo liebe Leute,
    ich bin noch ganz unwissend was das programmieren mit C++ Builder angeht, möchte aber nun gern ein kleines Spielchen schreiben, bei dem ich erst mal ein Hauptmenu habe.
    Hier frage ich dann nach der Schwierigkeitsstufe: >Leicht >Mittel >Schwer und je nach dem öffnet sich dann durch klicken auf das jeweilige Button ein neues Fenster, wo dann mein Spiel mit der jeweiligen Schwiertigkeitsstufe zu finden ist.

    Meine Frage ist nun: Wie kann ich solch ein Hauptmenu mit mehreren Untermenus genau erzeugen? 😕

    Kann mir das jemand erklären? Könntet ihr mir da ein Beispiel dazugeben und kann die programmiertexte eigentlich ganzgut verstehen. Hab halt bisher nur noch nicht mit oop-Programmen gearbeitet.

    Danke im Voraus waldwuffel



  • Hallo

    Wo ist das Problem? Programmieren must du da fast gar nichts. Pack ein TMainMenu aus dem Standard-Tab auf dein Form. Doppelklick auf das neue Komponentenicon. In dem folgendem Dialog kannst du nun Menüpunkte anlegen und bearbeiten. Wenn du auf einen Eintrag mit einem Rechtsklick das Kontextmenü öffnest, kannst du unter anderem auch Untermenüs anlegen.

    bis bald
    akari



  • Hallo und herzlich Willkommen waldwuffel,

    viel Spaß hier im Forum. Zu deiner Frage: Ich nehme an, es soll ein relativ einfaches Spiel in einem Fenster werden, um einen Einstieg zu finden. Da du hier im C++Builder-Forum postest, nehme ich an, dass du mit Hilfe einer Borland-IDE (IDE - Integrated Development Environment = Integrierte Entwicklungsumgebung) programmierst.
    Wie sind denn deine Vorkenntnisse? Ich geb' einfach mal nen Hinweis, wenn du Fragen hast, dann raus damit.
    Ich würde vorschlagen, du machst das Einstell-Menü erstmal mit einem klassichen Menü am oberen Fensterrand. Wie in den kleinen Windows-Spielchen. Dazu: Platziere eine TMainMenu-Komponente auf dem Formular eines neuen Projektes. Dann schau dir die Hilfe zur TMainMenu-Komponente an und entdecke die Möglichkeiten 😉 Die Hilfe wird dir ein treuer Wegbegleiter bei der Anwendungsentwicklung sein, also freunde dich früh mit ihr an. Mit einem Doppelklick auf das neue TMainMenu-Icon auf dem Formular, öffnest du ein kleines Fenster, in dem du das Menü einrichten kannst. Du kannst dort Einiges über Kontextmenü's (rechte Maustaste) machen. Probier es dir aus.
    Du könntest zB. einen Menüpunkt "Schwierigkeit" erstellen, mit Untermenü-punkten Leicht, Mittel, Schwer. An den aktuell ausgewählten Untermenü-punkt machst du ein Häckchen (Checked-Eigenschaft auf true). Dann bekommt jeder Menüpunkt eine OnClick-Methode (das was passiert, wenn der Menüpunkt mit der linken Maustaste angeklickt wird), in der du Programmparameter anpassen und zum Schluss das Spiel neu starten kannst. Die OnClick-Methode erzeugst du, indem du im Objektinspektor auf den Reiter "Ereignisse" klickst und dann beim Ereignis "OnClick" einen Doppelklick ausführst. Die Methode wird automatisch dem Quelltext hinzugefügt und kann dann mit individuellem Code "befüllt" werden.

    Das Alles ist im Prinzip schon objektorientierte Programmierung, da das Formular und das Hauptmenü Objekte sind. Du brauchst diese nur noch Hinzufügen und Konfigurieren, sowie Ereignis-Methoden (Methoden = Funktionen) schreiben. Den Rest hat Borland schon gemacht - Objekte erstellen, Eigenschaften vererben etc.

    Das mal als ganz ganz groben Einstieg 🙂

    MfG



  • Danke, für die Hilfe!!

    Ich hab jetzt ein Hauptmenu erzeugt. Und jetzt brauch ich darauf noch einen Button, wenn ich da drauf klicke, bei - LEICHT - soll mein programm 3 zahlen zwischen 1 und 10 ausgeben, die ich dann in ein Editfeld eingeb und der PC vergleicht ob richtig oder falsch. Und da mess ich dann noch die Zeit.
    Bei - SCHWER - wollt ich dann noch Buchstaben mit reinnehmen, das will ich dann wieder in ein Edit-Feld eintippen und wieder Zeit messen und vergleichen.

    Mein Spielchen ist auch schon fertig programmiert, wollt halt jetzt nur irgendwie Schwierigkeitsstufen also - LEICHT - & - SCHWER - mit einbauen.
    Bisher ist das ganze Spielchen auf EINEM Formular. kann ich das jetzt irgendwie so machen, dass wenn ich -Leicht- anklicke, dass eine Formular öffnet mit nem Button drauf, das meine Zufallszahlen erzeugt usw,
    und wenn ich -SCHWER- anklicke ein anderes Formular, wieder mit Buttons und so??

    Ich hoffe, dass ist jetzt alles so weit verständlich.

    Im Grunde hätt ich gern ein Formular, von dem ich dann durch klicken auf ein jeweiliges Button zu einem anderen Formular komme und wieder zurück, wenn möglich.

    Wie geht das genau?

    Liebe Grüße waldwuffel

    Ich kann euch mein bisheriges Programm auch schreiben, falls meine Erklärung nicht ganz verständlich ist, sorry. ist halt nur ä bissl länger.



  • Du könntest bei deiner Beschreibung mal sauber trennen:

    A) Was soll die Anwendung machen?

    😎 Wie kannst / willst du das realisieren?

    Also wenn ich A) richtig verstanden habe, willst du Zeichen (Zahlen oder Buchstaben) am Bildschirm ausgeben, die der Benutzer dann möglichst schnell eingeben soll. Die Zeitspanne zwischen Ein- und Ausgabe soll gemessen werden. Je nach gewählter Schwierigkeit, variiert der Vorrat an Zeichen, die ausgegeben werden können.

    Soweit richtig?



  • ja genau, das habe ich auch alles schon hinbekommen.

    ich möchte jetzt gern meinem spiel schwierigkeitsstufen geben. LEICHT & SCHWER
    dazu möchte ich gern auf Form1 zwei Buttons mit LEICHT und mit SCHWER haben.
    Klicke ich auf LEICHT öffnet sich ein neues Form2, klicke ich auf SCHWER öffnet sich Form3.

    So stell ich mir das vor. Geht das?



  • ich habe es jetzt mal so probiert, aber mein Compiler zeigt mir fehler. Was mache ich falsch?

    #include <vcl\vcl.h>
    #pragma hdrstop
    #include "Form2.h" // <-
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma resource "*.dfm"
    TForm1 Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent
    Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Form2->Show();
    }

    ein zweites formular habe ich erzeugt und natürlich ein Button auf Form1, wie man sieht.

    wie kann ich nur Form 1 durch klicken auf Button 1 miteinander verbinden.

    Ich hab die allererste Borland Builder Version, also schon uralt 😞

    liebe Grüße waldwuffel



  • waldwuffel schrieb:

    Ich hab die allererste Borland Builder Version, also schon uralt 😞

    Ja und? 😉
    Du meinst #include "Unit2.h". Binde diese noch ins Projekt ein. (Projekt -> Hinzufügen)
    Grüße, halloei



  • hey danke halloei, jetzt klappt es, ich bin langsam echt verzweifel, dabei ist das ja wirklich dar nicht umständlich. kann ich jetzt auch noch irgendwie die Reihenfolge festgelegen? (Ich bin zu faul mein Spiel nochmal komplett neu zu schreiben)

    mein Programm beginnt immer mit Form1, kann ich da irgendwas machen, damit es mit form2 startet? wenn ich dann bei form2 auf das button klicke, springt es auf form1?

    Besten Dank nochmal für eure Hilfe
    waldwuffel



  • Sicher. Gehe in die Projektoptionen und dann bei Forms oder so. Da kannst du die Mainform (die, die zuerst aufgerufen wird) festlegen.
    Grüße, halloei



  • dankeschön!

    Jetzt hab ich gleich noch ne ganz andere Frage:
    ich habe 3 Labels die mir je 3 verschiedene Zahlen zwischen 0 und 9 und auch Buchstaben ausgeben, der benutzer gibt nur in einem Editfeld diese Zahlen ein. Wie kann ich die ausgabe und eingabe mit einander vergleichen?

    So weit bin ich bisher. Aber was mache ich falsch?

    randomize();
    ...
    a=random(10); Label1->Caption=a;
    b=random(10); Label2->Caption=b;
    c=random(10); Label6->Caption=c;
    d=Label7->Caption="a";
    ...
    AnsiString o=Edit1->Text;
    if (o==a+b+c+d) Label4->Caption="Richtig!";
    else Label4->Caption="Falsch!";



  • Hallo,

    welchen Typ haben denn a, b und c? Sicherlich Integer, oder? Wenn ja, dann müsste spätestens an dieser Stelle :: if (o==a+b+c+d) :: ein Fehler kommen. Mit a+b+c addierst du a,b und c -> mit +d versuchst du einen String mit dem Ergebnis aus a+b+c zu verketten?! Das ganze wiederrum versuchst du dann mit o (was vom Typ AnsiString ist) zu vergleichen.

    Nehmen wir an:
    a = 1
    b = 7
    c = 5
    d = "a";

    Das Ergebnis daraus soll "175a" sein, dann musst du zunächst die Integer (a,b und c) in Strings umwandeln. IntToStr(a); IntToStr(b).... Danach erst kannst du sie verketten:

    if (o == IntToStr(a) + IntToStr(b) + IntToStr(c) + d) { ; } // d muss nicht umgewandelt werden, weil d bereits vom Typ (Ansi)String ist.
    

    Anders sähe das aus, wenn das gewünscht Ergebnis "13a" sein sollte. Dann musst du zunächst alle Integer addieren und dann in String umwandelt, damit die Summe mit dem verbleibenden AnsiString "d" verkettet werden kann.

    if (o == IntToStr(a+b+c) + d) { ; }
    

    Vielleicht habe ich dich aber auch falsch verstanden?! 😕

    btw.: wenn du eindeutige Bezeichner für Objekte und Variablen verwendest, ist es für dich und für Außenstehende leichter, deinen Quellcode zu verstehen und zu überblicken.

    LG, Micha



  • @waldwuffel
    irgendwie hat das nichts mehr mit dem eigentlichen Thema zu tun, deshalb bitte beachten: ein Thema pro Thread, ein Thread pro Thema

    zur Frage:
    ich vermute eher daß die eingegebenen Werte (o) mit jedem Label einzeln verglichen werden sollen, z.B.

    if (o==IntToStr(a) || o==IntToStr(b) || o==IntToStr(c) || o==d) Label4->Caption="Richtig!";
    

    wenn das mehrere Labels sind bietet sich ein Array der Labels an, durch das kann man dann z.B. mit einer Schleife gehen, um nachzuschaun, ob eines mit dem angegebenen Wert übereinstimmt. Aber auch das ist ein völlig anderes Thema.



  • Hallo waldwuffel,

    back to topic: Hauptmenü erzeugen und Schwierigkeitsgrad einstellen.

    Ich verstehe immernoch nicht ganz, wozu du ein 2. Formular brauchst... Einfach nur, weil du es so schöner findest? Oder zum Üben? Wenn Beides nicht: Ein 2. Formular ist nicht notwendig!
    Wie gesagt: Du kannst im Hauptmenü einen Menüpunkt "Schwierigkeit" mit den Untermenüpunkten "Leicht/Mittel/Schwer" erstellen. In einer OnClick-Methode, die du per Objektinspektor allen 3 Untermenüpunkten zuordnen kannst, legst du dann einfach fest, wie groß der Wertevorrat sein soll, aus dem die drei Zeichen ausgegeben werden. Das speicherst du in einer member-Variablen des Formulars. Derart:

    // IN DER *.H
    
    //...
    private:
        int iWertebereich;
    //...
    
    // IN DER *.CPP:
    
    void __fastcall TForm1::SubMenuClick(TObject *Sender)
    {
        if(Sender == SubMenuSimple)
            iWertebereich= 10;
        else if(Sender == SubMenuMedium)
                iWertebereich= 30;
            else if(Sender == SubMenuHard)
                    iWertebereich= 60;
    }
    //----------------------------------------------------
    

    iWertebereich kannst du dann für random() weiter verwenden...

    MfG



  • danke, noch mal Kolumbus!
    Ich wollt einfach ein2 formular, weil ichs einfach schöner fand, und weil ich auch wissen wollte wie das funktioniert.

    *an alle: danke schön für eure Hilfe

    Ps: fürs nächste Mal merk ich mir:

    ein Thema pro Thread, ein Thread pro Thema

    Liebe Grüße und eine dickes Danke waldwuffel


Anmelden zum Antworten