Snake Ebenen
-
Wie kann man in C++ zeitlich eine schleife schneller ablaufen lassen?
Ginge es nicht über die Variable time_t time?Wollte ein Snake ähnliches Programm schreiben, in denen die Ebenen einstellbar (die Schnelligkeit der Schlange) sind.
-
New-b schrieb:
Wie kann man in C++ zeitlich eine schleife schneller ablaufen lassen?
Du könntest den Prozessor übertakten, dann müsste jede Schleife ein wenig schneller sein.
New-b schrieb:
Ginge es nicht über die Variable time_t time?
Doch, genau! Du musst eine Variable vom Typ time_t vor oder in der Schleife deklarieren, also bei mir gehts dann auf jeden Fall schneller!
*kopfschüttel* Wie willst du denn dein Programm schneller oder langsamer laufen lassen? Das, was du tun kannst, ist, künstliche Pausen in dein Programm einzubauen, z.B. mit Sleep. Je nachdem, welche Geschwindigkeit du brauchst, kannst du die Pause länger oder kürzer machen. Normalerweise lässt man sowas in Zeitschritten ablaufen, in einem Zeitschritt bewegt sich die Schlange eine Einheit weiter und du hast X Zeitschritte pro Sekunde. Die heutigen Prozessoren sind aber relativ schnell, also musst du eine Pause einbauen, sonst hast du 100000 Zeitschritte pro Sekunde. Also kannst du nach jedem Zeitschritt eine Pause von einer zehntel Sekunde oder so einbauen. Soll sich die Schlange schneller bewegen, machst du die Pause kürzer.
-
Boring
-
Ich wollte auch nicht das Programm schneller ablaufen lassen.
Sorry, Ausdrucksfehler.
Ich weiß ist langweilig. Aber man will nicht aus der Übung kommen. Beim Zivildienst 12 Stunden Bereitschaft kann schon langweilig sein.
-
Tut mir auch Leid, dass mein Post eben nicht besonders freundlich war
Bin auch eben erst heimgekommen und war total platt..Aber war's halbwegs verständlich oder hilfreich? Sonst müsstest du mal zeigen, wie deine Haupt-Schleife oder dein Konzept aussieht

-
@New-c:
Genau wegen solcher Beiträge bin ich absolut dafür das Gäste hier keine Schreibrechte haben. Dann können solche Trottel wie du nichts mehr schreiben, sind doch zu dumm um sich zu registrieren...Zum Thread:
Das Problem bei einer solchen Implementierung ist, dass die Geschwindigkeit dann immer vom Prozessor abhängig ist. Willst du z.B. Highscores machen, lässt man seinen PC mit einer Softwarebremse laufen und die Fairness ist dahin.Edit: ich weiß auch nicht was ich gerade geschrieben habe, wenn du das so machst wie Badestand das beschrieben hat, gibts keine Probleme in der Hinsicht

-
Orientierung an C Programmieren von Anfang (Erlenkötter). Zur Win-Api.
Hier der Schleifenaufbau:
// "Die Test-Hauptschleife" ob time funktioniert for(x=fenster.dwSize.X;x>=69;x--){ position.X=x; position.Y=12; SetConsoleCursorPosition(console,position); WriteConsoleOutputCharacter(console,&block,1,position,&dummy); time(&jetzt); while(difftime(time(NULL),jetzt)<1); position.X=x+3; //+a // hochzählvariable für gefressene Teile position.Y=12; SetConsoleCursorPosition(console,position); WriteConsoleOutputCharacter(console,&blank,1,position,&dummy); }Schleife wird über While Ausdruck nicht schneller. Wahrscheinlich falscher Ansatz.
-
Eventuell sind die Konsole-Funktionen seeehr langsam? Was passiert denn, wenn du die while-Schleife rausnimmst? Die wartet nämlich glaubich auch nur eine Millisekunde.
Ansonsten könntest du die x-Position der Schlange schneller hochzählen?edit: Ach, ich Trottel
Was machst du denn mit dem position.X = x;? Du solltest die Position der Schlange unabhängig von der Schleifen-"x"-Variable verändern!
Wie wärs so:?position.X = 0; position.Y = 12; for ( int i=0; i<70; i++ ) { // Zeichnen SetConsoleCursorPosition(console,position); WriteConsoleOutputCharacter(console,&block,1,position,&dummy); // Gewisse Zeit abwarten time( &jetzt ); // Für "sonstwas" irgendeinen Zahlenwert einsetzen, evtl rumprobieren while ( difftime( time(NULL), jetzt) ) < sonstwas ) ; // In der Schleife nix machen, ist so deutlicher als wenn das Semikolon am Ende der while-Schleife ist // Schlange weiter nach rechts setzen position.X += 1; }
-
also schleife an sich kannst nicht schneller machen als sie ist, ausser durch codeoptimierung. Was du brauchst ist nen realtime bezug über die zeit was halt gezeigt wurde von Strand. Bei "sonstwas" setzt wie gesagt zahlenwert ein, wobei ein kleiner wert bedeutet das die schlange schnell schlängelt und großer wert halt langsam. Daher geschwindigkeit der schleife lässt sich nur erhöhen wenn der ausführbare code darin weniger wird, im gegensatz zum verlangsamen das geht immer^^, und das auch vielen wegen *g
-
Tobias W schrieb:
@New-c:
Genau wegen solcher Beiträge bin ich absolut dafür das Gäste hier keine Schreibrechte haben. Dann können solche Trottel wie du nichts mehr schreiben, sind doch zu dumm um sich zu registrieren...Zum Thread:
Das Problem bei einer solchen Implementierung ist, dass die Geschwindigkeit dann immer vom Prozessor abhängig ist. Willst du z.B. Highscores machen, lässt man seinen PC mit einer Softwarebremse laufen und die Fairness ist dahin.Edit: ich weiß auch nicht was ich gerade geschrieben habe, wenn du das so machst wie Badestand das beschrieben hat, gibts keine Probleme in der Hinsicht

Da sagt ja der Richtige, dass ich dumm bin.
Der noch nicht einmal weiß was er pappelt. :p
-
Leute will niemanden auf die füße treten aber denke nicht das sowas hier von nöten ist. new c dein beitrag war nicht wirklich hilfreich und von tobias auch nicht. steht einfach drüber fertig, ist doch nicht schwer sich ein wenig sowas zu verkneifen, denke ich, oder liege ich da so falsch. ich hoffe nicht sonst wäre das echt schade.
-
@ NEW-C bzw. Badestrand:
Habe jetzt die While Schleife weggelassen.
Cool. Es klappt. Habe jetzt lediglich mit Sleep rumprobiert.Läuft jetzt je nach Zahlenwerten für Sleep schneller o. langsamer. Unfähr wäre Sleep(1), hehe.
position.X=0; position.Y=12; for(x=0;x<75;x++){ SetConsoleCursorPosition(console,position); WriteConsoleOutputCharacter(console,&block,1,position,&dummy); time(&jetzt); Sleep(50); position.X += 1; }