首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RNG字符打印功能-每页有多行RNG字符?:c

RNG字符打印功能-每页有多行RNG字符?:c
EN

Stack Overflow用户
提问于 2016-11-20 17:27:57
回答 1查看 39关注 0票数 0

因此,我编写了一个函数(以及上述函数调用的RNG函数),将随机数量的星号打印到控制台窗口,直到达到90个空格为止。星号代表汽车的运动,90个车位是轨道的长度。下面我所包含的代码打印了任意数量的星号,直到它到达90个空格,假设fnvMoveSpaces()函数在main中被调用,并且用户按下一个键在每个系统(“暂停”)之后恢复循环,直到90空格被击中。

我的问题是,看看提供的代码,我如何在控制台窗口的同一页上得到四行完全独立的RNG字符打印它需要看起来像一个合法的种族,在同一个屏幕上。

我试过的是:

1)每一行的单独功能,主要调用如下:

  • 不会起作用的,因为它们不会同时发生。结果在四个不同的页面。也就是说,用户必须按一个键才能通过系统(“暂停”),直到它到达90个空格,然后下一个函数执行相同的操作,然后是下一个和下一个。另外,如果循环/函数调用在fnvMoveSpaces()主循环之外,则它们不会打印到同一个页面。

2)在fnvMoveSpaces()函数中放置四个相同的for循环:

  • 这会将四行打印到相同的屏幕上,但它们都会移动相同的增量,因为它们是从相同的RNG值中提取的。

基本上,每一行的RNG值都需要完全独立于彼此。对每一行都有不同的种子值是答案吗?我不知道..。

代码语言:javascript
复制
   /* - - DEFINED - - */
// Constants of RNG for spaces moved
#define TRACK_LENGTH 90
#define MAX_MOVE_SPACES 10
#define MIN_MOVE_SPACES 1


// Assume fnvMoveSpaces call in main


// Function to create random number for car movement
int fniRandGenMove()
{
    // Declare
    int randInt;

    // Initialize random seed
    srand(time(NULL));

    // Formula for RNG (1-10) based on global-defined numbers
    randInt = (rand() % (MAX_MOVE_SPACES - MIN_MOVE_SPACES + 1) + MIN_MOVE_SPACES);

    return (randInt);

}


void fnvMoveSpaces()
{
    // Declare
    int i;
    int iMoveSum;

    // Outer for loop to maintain the sum of asterisks
    for(iMoveSum = 0; iMoveSum <= TRACK_LENGTH; iMoveSum += fniRandGenMove())
    {
        // Inner for loop to print asterisks
        for(i = 0; i < iMoveSum; i++)
        {
            putchar('*');

        }

        // Newline for next line of asterisks
        printf("\n");

        /*
        I'm assuming three more for loops... I tried a bunch of
        combinations of things, even making new iMoveSums
        (2, 3 and 4) and doing for loops.
        But, no luck.

        I should also not that making four separate functions for each
        line of asterisks will not work, unless there is a way to call all
        four at once in main. Separate functions results in separate screens
        in the console window. In addition, if the four 'putchar' blocks
        are not in the same loop as a whole, the first one will print, hit
        90 spaces, then the second, etc... They aren't on the same screen.
        */

        // System pause to wait for user
        system("PAUSE");
        // Clear screen
        system("CLS");

    }

}

为了澄清,控制台窗口中的当前输出如下:

*

(以枚举的形式写入;没有句点实际输出。)

直到90个空格被击中,程序才会关闭。还请记住,每次用户按下系统后的键(“暂停”),直到90,它都会以随机递增的方式打印。所以,并不是所有的星号都一次打印出来。

我想要它输出的是这样的东西:

***

***

**.*

*

每一行随机产生自己的独立运动增量,直到90个空格被击中。

希望这能有所帮助。

谢谢,

巴格

EN

回答 1

Stack Overflow用户

发布于 2016-11-22 02:59:26

好吧,我搞定了。请记住,在不久的将来,我打算用一些文件I/O替换这些结构。而且,fniRandGenMove和问题一样,只需将种子移到main,所以它只能种子一次。

但它运作得很完美..。通过控制台窗口的“汽车”赛跑!其实真的很干净。

代码语言:javascript
复制
    void fnvMoveSpaces(int iAutoManual)
{
    // Declare
    int i, j;

    // Declare structures
    struct Car stCars[4];
    stCars[0].iPosition = 0;
    stCars[1].iPosition = 0;
    stCars[2].iPosition = 0;
    stCars[3].iPosition = 0;
    stCars[0].iCarNumber = 1;
    stCars[1].iCarNumber = 2;
    stCars[2].iCarNumber = 3;
    stCars[3].iCarNumber = 4;


    struct Car furthestCar;
    furthestCar.iPosition = 0;
    furthestCar.iCarNumber = 0;

    do
    {
        for(i = 0; i < 4; i++)
        {
            if(stCars[i].iPosition <= TRACK_LENGTH)
            {
                stCars[i].iPosition += fniRandGenMove();

            }

            printf("Car %d\n\t", stCars[i].iCarNumber);

            for(j = 0; j < stCars[i].iPosition; j++)
            {
                printf("*");

            }

            if (stCars[i].iPosition > furthestCar.iPosition)
            {
                furthestCar.iPosition = stCars[i].iPosition;
                furthestCar.iCarNumber = stCars[i].iCarNumber;

            }

            printf("\n");

        }

        system("PAUSE");
        system("CLS");

    } while(furthestCar.iPosition < TRACK_LENGTH);


    printf("The winning car is #%d.\n", furthestCar.iCarNumber);

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40707073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档