f (flag)
return true;
}
return false;
}
void New(void)
{
static int old_score = -1, old_time = T;
bool flag = false;
if (Score != old_score) // 更新分数
{
if (Score > 999999999)
{
if (MessageBox(GetHWnd(), "恭喜你达到了最高分!\n是否重新开始?", "游戏结束", MB_YESNO | MB_ICONQUESTION) == IDYES)
Score = 0;
else
exit(0);
}
char s[15];
ostrstream strout(s, 15);
strout <<'$' <
setfont(30, 0, "微软雅黑");
setcolor(RGB(255, 128, 0));
outtextxy(480, 60, s);
old_score = Score;
flag = true;
}
if (Time != old_time) // 更新时间
{
if (Time > old_time)
putimage(540, 140, &jindutiao);
setcolor(BLACK);
for (int i = 0; i < T - Time; i++)
{
line(540, 140 + 2 * i, 580, 140 + 2 * i);
line(540, 140 + 2 * i + 1, 580, 140 + 2 * i + 1);
}
old_time = Time;
flag = true;
}
if (flag) // 写存档
{
ofstream fout("存档.dat");
fout <
<
<
<
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 8; j++)
fout <
fout <
}
fout.close();
}
}
void print(void)
{
int i, j;
for (i = 1; i < 9; i++)
for (j = 0; j < 8; j++)
putimage(60 * j, 60 * (i - 1), &img[int(gem[i][j])]);
New();
}
bool judge(void)
{
int i, j;
for (i = 1; i < 9; i++)
for (j = 0; j < 6; j++)
if (gem[i][j] == gem[i][j + 1] && gem[i][j] == gem[i][j + 2])
return true;
for (i = 1; i < 7; i++)
for (j = 0; j < 8; j++)
if (gem[i][j] == gem[i + 1][j] && gem[i][j] == gem[i + 2][j])
return true;
return false;
}
void fall(void)
{
{
int i, j, a[8] = {0};
bool sign = false;
for (j = 0; j < 8; j++)
for (i = 8; i >= 1; i--)
if (gem[i][j] == blank)
{
a[j] = i;
sign = true;
break;
}
if (sign == false)
return;
IMAGE im[8];
for (j = 0; j < 8; j++)
if (a[j] > 1)
getimage(&im[j], 60 * j, 0, 60, 60 * (a[j] - 1));
for (i = 0; i < 60 ; i += 2)
for (j = 0; j < 8; j++)
if (a[j] > 0)
{
if (a[j] > 1)
putimage(60 * j, i + 2, &im[j]);
putimage(60 * j, i + 2 - 60, &img[int(gem[0][j])]);
Sleep(1);
}
for (j = 0; j < 8; j++)
if (a[j] > 0)
{
for (i = a[j]; i > 0; i--)
gem[i][j] = gem[i - 1][j];
if (rand() % 50 == 0)
gem[0][j] = color(rand() % 4 + 8);
else
gem[0][j] = color(rand() % 7 + 1);
}
} // 加对大括号使递归时撤销内存空间
if (soso())
fall();
if (judge())
draw();
}
void draw(void)
{
{
int i, j;
bool a[9][8] = {false};
for (i = 1; i < 9; i++)
for (j = 0; j < 6; j++)
if (gem[i][j] == gem[i][j + 1] && gem[i][j] == gem[i][j + 2])
a[i][j] = a[i][j + 1] = a[i][j + 2] = true;
for (i = 1; i < 7; i++)
for (j = 0; j < 8; j++)
if (gem[i][j] == gem[i + 1][j] && gem[i][j] == gem[i + 2][j])
a[i][j] = a[i + 1][j] = a[i + 2][j] = true;
for (i = 1; i < 9; i++)
for (j = 0; j < 8; j++)
if (a[i][j])
{
gem[i][j] = blank;
Score += 10;
}
Sleep(V);
Time += T / MaxT;
if (Time > T)
Time = T;
print();
} // 加对大括号使递归时撤销内存空间
fall();
}
bool quit(void)
{
char str[50];
ostrstream strout(str, 50);
strout <<"得分:" <
if (MessageBox(GetHWnd(), str, "游戏结束", MB_YESNO | MB_ICONQUESTION) == IDYES)
return tru |