我正在编写一个拼字游戏程序,它会随机生成一个包含7个字母的数组。
这是我的代码,它生成字母并将它们放入数组中,效果很好。
char randomletters (char letters[8], int i){
srand((time(NULL)));
for(i=0; i<7; i++){
letters[i] = (rand() % 26 + 65);
}
return letters[8];
}
我唯一的问题是如何使用标准的拼字游戏分发来确定如何限制某个字母出现的次数。比如'B'只能出现两次。我在考虑这样做的方法是26,如果语句计算每个字母的数量,那么它是否会重新开始?看起来这并不是最好的方式。
不寻找代码答案,只是关于如何实现代码的想法。
提前致谢。
答案 0 :(得分:1)
char array[] = "AAAAAAAAABBCCD";
unsigned remaining = sizeof array;
int get_a_letter(void)
{
unsigned idx;
int sample;
if (!remaining) return EOF;
idx = urnd(remaining);
sample = array[idx] ;
array [idx] = array [--remaining];
array [remaining] = sample; // @Note:1
return sample;
}
urnd(xxx)
是一个函数,应返回0到(xxx-1),包含之间的随机值。
更新
@ Note1:此语句不是绘制随机字母所必需的,但它有助于下一轮:重置remaining = sizeof array;
就足以重新开始。 (数组将被加扰,但所有首字母仍然存在)
答案 1 :(得分:0)
创建一个struct数组,以保留一个字母及其使用次数。随机选择0到25之间的数字,如果所选单元格的数量> 0,则将字母添加到机架中减少字母数,重复直到机架计数7个图块,重复整个思考,直到剩下少于7个字母。