我正在用C ++创建一个名为Simon Says的游戏,并希望能够点击空格键并显示我已加载到游戏中的5个随机图像。每当我点击空格键时,我希望图像的顺序与前一次不同,因此我需要能够有一个命令,一旦我按下空格键就可以随机显示5个不同的图像。 以下是我必须按设定顺序显示图像的代码:
if(key_down(VK_SPACE))
{
clear_screen();
a();
refresh_screen();
delay(1000);
clear_screen();
b();
refresh_screen();
delay(1000);
clear_screen();
e();
refresh_screen();
delay(1000);
clear_screen();
d();
refresh_screen();
delay(1000);
clear_screen();
g();
refresh_screen();
delay(1000);
clear_screen();
c();
refresh_screen();
delay(1000);
clear_screen();
refresh_screen();
}
答案 0 :(得分:2)
这是管道(没有(SDL)库细节):
编辑要好得多:
#include <iostream>
#include <algorithm>
void a() { std::cout<<"a"<<std::endl; }
void b() { std::cout<<"b"<<std::endl; }
void c() { std::cout<<"c"<<std::endl; }
void d() { std::cout<<"d"<<std::endl; }
void e() { std::cout<<"e"<<std::endl; }
int main()
{
typedef void(*flashfunc)();
static flashfunc flashes[] = {a,b,c,d,e};
std::random_shuffle(flashes, flashes+5);
for (flashfunc *flash=flashes; flash!=flashes+5; ++flash)
(*flash)();
return 0;
}
<子> 我最初忘记了random_shuffel并想出了这种做转移洗牌的方法:
#include <ctime>
template <typename T>
bool shuffled(const T&, const T&)
{
int r = rand() / ( RAND_MAX / 2 );
return 0 != r;
}
// ...
srand(time(NULL));
std::stable_sort(flashes, flashes+5, shuffled<flashfunc>);
请注意,使用这种方式进行排序时,需要稳定排序,因为排序谓词不是确定性的。
答案 1 :(得分:1)
标准算法std::random_shuffle
会将数组(或矢量等)放入随机顺序。
从你的代码中可以看出,你有一个不同的函数来绘制每个图像,所以在这种情况下,你洗牌的东西应该是函数指针。然后,在您的混洗数组(或向量等)上循环(直接或通过std::for_each
),依次调用每个数据并执行清除/刷新/延迟。
答案 2 :(得分:0)
您可以使用以下功能:
//returns random number between 0 and 4, inclusive
int getRandomInt() {
return rand() % 5;
}
但是,您必须先使用srand(someNumber)
才能首次使用它。系统时间是someNumber的一个很好的候选者,以确保每次运行程序时都不使用相同的数字。
答案 3 :(得分:0)