Ich studiere C++, um ein Spiel zu machen und ich konnte jede Sekunde eine Zufallszahl mit den Funktionen von srand erzeugen. Aber ich wollte, dass die Nummer alle 2 Sekunden anders ist.Generieren Sie alle 2 Sekunden eine Zufallszahl? C++ Srand
Antwort
Sagen Sie t
ist die aktuelle Zeit in Sekunden (time(0)
). Es ist offensichtlich, dass sich t
einmal pro Sekunde ändert. Dann ändert sich t/2
wegen der Rundung alle zwei Sekunden.
Hier ist eine einfache Möglichkeit, den Code zu beheben.
ein clock()
in einer unendlichen Schleife while
Setzen und die Taktzählung lassen, so dass, wenn sie zwei Sekunden erreicht, es rand()
löst eine neue Zufallszahl zu erzeugen. Setzen Sie die clock()
zurück. Wiederhole unendlich.
Nun ist die Mathematik hinter:
Wie Sie bereits wissen, ist Delta-Zeit das letzte Mal, abzüglich der ursprünglichen Zeit.
dt = t - t0
Diese Delta-Zeit, ist aber einfach die Menge an Zeit, während im while
Schleife durchläuft.
Die Ableitung von eine Funktion stellt eine infinitesimale Änderung in der Funktion in Bezug auf eine seiner Variablen. Unser deltaTime
.
Die Ableitung einer Funktion in Bezug auf die Variable ist definiert als http://mathworld.wolfram.com/Derivative.html
f(x + h) - f(x)
f'(x) = lim -----------------
h->0 h
Zuerst eine Zeit erhalten, d.hTimeZero = clock()
, Referenz.
Dann subtrahieren Sie diese Zeit von einer neuen Zeit, die Sie gerade erhalten haben, und teilen Sie sie durch h
. h
ist CLOCKS_PER_SEC
. Jetzt Delta-Zeit ist
deltaTime = (clock() - TimeZero)/CLOCKS_PER_SEC;
Und wenn deltaTime > secondsToDelay
, Sie erzeugen eine neue Zufallszahl.
Putting, dass alle in den Code ergibt dies:
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
cout << "Generate a new random number every 2 seconds \n\n";
// create a clock and start timer
clock_t TimeZero = clock(); //Start timer
double deltaTime = 0;
double secondsToDelay = 2;
bool exit = false;
// generate random seed using time
srand(time(0));
while(!exit) {
// get delta time in seconds
deltaTime = (clock() - TimeZero)/CLOCKS_PER_SEC;
cout << "\b" << secondsToDelay - deltaTime << "\b";
// compare if delta time is 2 or more seconds
if(deltaTime > secondsToDelay){
cout << " ";
// generate new random number
int i = rand() % 100 + 1;
cout << "\nNew random : " << i << " \n";
//reset the clock timers
deltaTime = clock();
TimeZero = clock();
}
}
return 0;
}
- 1. Wie generieren Sie eine Zufallszahl in C#?
- 2. generieren Zufallszahl auf 2 Dezimalstellen
- 3. Zufallszahl generieren
- 4. Zufallszahl 10 Mal generieren
- 5. Srand mit Fäden - C
- 6. generieren Zufallszahl - Höheren Wert
- 7. Zufallszahl ohne Duplizierung generieren
- 8. Generieren Sie eine Zufallszahl mit dem größten Bereich in Node.js?
- 9. Generieren Sie eine Zufallszahl in Docker-Compose-Datei?
- 10. elm generieren Zufallszahl
- 11. Generieren Sie eine eindeutige Zufallszahl für jeden Array-Wert
- 12. Generieren einer Zufallszahl ohne Bereich
- 13. Funktion srand in C++
- 14. Visual Basic generieren Zufallszahl
- 15. Wie generiert man eine 12-stellige Zufallszahl in C?
- 16. PostgreSQL: jede Stunde eine Zufallszahl generieren
- 17. Generieren Sie eine Zufallszahl NICHT durch x teilbar?
- 18. Generieren Sie eine Zufallszahl 4 mal kein wiederholendes Javascript?
- 19. PHP eine Zufallszahl zwischen 2 Sätze in einem Zeitintervall erzeugen
- 20. Generieren einer Zufallszahl unter super.ViewDidLoad
- 21. Generierung Zufallszahl von 2^30
- 22. Führen Sie eine Aufgabe alle x Sekunden
- 23. kurze Zufallszahl in Java generieren?
- 24. Generieren Sie alle möglichen Permutationen in C
- 25. Faker.js Zufallszahl zwischen 2 Werten
- 26. YouTube Video Stopp an alle 2 Sekunden
- 27. Wie kann ich eine Zufallszahl größer oder kleiner als eine vorherige Zufallszahl generieren?
- 28. Generieren Sie eine Zufallszahl mit einer zufälligen numberlength in Objective-C
- 29. eine Zufallszahl erhalten, wenn 2-Array verschmelzenden
- 30. Generieren Sie alle möglichen Kombinationen aus 2 Foreign Keys
nicht 'rand' Verwenden Sie,' srand' und 'Time'. Es gibt bessere Alternativen: http://en.cppreference.com/w/cpp/header/chrono, http://en.cppreference.com/w/cpp/numeric/random, http://en.cppreference.com/w/cpp/header/zufällig –