gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:53:50 26 4
gpt4 key购买 nike

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

我的问题是,查看提供的代码,如何在控制台窗口的同一页面上获得四行完全独立的 RNG 字符打印?强>它需要在同一个屏幕上看起来像一场合法的比赛。

我尝试过的:

1) 每行都有单独的函数,在 main 中调用:

  • 不起作用,因为它们不会同时发生。结果是四个不同的页面。 IE。用户必须按一个键才能进入系统(“PAUSE”),直到它达到 90 个空格,然后下一个函数执行相同的操作,然后是下一个,然后是下一个。此外,如果循环/函数调用位于 fnvMoveSpaces() 主循环之外,它们不会打印到同一页面。

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

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

基本上,每条线的 RNG 值需要完全相互独立。每行有不同的种子值是答案吗?我不知道...

   /* - - 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 个空格,程序才会关闭。另请记住,每次用户在系统(“PAUSE”)后按下一个键时,它都会以随机增量打印,直到 90。因此,并非所有星号都会立即打印。

我希望它输出的是这样的:

*...**

*........**

**................................*

**......................*

每行随机生成自己独立的移动增量,直到击中 90 个空格。

希望有帮助。

谢谢

装袋机

最佳答案

好的,我已经解决了。请记住,在不久的将来的某个时候,我打算用一些文件 I/O 替换这些结构。另外,fniRandGenMove与问题中的相同,只是将种子移动到main,所以它只种子一次。

但它工作得很好......“汽车”在控制台窗口上竞速!它实际上非常整洁。

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

}

关于c - RNG 字符打印功能 - 每页有多于一行 RNG 字符? : C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40707073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com