lavorando ad un altro progetto e siamo tenuti a utilizzare il mt19937
per la generazione di numeri casuali. Dovremmo scegliere casualmente una coordinata xey basata sulla sezione di una griglia. Per esempio, la mia funzione passa minX
, maxX
, minY
, maxY
a una funzione. La mia coordinata x funziona bene. Continuavo a ricevere errori casualmente durante i test. A volte viene eseguito 10 volte senza problemi, quindi viene visualizzato un errore. Inserisco alcune linee di auto-debug per visualizzare ciò che il generatore mt sta effettivamente generando. Come ho detto, x funziona bene e a volte lo fa. Sarà casuale dammi un -3.437.892 o 9743903.Perché il mio generatore casuale mt19937 mi dà risultati ridicoli? C++
Ecco il mio codice:
void DungeonLevel::generateRoom(int minX,int maxX,int minY, int maxY){
mt19937 mt;
mt.seed(time(NULL));
// Calculate random width and height; these both range
// from 4-13
int iRandomWidth = 4 + (mt() % 10);
int iRandomHeight = 4 + (mt() % 10);
// Calculate the start points in both X and Y directions
int iStartX;
iStartX = mt() % (maxX - iRandomWidth);
cout << "xStart: " << iStartX<<endl; //cout flag
while ((iStartX > maxX) && (iStartX >= 0)){
cout << "xStart: " << iStartX<<endl;//cout flag
iStartX = mt() % (maxX - iRandomWidth);
}
int iStartY = 0;
iStartY = mt() % (maxY - iRandomHeight);
cout<<"yStart: " <<iStartY<<endl; //cout flag
while ((iStartY > maxY)){
cout<<"yStart: " <<iStartY<<endl;//cout flag
iStartY = (mt() % (maxY - iRandomHeight));
}
// Iterate through both x and y coordinates, and
// set the tiles to room tiles
// SINGLE ROOM
for(int x = iStartX; x <= iStartX + iRandomWidth; x++){
for(int y = iStartY; y <= iStartY + iRandomHeight; y++){
if (y == iStartY){
dungeonGrid[y][x] = '-';
}
else if (iStartX == x){
dungeonGrid[y][x] = '|';
}
else if (y == (iStartY+iRandomHeight)){
dungeonGrid[y][x] = '-';
}
else if (x == (iStartX+iRandomWidth)){
dungeonGrid[y][x] = '|';
}
else {
dungeonGrid[y][x] = '.';
}
}
}
}
Sono confuso sul motivo per cui accade solo con iStartY. X funziona bene. – ModdedLife
'mt19937' è destinato a essere il [motore di numeri casuali C++ 11] (http://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine) o un tipo definito dall'utente? –
Quali valori avete per i parametri (minX, maxX ecc.) In questi casi? – Slava