Bild für wenige Sekunden eifügen...(Grafische Oberfläche(GUI))



  • Hallo Leute...

    Ich hab ein Problem und hoffe ihr könnt mir helfen....

    ich soll von der Schule aus ein Nimm- bzw. Streichholzspiel programmieren...
    Ich komme auch ganz gut klar und mein Grundgerüst steht...Nur möchte ich immer wenn der Computer zieht(1,2, oder 3 Streichhölzer) ein Bild für 2 Sekunden einblenden lassen...danach soll das Bild wieder verschwinden und der Spieler zieht seine 1,2 oder 3 Streichölzer und dann wieder das Bild und der Computer zieht....Soweit ist alles prpgrammiert der Computer zieht logisch seine Streichhölzer und im großen und ganzen ist das Spiel spielbar...nur halt diese eine Sache.

    Damit ihr euch das alles besser vorstellen könnt hier mal meine Funktion mit der das Bild eingeblendet wird, die pause mit Sleep kommt und das bild wieder verschwindet:

    void load()
    		{
    			pictureBox32->Visible = true;
    			label7->Visible = true;
    			Sleep(1000);
    			pictureBox32->Visible = false;
    			label7->Visible = false;
    
    		}
    

    und jetzt noch meine Funktion ComputerZieht :

    void ComputerZieht( )
    		{ 
    
    			if(anzahl>0)
    			{
    		        int ziehe;
    				verstecke();
    				load();
    
    				ziehe = (rand()%2+1);
    				if(anzahl==6)
    					ziehe=1;
    					label2->Text = Convert::ToString(anzahl);
    				if(anzahl==5)
    					ziehe=1;
    					label2->Text = Convert::ToString(anzahl);
    				if(anzahl==4)
    					ziehe=3;
    					label2->Text = Convert::ToString(anzahl);
    				if(anzahl==3)
    					ziehe=2;
    					label2->Text = Convert::ToString(anzahl);
    				if(anzahl==2)
    					ziehe=1;
    					label2->Text = Convert::ToString(anzahl);
    				if(ziehe==1)
    					anzahl--;
    					label2->Text = Convert::ToString(anzahl);
    				if(ziehe==2)
    					anzahl=anzahl-2;
    					label2->Text = Convert::ToString(anzahl);
    				if(ziehe==3)
    					anzahl=anzahl-3;
    					label2->Text = Convert::ToString(anzahl);
    
    				if(anzahl<=0)
    			{
    				MessageBox::Show("Herlzlichen Glückwunsch, Du hast gewonnen!!!:-)");
    				gewonnen=gewonnen++;
    				label4->Text = Convert::ToString(gewonnen);
    			}
    			HoelzchenDarstellen( anzahl );	
    			zeige();
    
    			}
    

    Es sollte so doch eigentlich funktionieren, aber der Computer wartet jetzt zwar 2 sekunden bis er zieht nur das bild wird in den 2 sekunden trotzdem nicht angezeigt, sondern nur danach wieder für einen augenschlag (fast nicht zu erkennen) warum ist das so????

    Ich brauche echt dringend Hilfe! Danke im Vorraus Mfg.

    Anmerkung: Ich programmiere das erste mal.... 😕



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Pack die Bildanzeige in einen Timer. Wenn der Computer zieht startest du den Timer und zeigst das Bild an. Wenn der Spieler dran ist wird der Timer gestoppt und das Bild gelöscht.



  • Ok, danke...aber wie gesagt ich bin absoluter anfänger...

    kannst du mir sagen wie ich das mache?



  • Ich bin im Moment zeitlich etwas eingespannt. Wenn ich wieder Zeit habe baue ich dir mal ein Grundgerüst für den Programmablauf. Kann aber wie gesagt etwas dauern. Vielleicht am späten Abend noch.



  • Ja ich hoffe du schaffst das heute noch....ist ziemlich dringend....

    Hoffe das sich auch noch ein paar von den anderen Leuten hier vielleicht ein paar Gedanken machen und mir helfen könnten....



  • Zeig mal das Codesegment in dem du deine Funktion ComputerZieht() aufrufst.



  • ähm...meinst du das??

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 MenschZieht ( 1 );
    			 HoelzchenDarstellen ( anzahl );
    			 if(anzahl>1);
    			 ComputerZieht();
    			 HoelzchenDarstellen ( anzahl );
    		 }
    

    Das hab ich halt für 3 Buttons!



  • 1. Was macht das ; in der if-Zeile, da gehört normalerweise keins hin, wenn die nächste Zeile auf das if ansprechen soll.
    2. In Sleep(x) gibt x die Zeit in ms an. D.h. 1000 wartet nur 1 sec. Versuch mal einen Wert von 2000.



  • zu 1.: Gut, danke jetzt sind schon mal die drei Warnungen weg...

    zu 2.: Ja das wusste ich, soll ja auch nicht all zu lange dauern, dass der Computer zieht...Ne Änderung auf Sleep(2000) hat nur gebracht das es jetzt 2 Sekundendauert bis das Bild aufflackert und der Spieler wieder ziehen kann...



  • Ich mach dir mal folgenden Vorschlag. Du registrierst dich, dann schicke ich dir ne mail. Du anwortest und schickst mir einen Zip-File mit deinem Projekt mit. Dabei löscht du vorher den Debug und ggf. Release-Ordner und ggf. auch die große ncb-Datei im Projektverzeichnis. Dann schau ich mal drüber. Denke das geht schneller.



  • Du ich glaub das ist keine so eine gute idee...
    bin echt nicht so versiert in solchen Sachen mit zippen und sowas....
    ich kann dir höchstens den Quelltext per Mail schicken oder so...kannst mir nich auch einfach das mit der timer() Funktion erklären...oder gibs im Internet ne Seite die so ziemlich genau auf mein Problem zutrifft?



  • Ok, dann schick mir einfach den Quellcode direkt. Alle .h und .cpp Dateien. Die Sache mit dem Timer ist u.U. dann auch noch relativ komplex für dich. Da ich selber nicht genau weiss wo das Problem liegt, kann ich dir auch keine Seite nennen, wo es gelöst werden könnte. Ich muss halt mal drüber schauen.



  • Ok, E-Mail ist da...



  • Auweia, das muss ich erstmal auseinanderklamüsern. Hast du noch nie was von Dateianhängen gehört? Muss ich dir wohl auch noch mal erklären!



  • nee ehrlich gesagt nicht....ich hab dir jetzt auch noch ne 2. mail geschickt weil bei der ersten noch gar nicht diese ganzen (-) Boxen aufgemacht waren....also wirds nichts in der naechsten Stunde...wenns zu Aufwendig ist..lass einfach...dann muss ichs halt irgendwie anders machen...sag dann nur bescheid...



  • Nun lass mal nicht gleich den Kopf hängen. Ich brauche noch die Images, die du laden möchtest. Gleich ein guter Test, um die Sache mit den Dateianhängen zu üben. Du musst bei einer neuen Mail nur unten auf der Seite unter "Dateianhänge zur E-Mail" auf "Durchsuchen" gehen und dann auf deinem Rechner in das Verzeichnis in dem die Dateien die du anhängen möchtest zu finden sind wechseln. Du wählst die Datei aus und klickst einfach auf "Datei hinzufügen". Alles ganz easy.



  • Sorry aber da steht nichts von "Dateianhänge zur E-Mail" wenn ich hier auf deinen Namen und dann "E-Mail senden" klicke...



  • Ah ja richtig, du schickst die mail ja aus dem Forum. Du musst die natürlich über deinen Provider schicken. Ich sende dir mal eine Mail, auf die du dann anworten kannst.



  • So, Programm läuft im Prinzip. Ich habe hier den Effekt, dass dein Bild nur angezeigt wird, wenn ich die Messagebox "Computer zieht" aktiviert habe. Schaun wir mal weiter warum das so ist.



  • Richtig das ist mir auch schon aufgefallen..Das war ja glaub ich auch schon auskommentiert...


Anmelden zum Antworten