我是 C 的初学者,我只想在 CM-DOS 上创建一个简单的程序,就像 Bejewelled。
我几乎完成了编码,但只有一个问题:
在 Bejewelled 中,当找到匹配项时,这些匹配项上方的元素将替换匹配项创建的空白空间(所谓的“下拉”)。
我遇到了麻烦,因为程序只是忽略了我的下拉代码和
只是按原样打印空白空间。
请帮忙?
我的程序是 a[6][6] 的二维数组。
初始化(b);是一个检查生成的字母表是否与现有字母表匹配的函数。如果是,那么它会将生成的字母重新生成为另一个,直到没有匹配。
它基本上将随机字母从 'A' 到 'D' 填充到 b[8][8] 然后将 b[8][8] 转换为 a[6][6] 然后打印网格。
这是我有问题的下拉代码:
void pull(char a[6][6], char b[8][8])
{
int j=0,i=0,loop=0;
while(loop){
for (i = 1; i <= 5; i++)
{
for (j = 1; j <= 5; j++)
{
if(a[i][j]==' ')
{
a[i][j]=a[i-1][j];
loop=1;
}
else if (a[i][j] == a[0][j])
{
a[i][j] = rand()%4 + 'A';
initialize(b);
}
}
}
}
}
这就是我想要的(例如)
C A B C D C
A B C D B D
D C D !A A A! // Match Found
A B D C B C
B D C A C D
C D C B C C
然后
C A B C D C
A B C D B D
D C D ? ? ? // ? = space
A B D C B C
B D C A C D
C D C B C C
然后
C A B C D C
A B C ? ? ? // ? = space gets swapped upward
D C D D B D
A B D C B C
B D C A C D
C D C B C C
接着
C A B ? ? ?
A B C C D C
D C D D B D
A B D C B C
B D C A C D
C D C B C C
如果?达到最大高度,它会生成新的随机字母到 ?
C A B A* C* B* // *New Alphabets
A B C C D C
D C D D B D
A B D C B C
B D C A C D
C D C B C C