我正在进行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