gpt4 book ai didi

c - "Pulling down"将二维数组的元素移动到数组内的空白处

转载 作者:行者123 更新时间:2023-11-30 17:48:30 25 4
gpt4 key购买 nike

我是 C 初学者,我只想在 CM-DOS 上创建一个像 Bejewelled 一样的简单程序。

我几乎完成了编码,但只有一个问题:

在《 gem 迷阵》中,当找到匹配项时,这些匹配项上方的元素将替换由匹配项创建的空白空间(即所谓的“下拉”)。

我遇到了麻烦,因为程序只是忽略了我的下拉代码

仅按原样打印空白区域。

请帮忙?

我的程序是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

最佳答案

void nomatch(char a[6][6])
{
int i, j,k;
int ini;

ini=0;
do {
for (k = 0; k < 7; k++)
{
for (i = 0; i < 7; i++)
{
for (j = 0; j < 7; j++)
{
if (a[i][j] == a[i+1][j] && a[i+1][j] == a[i+2][j])
{
a[i + 1][j] = get_randltr(a[i][j]);
a[i + 2][j] = get_randltr(a[i][j]);
ini=1;
}
if (a[i][j] == a[i][j+1] && a[i][j+1] == a[i][j+2])
{
a[i][j + 1] = get_randltr(a[i][j]);
a[i][j + 2] = get_randltr(a[i][j]);
ini=1;
}
else
ini=0;
}
}
}
}while(ini);
}

void initialize(char a[8][8])
{
int i, j;
int ini;

ini=0;
do {
for (i = 1; i < 7; i++)
{
for (j = 1; j < 7; j++)
{
if (a[i][j] == a[i-1][j] && a[i-1][j] == a[i-2][j])
{
a[i - 1][j] = get_randltr(a[i][j]);
a[i - 2][j] = get_randltr(a[i][j]);
ini=1;
}
if (a[i][j] == a[i+1][j] && a[i+1][j] == a[i+2][j])
{
a[i + 1][j] = get_randltr(a[i][j]);
a[i + 2][j] = get_randltr(a[i][j]);
ini=1;
}
if (a[i][j] == a[i][j-1] && a[i][j-1] == a[i][j-2])
{
a[i][j - 1] = get_randltr(a[i][j]);
a[i][j - 2] = get_randltr(a[i][j]);
ini=1;
}
if (a[i][j] == a[i][j+1] && a[i][j+1] == a[i][j+2])
{
a[i][j + 1] = get_randltr(a[i][j]);
a[i][j + 2] = get_randltr(a[i][j]);
ini=1;
}
else
ini=0;
}
}
}while(ini);
}

void pulling(char b[6][6])
{
int rowc, i, colc,empty,temp;

for(colc = 0; colc < 5; colc++)
{
for (i = 0; i < 5; i++)
{
for (rowc = 0; rowc < 5; rowc++)
{
empty = b[rowc][colc];

if (empty != '*')
{
if(b[rowc+1][colc] == '*')
{
temp = b[rowc][colc];
b[rowc][colc] = b[rowc+1][colc];
b[rowc+1][colc] = temp;

}
}
}

}

}
for (rowc=0; rowc<6; rowc++)
{
for (colc=0; colc<6; colc++)
{
if(b[rowc][colc] == '*')
{
b[rowc][colc] = rand()%4 + 'A';
nomatch(b);
}
}
}
}

关于c - "Pulling down"将二维数组的元素移动到数组内的空白处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18559451/

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