Punktezählung



  • hi,
    ich habe ein problem mit meiner punktezählung.
    Also ich habe ein spiel geschrieben, wo man für einen buttonklick im richtigen moment einen Punkt für einen ButtonKlick bekommen soll.

    das ist der richtige moment:
    //Ein Button der über einen anderen liegt verschwindet
    case 1:this->button1->Size=System::Drawing::Size(0, 0); break;

    Punktezählung sieht dann so aus:
    //Klickt man auf den darunter liegenden button bekommt man nun punkte
    if(zufallszahl=0,1,2,3,4,5,6,7,8)
    punktestand++;
    else
    ;}
    Das ganze läuft natürlich viel zu schnell durch um auf den button zu klicken. Deshalb habe ich es zuerst mit sleep versucht, dann bleibt zwar die chance um auf den button zu klicken, aber es wird nix gezählt, weil ja das programm schläft

    dann habe ich es mit folgenden versucht

    int t = time(NULL);
    while(time(NULL) < (t +1));

    damit bleibt der button natürlich auch für eine sekunde sichtbar, aber
    da kommt einem wahrscheinlich das break in die quere, da nach break wahrscheinlich die zufallszahl sofort zurück gesetzt wird, dadurch bleibt einem auch zu wenig zeit um auf den button zu klicken.

    hat jemand eine ahnung, was ich noch schreiben könnte???



    • Zum Auslösen eines Ereignissen nach einer bestimmten Zeit nimm lieber System::Windows::Forms::Timer MSDN
    • Wenn du Zeitabstände messen möchtest System::DateTime::Now und System::TimeSpan
    • Pseudocode: d.h. copy&paste&run is nicht

    int punkte;
    
    // in dem Konstrukor
    {
    timer->Tick = gcnew EventHandler(this, &meineKlasse::h);
    button->Click= gcnew EventHandler(this, &meineKlasse::j);
    }
    
    // in der Klasse: ab hier
    TimeSpan zwischenzeit;
    
    function h(Object^  sender, EventArgs^ e)
    {
     if(button unsichtbar) // Button sichtbar machen und
     {
      timer->stop();
      timer->intervall = 1000; // 1 Sekunde zeit den button zu drücken
    
      button_anzeigen();   // Funktion anlegen
    
      zwischenzeit = DateTime::Now;
    
      timer->start();
     }
     else // Der Spieler hätte ihn sehen könnan aber nicht gedrückt
     {
      timer->stop();
      // Funktion anlegen
      Button_nicht_getroffen();  // Funktion anlegen // punkt/leben abzeihen oder Game over
    
     }
    function j(Object^  sender, EventArgs^ e)
    {
      timer->stop();
    
      punkte++;
    
      timer->intervall = erhalte_Zufaals_Zahl(); // Funktion anlegen;
      Button_verstecken(); // Funktion anlegen;
    
      timer->start;
     }
    


  • [quote="Rhombicosidodecahedron"]

    Z.17 if(button unsichtbar) // Button sichtbar machen und

    quote]

    wenn du mir sagst, wie ik dis schreiben muss...dann hätte ich das gelöst

    weil

    if(this->button19->Size=System::Drawing::Size(0, 0);)

    kann i ja net schreiben...ich weiß nämlich net wie ich dis schreiben muss damit festgestellt wird, dass der button halt die größe(0,=0) besitzt...so würde natürlich ne fehlermeldung kommen



  • button->Visible = true vielleicht, oder if(button->Visible)



  • Rhombicosidodecahedron schrieb:

    button->Visible = true vielleicht, oder if(button->Visible)

    Nein...hab ich alles schon probiert



  • Nein ich meinte mit button->Visible = false die Schaltfäche verstecken und mit button->Visible = true anzeigen und mit if(button->Visible) überprüfen ob sie sichtbar ist.
    Sonst nimm if(button->Size.IsEmpty) .

    Edit: Sprache und Codetags optimiert



  • Rhombicosidodecahedron schrieb:

    Nein ich meinte mit button->Visible = false die Schaltfäche verstecken und mit button->Visible = true anzeigen und mit mit if(button->Visible) überprüfen ob sie sichtbar ist.
    Sonst nimm if(button->Size.IsEmpty) .

    Ja ich hatte es schon mit visible probiert ...weiß also was du meinst...aber unsichtbare buttons kann man net anklickn und auf den dadrunter auch net zugreifen...deshalb hab ich ihn mit umstellen der größe sozusagen weggezaubert

    aber dis andere mit isempty werd ich ma kurz probieren



  • Nein... irgendwas mit -> darf man in der if-Anweisung wohl gar net schreiben, weil dis was zum ausführen is und net zum prüfen, also sprich keine bedingung



  • Klingt jetzt komisch aber bei mir geht:

    if(button2->Size.IsEmpty)
      button2->Size = button1->Size;
    else
      button2->Size = System::Drawing::Size::Empty;
    

    ohne Probleme.



  • Rhombicosidodecahedron schrieb:

    Klingt jetzt komisch aber bei mir geht:

    if(button2->Size.IsEmpty)
      button2->Size = button1->Size;
    else
      button2->Size = System::Drawing::Size::Empty;
    

    ohne Probleme.

    Mein Fehlermeldung is dann folgende:
    Nur statische Datenmember können innerhalb einer Verweisklasse oder eines Werttyps initialisiert werden.

    hab ich da wat vergessen zu schreiben



  • entschuldigung mein fehler...hab meine letzten versuch noch net komplett wieder rausgenommen war was anderes...ich probiere es glecih nochmal mit dem emty



  • entschuldigung mein fehler...hab meine letzten versuch noch net komplett wieder rausgenommen war was anderes...ich probiere es glecih nochmal mit dem emty



  • Nee es läuft zwar aber er zählt die punkte trotzdem nur für ne millisekunde, anstat sie zu zählen solangeder button weg is.

    für ne erklärung wie timewaitable funktioniert wäre ich echt dankbar
    CreateWaitableTimer(); // Timer erzeugen
    SetWaitableTimer(); // Timer auf 1 ms stellen
    WaitForSingleObject(); // Warten bis 1 ms rum ist
    das is erstma dis was ich dafür brauche...allerdings mus da noch was in klammern rein...ich hab zwar schon mehrere beispiele gesehen,aber irgendwie hmmm...
    kann mir jemand sagen, was ich in die klammern schreiben muss um 900millisekundn abzuwarten?



  • So etwas in der Richtung
    http://support.microsoft.com/kb/184796/de

    Quelle: Google-Suche "createabletimer" 3. Eintrag



  • @Der_Kai:
    Grundlagenbuch und ein Duden wäre für Dich bestimmt nicht schlecht.
    Aber lass Dir alles vorkauen um nix lernen zu müssen.

    Garbage can



  • Rhombicosidodecahedron schrieb:

    So etwas in der Richtung
    http://support.microsoft.com/kb/184796/de

    Quelle: Google-Suche "createabletimer" 3. Eintrag

    Die Seite hat ich auch schon...aber wie gesagt...ich kann mit diesen fachspezifischen erklärungen net so gut...
    da ich dis net gelernt habe...is das halbes fachchinesisch...deswegen versuche ich es etwas mehr anfänger zu erfragen, damit ich net dumm bleibt^^

    ps: @garbage can: wer sich alles allein beibringen kann is a genie und is mia noch nie über den weg gelaufen

    und die geschichte mit dem waitable timer sieht für mich extrem kompliziert und übelst unverständlich aus...


Anmelden zum Antworten