我尝试编写一些随机游走算法来练习C ++和流氓之类的编码但我的函数永远循环并且实际上并没有做任何事情。 " cout<<之前<< ENDL; cin.get和循环中的另一个用于进行错误检查,每次错误都在for循环时,它将我的核心之一计时为100%并且什么都不做。有人可以帮帮我吗?
#include <iostream>
#include <cstdlib>
#include <ctime>
#define MAP_WIDTH 64
#define MAP_HEIGHT 24
#define WALK_DIRECTION 4
#define TILE_FLOOR 0
#define TILE_WALL 1
using namespace std;
int MapArray[MAP_HEIGHT][MAP_WIDTH];
int StepCount = 0;
const int MaxStepCount = 60;
void SetWalls(void);
int GenerateRandom(int a);
void DrunkardsWalk(void);
int main(void){
SetWalls();
DrunkardsWalk();
for(int h = 0; h < MAP_HEIGHT; h++){
cout << endl;
for(int w = 0; w < MAP_WIDTH; w++){
switch(MapArray[h][w]){
case TILE_WALL:
cout << "#";
break;
case TILE_FLOOR:
cout << ".";
break;
}
}
}
return 0;
}
void SetWalls(void){
for(int h = 0; h < MAP_HEIGHT; h++){
cout << endl;
for(int w = 0; w < MAP_WIDTH; w++){
MapArray[h][w] = TILE_WALL;
}
}
}
int GenerateRandom(int a){
int b;
srand(time(NULL));
b = rand() % a;
return b;
}
void DrunkardsWalk(void){
int RandHeight = GenerateRandom(MAP_HEIGHT);
int RandWidth = GenerateRandom(MAP_WIDTH);
int RandDirection = GenerateRandom(WALK_DIRECTION);
cout << "Before while" << endl;
cin.get();
while(StepCount != MaxStepCount){
cout << "After while" << endl;
cin.get();
for(int h = 0; h < RandHeight; h++){
cout << "For h" << endl;
cin.get();
for(int w = 0; w < RandWidth; w++){
cout << "For w" << endl;
cin.get();
if(RandDirection == 1){
MapArray[h+1][w] = TILE_FLOOR;
StepCount++;
}
else if(RandDirection == 2){
MapArray[h-1][w] = TILE_FLOOR;
StepCount++;
}
else if(RandDirection == 3){
MapArray[h][w+1] = TILE_FLOOR;
StepCount++;
}
else if(RandDirection == 4){
MapArray[h][w-1] = TILE_FLOOR;
StepCount++;
}
}
}
}
}
答案 0 :(得分:1)
您只需要为整个执行调用srand(time(NULL));
一次。所以把它移到你的功能之外你可以把它放在main()
这样:
// ..
int main(void){
srand(time(NULL));
//..
return 0;
}
// ..
int GenerateRandom(int a){
int b;
b = rand() % a;
return b;
}
答案 1 :(得分:0)
循环条件
while(StepCount != MaxStepCount)
如果StepCount在每次循环迭代时增加多于一个,那么不是一个好主意。
如果用
替换它while(StepCount < MaxStepCount)
它应该终止。
考虑使用像gdb这样的调试器而不是使用cin.get()的断点。调试效率更高,您可以为每个循环询问计数器的值。