在C ++中以随机顺序显示5个图像

时间:2011-09-12 12:25:53

标签: c++

我正在用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();

    }

4 个答案:

答案 0 :(得分:2)

这是管道(没有(SDL)库细节):


使用random_shuffle

编辑要好得多:

#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)

srand(http://www.cplusplus.com/reference/clibrary/cstdlib/srand/)和rand(http://www.cplusplus.com/reference/clibrary/cstdlib/rand/)可以帮助你生成随机数。我会将所有图像存储在一个数组中并绘制随机索引。但是不要两次绘制任何索引。由于与显示图像相比,生成随机数是一种便宜的操作,因此您可以重复该过程,直到找到有效的索引。 WaelJ *的答案将帮助您在数组边界内生成数字。