猫史档案馆


c++EasyX十字消除源码

用户:凡尘飞絮凡尘飞絮查看: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;
}


回复

上一页1 页 / 共 0下一页