- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个名为 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/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我是一名优秀的程序员,十分优秀!