该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include "stdio.h"
#include "conio.h"
#include
#include
#include "time.h"
#define xx 60 //列数
#define yy 20 //行数
void gotoxy(int x, int y);
int shuzhi(int map[xx][yy], int x, int y);
int ffbl(int m[xx][yy], char ch, int xiaochu);
void hidden(); //隐藏光标
int xiaochudi(int m[xx][yy], int n); //消除底行
int xuanzedengji(); //选择等级
int main(void)
{
hidden();
int * lose, lose1=0; //字母没按中的个数 (做不出来)
int dengji; //游戏等级:**初级:1 ** **中级:2** **高级:3**
int jishu=0; //掉落最下面的个数
int maxt; //最多地图能掉的个数
int sudu=500; //掉落速度
int xiaochu=0; //消除掉的个数
int m[xx][yy]; //前面是列,后面是行
int i,j,t,len,sum =0, sum1=0;
char ch=1,ch1=1;
while(!(maxt = xuanzedengji()))
maxt=0;
system("cls");
srand((unsigned)time(NULL));
for (i=0; i
{
for (j=0; j
{
m[i][j]=0;
}
}
// for (i=0; i
// {
// gotoxy(xx,i);
// printf("%d", i);
// }
for (i=0; i
{
gotoxy(i,yy);
printf("^");
}
while(1)
{
sum = 0;
sum1=0;
t=rand()%xx;
for(i=0;i
{
for (j=1; j
{
if (m[i][j]!=0)
len=1;
else
len=0;
sum = sum +len;
}
}
if(sum
{
for (i=0;i
{
sum1=sum1+m[t][i];
if(sum1>0)
;
else
m[t][0]=rand()%26+65; //生成字母
}
}
for (i=xx-1;i>=0; i--)
for(j=yy-1; j>=0; j--)
{
shuzhi(m, i, j);
}
while(kbhit())
{
ch=getch();
ch1=ch-32;
}
xiaochu = ffbl(m, ch, xiaochu);
ch =ch1= 1;
jishu = xiaochudi(m,jishu);
gotoxy(3,22);
if(sudu>40)
sudu=500-xiaochu/5*20;
if(jishu>50)
{
system("cls");
gotoxy(10,10);
puts("您已经死亡,请重新开始");
gotoxy(10,11);
printf("共消除%d次,丢失%d次",xiaochu,jishu);
while('\n'!=(ch=getchar()))
continue;
system("cls");
gotoxy(10,11);
puts("是否还要继续?退出请输Y!任意键继续!");
break;
}
printf("全图掉落总个数为%d个, 丢失%d次, 消除%d次, 速度为%d毫秒",maxt,jishu,xiaochu,sudu);
Sleep(sudu); //调整掉落速度
}
//getch();
ch = getch();
if('y'==ch||'Y'==ch)
{
return 0;
}
else
{
main();
} main();
return 0;
} void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
} int shuzhi(int map[xx][yy], int x, int y)
{
int t;
if(map[x][y]!=0 && y
{
t=map[x][y];
map[x][y]=0;
map[x][y+1]=t;
}
return 0;
}
int ffbl(int m[xx][yy], char ch,int xiaochu)
{
int k, l;
char ch1=ch-32;
for(l=yy-1; l>=0; l--) //for (k=0; k
{
for(k=xx-1; k>=0; k--) //for (l=1; l
{
if(m[k][l]!=0)
{
gotoxy(k,l-1);
printf(" ");
if(ch==m[k][l]||ch1==m[k][l])
{
m[k][l]=0;
gotoxy(k, l);
printf(" ");
ch=ch1=0;
xiaochu++;
}
else
{
gotoxy(k, l);
printf("%c", m[k][l]);
}
}
}
}
return xiaochu;
}
void hidden()//隐藏光标
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible=0;//赋1为显示,赋0为隐藏
SetConsoleCursorInfo(hOut,&cci);
}
int xiaochudi(int m[xx][yy],int n) //消除底行
{
int i;
for(i=0; i
{
if(m[i][19]!=0)
{
m[i][19]=0;
n++;
gotoxy(i, 19);
printf(" ");
}
}
return n;
}
int xuanzedengji() //选择等级
{
char dengji;
system("cls");
gotoxy(0,0);
puts("请输入游戏等级:\n**初级:1 ** 最多掉落5个字母\n**中级:2 ** 最多掉落10个字母\n**高级:3 ** 最多掉落20个字母\n");
dengji = getch();
switch(dengji)
{
case '1' : return 5;
case '2' : return 10;
case '3' : return 20;
default :return 0;
}
}