用户:
凡尘飞絮查看:0 回复:0 评论:0 创建时间:2023-05-09T21:00:09
#include <iostream>
#include<graphics.h>
#include<stdio.h>
#include<time.h>
#define bs 40
#define rn 13
#define cn 21
#define ct 9
struct bk
{
int x,y;
int i,j;
int cd;
};
bk bl[rn][cn];
COLORREF cs[ct+1];
int score;
int nz;
int level=1;
void startup()
{
int i,j;
int width=bs*cn;
int height=bs*(rn+2);
initgraph(width,height);
setbkcolor(RGB(220,220,220));
setfillcolor(RGB(255,0,0));
setlinestyle(PS_SOLID,2);
cleardevice();
BeginBatchDraw();
srand(time(0));
cs[0]=RGB(220,220,220);
for(i=1;i<ct+1;i++)
cs[i]=HSVtoRGB((i-1)*40,0.6,0.8);
nz=0;
for(i=0;i<rn;i++)
{
for(j=0;j<cn;j++)
{
int t=rand()%(int(ct*1.5));
if(t>ct-1)
bl[i][j].cd=0;
else
bl[i][j].cd=t;
bl[i][j].x=j*bs;
bl[i][j].y=i*bs;
bl[i][j].i=i;
bl[i][j].j=j;
if(bl[i][j].cd!=0)
nz++;
}
}
score=0;
}
void show()
{
cleardevice();
setlinecolor(RGB(255,255,255));
int i,j;
for(i=0;i<rn;i++)
{
for(j=0;j<cn;j++)
{
setfillcolor(cs[bl[i][j].cd]);
fillrectangle(bl[i][j].x,bl[i][j].y,bl[i][j].x+bs,bl[i][j].y+bs);
}
}
TCHAR s[80];
setbkmode(TRANSPARENT);
settextcolor(RGB(0,0,0));
settextstyle(22,0,_T("宋体"));
_stprintf(s,_T("当前第No%d关,已得%d分,目标分数:%d"),level,score,int(0.9*nz));
outtextxy(bs*(cn/3-0.1),bs*(rn+1.2),s);
/* if(score>=0.9*nz)
{
settextstyle(130,0,_T("黑体"));
outtextxy(bs*(cn/6.0),bs*(rn/3.0),_T("victory"));
}*/
FlushBatchDraw();
}
void up()
{
if(score>=int(0.9*nz))
{
level++;
startup;
}
}
void uwp()
{
int i,j;
MOUSEMSG m;
if(MouseHit())
{
m=GetMouseMsg();
if(m.uMsg==WM_LBUTTONDOWN)
{
int cl_i=int(m.y)/bs;
int cl_j=int(m.x)/bs;
if(bl[cl_i][cl_j].cd!=0)
return;
bk fb[4]={bl[cl_i][cl_j]};
int sh;
for(sh=0;cl_i-sh>=0;sh++)
{
if(bl[cl_i-sh][cl_j].cd!=0)
{
fb[0]=bl[cl_i-sh][cl_j];
break;
}
}
for(sh=0;cl_i+sh<rn;sh++)
{
if(bl[cl_i+sh][cl_j].cd!=0)
{
fb[1]=bl[cl_i+sh][cl_j];
break;
}
}
for(sh=0;cl_j-sh>=0;sh++)
{
if(bl[cl_i][cl_j-sh].cd!=0)
{
fb[2]=bl[cl_i][cl_j-sh];
break;
}
}
for(sh=0;cl_j+sh<cn;sh++)
{
if(bl[cl_i][cl_j+sh].cd!=0)
{
fb[3]=bl[cl_i][cl_j+sh];
break;
}
}
int css[ct+1]={0};
for(i=1;i<=ct;i++)
{
for(j=0;j<4;j++)
{
if(fb[j].cd==i)
css[i]++;
}
if(css[i]>=2)
{
for(j=0;j<4;j++)
{
if(fb[j].cd==i)
{
bl[fb[j].i][fb[j].j].cd=0;
}
}
score+=css[i];
}
}
}
}
FlushBatchDraw();
}
int main(int argc, char** argv)
{
startup();
while(1)
{
show();
up();
uwp();
}
return 0;
}