需要帮助为C中的记忆匹配游戏生成随机字符

时间:2016-12-16 14:50:28

标签: c

我正在用c开发一个控制台游戏: 我已经编写了函数来在控制台中打印游戏地图(像记忆匹配一样), 在每个应该包含一个字母的空格中都被替换为"?"符号

知道我设法用这个想法开发了这个功能:

  rand()%26 + 65

据我所知,以下命令允许我使用整数打印字母表中的字母。 我的问题是要弄清楚如何从字母表中生成随机字符对,并将它们放置以制作完全内存工作游戏。
我对这个游戏的处理开发感到很困惑,我不知道在哪里看。 有人对如何操作有任何想法

1 个答案:

答案 0 :(得分:0)

请注意, rand() 功能是 pseudo random 号码生成器。即使播种其伴侣功能: srand() ,也不能保证产生纯粹的随机数。要以您描述的方式成功使用它,即从一些最小值到最大值获取唯一值列表,它需要帮助......

以下是与rand()伪随机生成器一起使用的伴随函数的示例,以提供值列表,保证唯一,介于最小值和最大值之间:

摘要:int random = (rand()/32767.0)*max;将返回一个不大于max的数字,然后测试值> = some min。

#include <stdlib.h> //defines rand(), srand() and RAND_MAX

int randomGenerator(int min, int max)
{
    int random, trying;
    srand(clock());//seed the rand() function before using it
                   //call frequency must be less than clock tick frequency
                   //or values will repeat. 
                   //  (problem with the word pseudo)
    trying = 1;    
    while(trying)
    {
        //random = (rand()/32767.0)*max;
        random = (rand()/(float)RAND_MAX)*(max+1);
        (random >= min) ? (trying = 0) : (trying = 1);
    }
    return random;
}

要获取所需唯一值的完整列表,请保留以前获取的值的列表(在“A”到“Z”内)并在返回时排除它们,直到您通过唯一集合排序。也许就像这个例子:

BOOL filled(int *p, size_t size)
{
    int i;
    BOOL results = TRUE;
    for(i=0;i<size;i++)
    {
        if(p[i] == 0) 
        {
            results = FALSE;
        }
    }
    return results;

}

两个功能的示例用法:

int main(void)
{
    int result, i;
    int c='g';
    int previous['Z'-'A'+1] = {{0}}; //size array to contain alphbet, 
                                     //initialize all elements 
    size_t size = sizeof(previous)/sizeof(previous[0]);

    while(c != 'q')
    {
        while(!filled(previous, size))
        {
            result = randomGenerator('A', 'Z');
            if( previous[result - 'A'] != 1)
            {
                previous[result -'A'] = 1;
                printf("%c\n", result);
            }
            Sleep(1); // 1ms delay to avoid aliasing the clock() function
        }
        printf("finished!\n");
        printf("'q' to quit, any other key to continue\n");
        c = getchar();
        memset(previous, 0, size*sizeof(int)); 
    }
    return 0;
}