我正在创建一个琐事游戏,并且正在运行一个随机函数,但函数数组中存在问题,但我不希望再次选择该函数。有办法吗?
这是我的数组: 编辑:
void (*level1_sports_functionptr[3])(void) = {
level1_sportstrivia1,
level1_sportstrivia2,
level1_sportstrivia3
};
void (*level1_usa_functionptr[3])(void) = {
level1_usatrivia1,
level1_usatrivia2,
level1_usatrivia3
};
void (*level1_world_functionptr[3])(void) = {
level1_worldtrivia1,
level1_worldtrivia2,
level1_worldtrivia3
};
答案 0 :(得分:0)
我假设这是某种游戏循环。无论如何,我想到了两种不同的策略:
第一个策略:声明一个单独的函数指针,该指针将继续您的游戏循环。调用特定函数后,请使用continue函数更新数组。结果是每次从阵列中选择一个已经运行的项目时,都会触发重做。对于用户而言,它看起来总是会调用一个新问题。您需要统计已调用的问题数,以便知道游戏结束的时间。
第二个策略:每次调用函数时,将数组中的所有元素向上移动以替换刚调用的元素。因此,如果您的数组为[f1,f2,f3,f4]并调用f2,您将向上移动元素,因此您的数组现在看起来像[f1,f3,f4]。您将需要跟踪需要调用的函数数量,并在每次调用函数时递减该索引,以了解(1)从(0..3变为0..2的范围。下次)和(2)知道您什么时候没问题并且游戏结束了。
我敢肯定还有其他许多其他策略。
答案 1 :(得分:0)
创建一个以0、1、2、3,...初始化的整数数组,直到问题数组中的元素数量-在您的示例中仅为0、1、2。
然后将随机播放算法应用于此数组,以使值的顺序随机化。
然后通过按顺序在随机排列的数组中选择一个索引来选择问题。