gpt4 book ai didi

c - C 中的函数 "boulders"

转载 作者:行者123 更新时间:2023-11-30 20:38:18 24 4
gpt4 key购买 nike

我正在尝试创建一个名为 boulders 的函数

void boulders (char landscapes[][L_WIDTH], int nrows);

基本上,我应该用巨石和空气填充一个数组,其中巨石由“o”表示,空气由“-”表示。它应该填充随机数量的巨石,最后它必须遵循重力规则。

例如:

--------------O---------
---O----------O-----O---
---OO------O--OO----OO--
---OO-----OOOOOO---OOO--
--OOOO---OOOOOOOO-OOOOO-

到目前为止,我已经让它填充了随机的巨石和空气,但我正在努力研究如何使其遵循重力规则。

这是迄今为止我的代码:

void boulders (char landscape[][L_WIDTH], int nrows) {
srand(time(NULL));
int i, j;//populate with -
for (i=0; i<nrows; i++) {
for (j=0; j<L_WIDTH; j++) {
landscape[i][j] = '-';
}
}

int boulders;//random population of o
for (i=0; i<nrows; i++) {
boulders = rand() % L_WIDTH;
for (j=0; j<boulders; j++) {
landscape[rand()%(nrows)][rand()%L_WIDTH] = 'o';
}
}

//follow gravitational rules
for (i=nrows-1; i<0; i--) {
for (j=0; j<L_WIDTH; j++) {
if (landscape[i-1][j] == 'o') {
landscape[i][j] = 'o';
}
}
}

//print
for (i=0; i<nrows; i++) {
for (j=0; j<L_WIDTH; j++) {
printf("%c", landscape[i][j]);
}
printf("\n");
}
}
main () {
char landscape[6][L_WIDTH];
boulders (landscape, 6);
}

输出:

L_WIDTH定义为80供引用

最佳答案

您需要检查巨石下方是否有空气。

if (landscape[i-1][j] == 'o') {
landscape[i][j] = 'o';
}

不是执行此操作的代码。条件必须是,我处于巨石位置,并且其下方的位置有空气。然后,只有到那时,你才能将位置放在粗体下方,该粗体应该是空气,粗体,然后你就制作了更粗体的空气。最终结果,胆大者下降一位。

事实上,您的迭代从底部迭代上方的 1 行开始,然后向上进行,这是正确的。然而,这并没有考虑到如果一 block 巨石下面有 2 个空气空间,那么它可能必须掉落多个空间。这可以通过多种方式解决。您可能需要设置一个 while 条件。

 int boulderdropped = 1;
while(boulderdropped==1){
boulderdropped = 0;
//do your iteration and if you detect air under a boulder
//set boulderdropped to 1 again.
}

我故意不给你解决方案。只是一些提示。所以你可以制定自己的解决方案。还有比这更有效的解决方案。因为实际上巨石总是从下到上生长。计算一列中巨石的数量足以快速得出最终布局。或者更好的是,您甚至可以随机分配每列中应该有多少巨石。这将很快得到解决方案。我同意你的代码并给出了一些提示,但是如果你阅读上面的文本,你可以想出更好的算法。我再次故意不提供解决方案。您应该能够自己解决。

关于c - C 中的函数 "boulders",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29570659/

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