0

私は C の初心者で、CM-DOS で Bejewelled のような簡単なプログラムを作成したかっただけです。

コーディングはほぼ完了しましたが、問題が 1 つだけあります。

Bejewelled では、一致が見つかると、それらの一致の上の要素が、一致によって作成された空のスペースに置き換わります (いわゆる「プルダウン」)。

プログラムがプルダウンのコードを無視するだけなので、問題が発生しています。

空のスペースをそのまま印刷するだけです。

助けてください?

私のプログラムは a[6][6] の 2D 配列です。

初期化(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 
4

1 に答える 1

0
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);
}
}
}
}
于 2013-09-21T05:41:12.380 に答える