Frogger Klon, Denkanstoß
-
Hi, ich möcht einen Frogger Klon basteln, hab mir schon überlegt wie ich das programmieren muss um mein Ziel zu erreichen.
Ich zeichne ja verschiedene Autos auf den Schirm die sich schneller und langsamer bewegen, wenn ich die also zeichne kenne ich nur den Befehl Sleep() um die Autos variabel fahren zu lassen.
Problem is nur wenn ich es mit Sleep mache, stockt ja das ganze Programm, wie kann ich es machen, das verzögert wird, aber das Hauptprogramm weiterläuft.
z.B. Im Konsolenfenster zählt man jede Sekunde i++ und gibt es aus.
Eine zweite Laufvariable zählt jede 10sek y++ rauf.
Wie mache ich es das beide Unterprogramme unabhängig voneinader laufen, und sich nicht gegenseitig stocken.
-
Auf Anhieb würden mir da Threads einfallen...
-
wenn du jetzt eine variable immer nach einer sekunde hochzählst und dann mit örgendeiner anweisung überprüfst ob der wert den du aller sekunden hochzählst durch 10 teilbar ist ohne rest und dann die andere variable hochzählst.
habe schonmal einen counter programmiert da habe ich das auch so gemacht.
wenn die variable sek 60 erreicht hat habe ich die variable min erhöht.
hoffe konnte dir helfen
MFG
-
Da du ja eh schon einen Zähler mitlaufen lässt, musst du bei deinen Autos eigentlich nur noch speichern bei welchem Zählerstand sie sich bewegen müssen. Auto 1 z. B. bewegt sich alle 2 Sekunden (i%2==0) und Auto 2 bewegt sich alle 3 Sekunden (i%3==0).
Ich glaube FrauBolaIstDumm hat das auch so ähnlich gemeint.
-
Gute Idee ich laß generell einen Zähler mitlaufen und überprüfe dann mit einer if-Abfrage ob ich das Auto zeichnen soll.
Generell wollte ich es so machen:
{ 1.autozeichnen();//Gleicher Programmcode, eben nur unterschiedliche Farbe und 2.autozeichnen();//Geschwindigkeit der Autos } void 1.autozeichnen() { gotoxy(x,y) //Stelle den Cursor an die Stelle cout<<"*" //Zeichne mein "Auto" Sleep(500); //Mit Sleep() wollte ich die Geschwindigkeit des Autos bestimmen //geht aber nicht weil Sleep das ganze Programm verzögert. }
So würden nun mein 1. Auto verzögert werden, aber auch mein 2. Auto weil Sleep() mein ganzes Programm verzögert. So ist also die Idee mit dem Counter garnicht schlecht.
Um mehrere Befehle unabhängig voneinander zu verzögern komme ich um Threads wohl nicht rum, mal sehen was sich machen läßt.
-
Natürlich kommst du um Threads herum! Hast du meinen Beitrag nicht gelesen?
Beispiel:
for(i=0;;++i) { if(i%5==0) { auto1.autozeichnen(); } if(i%7==0) { auto2.autozeichnen(); } Sleep(100); }
Eine wunderbare Lösung ohne Threads.
Aja übrigens noch was. Man sollte den Namen einer Variablen (Struktur, Klasse, ...) niemals mit einer Zahl beginnen lassen und er sollte erst recht nicht nur aus einer Zahl bestehen!
PS: Rein vom logischen her wärs noch besser, wenn du 5 bzw. 7 (aus dem Beispiel) in einer Eigenschaft deiner Klasse abspeicherst.