a8888j Geschrieben 16. Mai 2002 Geschrieben 16. Mai 2002 Wie kann ich es in einer for schleife schreiben in der ich sage ein Objekt macht dies und das bis zum Beispiel bis ein User ein W,S,A oder Y eingibt. kann man in dem Teil der Bedingungen in der for schleife sagen for ( wurmkörper=x_koordinate;x_koordinate>1 || eingabe='W' || ....;x_kkordinate--) { mach dies und das} ???:confused: er soll während das Objekt sich bewegt horchen ob der User was eingibt, und nicht mit getch() nach jeder kleinen Bewegung warten bis der User was eingibt. Hat jemand ne Idee? Danke Anna Zitieren
Klotzkopp Geschrieben 16. Mai 2002 Geschrieben 16. Mai 2002 Dein Problem ist, dass getch synchron arbeitet, d.h. die Funktion wartet, bis eine Taste gedrückt wurde. Solange steht Dein Programm. kbhit könnte wohl abhelfen, wenn es auch nicht Standard ist (AFAIK). Zitieren
a8888j Geschrieben 16. Mai 2002 Autor Geschrieben 16. Mai 2002 .. könnte ich mir dieses kbhit() vorstellen? Ich will dass er in einer Schleife andauern überprüft ob ein w, s,y oder a eingegeben wurde, wenn nicht, soll die Sache ihren Lauf nehmen, wenn ja soll er etwas anderes machen als das was in der Schleife steht, soll z.B. ne neue Schleife beginnen. War das zu verstehen?!?!? Ich hoffe schon Danke erst mal Anna Zitieren
StarLord Geschrieben 17. Mai 2002 Geschrieben 17. Mai 2002 Original geschrieben von a8888j .. könnte ich mir dieses kbhit() vorstellen? Ob du es dir vorstellen kannst weiß ich nicht, aber erklären kann ichs dir. Die Funktion kbhit() liefert TRUE (wert != 0) zurück wenn eine Taste gedrückt worden ist. #include <conio.h> nicht vergessen! Hier ein Beispiel: for ( wurmkörper=x_koordinate; x_koordinate > 1; x_kkordinate--) { static char keycode; // Notfalls außerhalb der Schleife definieren, static ist wichtig! if (kbhit()) { keycode= getch(); switch(keycode) { // In diesem Beispiel werden sowohl Klein- als auch //Großbuchstaben abgefangen und ausgewertet case 'w': case 'W': //mach dies und das break; case 's': case 'S': //mach dies und das break; case 'a': case 'A': //mach dies und das break; case 'y': case 'Y': //mach dies und das break; } } Zitieren
a8888j Geschrieben 17. Mai 2002 Autor Geschrieben 17. Mai 2002 if (kbhit()) muss da nicht ein ! davor if (!kbhit()) Zitieren
Crush Geschrieben 17. Mai 2002 Geschrieben 17. Mai 2002 Das das eine Variable ist, die immer an derselben Speicherstelle steht und deren Inhalte auch bei verlassen des Namespace erhalten bleiben. Die Variable wird auf dem Heap nicht auf dem Stack angelegt. Innerhalb von Namespaces bleiben die Inhalte erhalten und sie sind local für eine Funktion. Außerhalb einer Funktion werden sie zu externen, globalen Variablen des entsprechenden Files in dem sie deklariert werden. Zitieren
a8888j Geschrieben 17. Mai 2002 Autor Geschrieben 17. Mai 2002 Kann man in eine For-Schleife mehrere Bedingungen angeben? Oder besser eine Do-While Schleife? Das mit dem kbhit hat gut geklappt danke Ich hab aber noch son Problem Soll ich dir mal dieDatei schicken? Ich hab am Anfang ne Manüauswahl und sage z.B. 2: für Snake mit Hinderniss case '2': bewegung(); ich ruf die Funktion bewegung() auf, innerhalb dieser Funktion ruf ich gegebenenfalls eine andere Funktion auf. Je nachdem welche Taste während dem Spiel. Sagen wir zum Beispiel Funktion bewegung_w(); bewegung_w() wird auch ausgeführt, aber sobald die zu Ende ist,sprint er wieder in bewegung() rein, solange wie die Bedingung in der FOR-Schleife in bewegung() true ist. Wie kann ich sagen, diese FOR-Schleife wird bei AUfrufen einer anderen Funktion abgebrochen AM Zitieren
StarLord Geschrieben 17. Mai 2002 Geschrieben 17. Mai 2002 Original geschrieben von a8888j if (kbhit()) muss da nicht ein ! davor Nein! Du willst doch auf Tastatureingaben reagieren und nicht darauf warten... oder habe ich das falsch verstanden? Gruß, StarLord Zitieren
StarLord Geschrieben 17. Mai 2002 Geschrieben 17. Mai 2002 Original geschrieben von a8888j Kann man in eine For-Schleife mehrere Bedingungen angeben? Natürlich, empfehle ich aber nicht. So was wird sehr unübersichtlich. Original geschrieben von a8888j Wie kann ich sagen, diese FOR-Schleife wird bei AUfrufen einer anderen Funktion abgebrochen Den gleichen Befehl um ein switch/case abzubrechen kann man auch für For- und While-Schleifen verwenden: break Gruß, StarLord Zitieren
a8888j Geschrieben 17. Mai 2002 Autor Geschrieben 17. Mai 2002 ok soweit so gut, alles gut funktioniert: Ich kann meine Schlange frei auf dem Spielfeld bewegen. Ich hab jetzt gedacht, ich füge eine compare()-Funktion ein, die irgendwie überprüfen soll, ob die Schlange gerade auf der selben Koordinate wie der momentane Apfel ist ( mit random hab ich irgendwo auf dem Spielfeld den Apfel generiert ). Wie löse ich da am besten die Übergabe der Werte? Anna Zitieren
nic_power Geschrieben 17. Mai 2002 Geschrieben 17. Mai 2002 Die einfachste Variante duerfte die Uergabe von vier Parametern an die Funktion "compare" sein: X- und Y-Koordinate des Apfels, sowie aktuelle X- und Y-Koordinate Deiner Schlange. Falls Du spaeter noch weitere Aepfel erzeugen moechtest, wuerde ich empfehlen, diese innerhalb eines Arrays abzulegen, welches Du an die compare Funktion uebergibst. Nic Zitieren
a8888j Geschrieben 17. Mai 2002 Autor Geschrieben 17. Mai 2002 mhhh, wie soll das denn gehen, weil ich hab ne Funktion die Äpfel generiert jedes mal wenn sie aufgerufen wird, und ne andere Funktion, die die Schlange bewegt also apple() bewegung_w() oder _s oder so, je nachdem welche Richtung weil von den jeweiligen 2 Funktionen kann ich dann nur 2 Werte übergeben: apple() --> apple_x, apple_y bewegung --> Koordinate_x, Koordinate_y obwohl die compare aber 4 erwartet. Wie kann ich das lösen? :OD Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.