我正在進行C複習並將棋盤遊戲作爲練習。棋盤遊戲是「將軍之戰」,與國際象棋非常相似,因爲它使用8x8平方的棋子。rand()在模操作後不會生成隨機數
基本上,板的實現是一個特定結構的二維數組。因此,董事會的一個平方可以通過其索引進行訪問,就像x-y座標系統一樣。
現在我決定隨機散佈這些棋子,邏輯就是生成一個隨機的xy座標,檢查一塊棋子是否已經駐留在棋盤上的這些座標上,並且如果棋子可用。如果不是,則生成另一個隨機x-y座標。這一直持續下去,直到所有部分都被解決。
我使用蘭特(),以產生在特定範圍內的隨機數(我使用模運算符和一個填補數支配的範圍內。參見下面的代碼)
但是蘭特()沒有按」 t似乎給了我足夠多的隨機數字。我一遍又一遍地重複同樣的作品發行! (但有趣的是,我可以在Mac上生成不同的發行版,但發行版仍然一致!)
請參閱下面的代碼,瞭解如何使用rand()生成帶有範圍的數字。
void initPieces(){
int player, rank_index, population, rand_min, rand_x, rand_y;
for(player = 1; player <= 2; player++){
if(player == 1){
rand_min = 5;
}else{
rand_min = 1;
}
for(rank_index = 0; ir < sizeof ranking/sizeof ranking[0]; rank_index++){
for(population = 0; population < getRank(rank_index)->population; population++){
do{
rand_x = (rand() % 8) + 1;
rand_y = (rand() % 4) + rand_min;
}while((getGrid(rand_x,rand_y))->has_piece == 1);
assignPiecetoGrid(player,rank_index,rand_x,rand_y);
}
}
}
}
你在用srand()'在某處播種發電機嗎? – 2012-01-04 09:30:51
我愛它當有人刪除我的意見。這是管理員的事嗎? – 2012-01-04 09:33:33
這是*實際的*可編譯的代碼嗎?它看起來並不像我這樣編譯,例如對於(人口= 0;人口人口;人口++)'? –
2012-01-04 09:38:36