⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 用windows api 写的消方块小游戏
💻
📖 第 1 页 / 共 2 页
字号:
				break;
			case WHITE:
				drawone(hdcMem,xx,yy,REALWHITE);
				break;
			case ORANGE:
				drawone(hdcMem,xx,yy,REALORANGE);
				break;
			
			}
			xx+=25;
		}
		yy+=25;xx=0;
	}
	SetTextColor(hdc,RGB(0,255,0));
	SetBkColor(hdc,RGB(0,0,0));
	wsprintf(test,L"%d                             ",point);
	wsprintf(cla,L"%d  ",classes);
	wsprintf(ctime,L"%d    ",classtime/10);
	TextOut(hdc,365,260,test,10);
	TextOut(hdc,365,320,cla,2);
	TextOut(hdc,365,380,ctime,4);
	BitBlt(hdc,20,20,xlong*Wone,ylong*Hone,hdcMem,0,0,SRCCOPY);
	ReleaseDC(hWnd,hdc);///
	DeleteObject(brush);///
}


void drawbackground(HWND hWnd)
{
	HDC hdc=GetDC(hWnd);
	SetBkColor(hdc,RGB(0,0,0));
	SetTextColor(hdc,RGB(0,0,255));
	TextOut(hdc,346,20,L"NEXT",4);
	TextOut(hdc,346,230,L"POINTS",6);
	TextOut(hdc,346,290,L"CLASS",5);
	TextOut(hdc,340,350,L"LEFT TIME",9);
	ReleaseDC(hWnd,hdc);
	drawrect(hWnd,RGB(100,100,100),6,16,16,24+xlong*Wone,24+ylong*Hone);
	drawrect(hWnd,RGB(100,100,100),6,346,46,354+3*Wone,54+4*Hone);
}

void drawrect(HWND hWnd,int color,int wilth,int x1,int y1,int x2,int y2)
{
	HDC	hdc=GetDC(hWnd);//
	HPEN pen=CreatePen(BS_SOLID ,wilth,color);//
	SelectObject(hdc,pen);
	MoveToEx(hdc,x1,y1,NULL);
	LineTo(hdc,x2,y1);
	MoveToEx(hdc,x2,y1,NULL);
	LineTo(hdc,x2,y2);
	MoveToEx(hdc,x2,y2,NULL);
	LineTo(hdc,x1,y2);
	MoveToEx(hdc,x1,y2,NULL);
	LineTo(hdc,x1,y1);
	DeleteObject(pen);///
	ReleaseDC(hWnd,hdc);///
}

void drawone(HDC hdc,int x,int y,int color)
{
	LOGBRUSH b;
	HBRUSH brush;
	RECT r;
	r.bottom=y+24;
	r.left=x+1;
	r.right=x+24;
	r.top=y+1;
	b.lbColor=color;
	b.lbStyle=BS_SOLID;
	b.lbHatch=HS_HORIZONTAL;
	brush=CreateBrushIndirect(&b);//
	FillRect(hdc,&r,brush);
	DeleteObject(brush);///
}
void begin()
{
	srand(time(NULL));
	refurbish();
	point=0;
	classes=1;
	nowx=0;
	nowy=0;
	classtime=upclasstime*classes;
	for (int y=0;y<ylong;y++)
	{
		for (int x=0;x<xlong;x++)
		{	
			arrays[y][x]=ET;
		}
	}
	for (int y=0;y<4;y++)
	{
		for (int x=0;x<3;x++)
		{	
			nextone[y][x]=ET;
		}
	}
	nextone[1][1]=rand()%4;
	nextone[2][1]=rand()%4;

}
//向下移动一个
void movedown(int x,int y)
{
	if (arrays[y+1][x]==ET&&y<ylong-1)
	{

		arrays[y+1][x]=arrays[y][x];
		arrays[y][x]=ET;

		if (y>0&&arrays[y-1][x]!=ET)
		{
			movedown(x,y-1);
		}
	}
}
//变换
void change()
{
	int n;
	n=arrays[nowy][nowx];
	arrays[nowy][nowx]=arrays[nowy-1][nowx];
	arrays[nowy-1][nowx]=n;

}


//左移
void lmove()
{
	if (nowx>0&&arrays[nowy][nowx-1]==ET&&arrays[nowy-1][nowx-1]==ET)
	{
		arrays[nowy][nowx-1]=arrays[nowy][nowx];
		arrays[nowy-1][nowx-1]=arrays[nowy-1][nowx];
		arrays[nowy-1][nowx]=ET;
		arrays[nowy][nowx]=ET;
		nowx--;
	}

}


//右移
void rmove()
{
	if (nowx<xlong-1&&arrays[nowy][nowx+1]==ET&&arrays[nowy-1][nowx+1]==ET)
	{
		arrays[nowy][nowx+1]=arrays[nowy][nowx];
		arrays[nowy-1][nowx+1]=arrays[nowy-1][nowx];
		arrays[nowy-1][nowx]=ET;
		arrays[nowy][nowx]=ET;
		nowx++;
	}
}




void refurbish()
{
	for (int i=0;i<ylong;i++)
	{
		for (int j=0;j<xlong;j++)
		{
			trace[i][j]=no;
		}
	}
}
//removeall

void removeall()
{	
	int num=0,doubles=0;

	while (1)
	{
		refurbish();
		int hadremove=no;
		for (int y=0;y<ylong;y++)
		{
			for (int x=0;x<xlong;x++)
			{
				if (arrays[y][x]!=ET&&trace[y][x]==no)
				{	
					deep=0;
					find(x,y);

					if (deep>=4)
					{	
						doubles++;
						num+=deep;
						hadremove=yes;
						remove(x,y);
					}

				}
			}
		}

		for (int y=0;y<ylong;y++)
		{
			for (int x=0;x<xlong;x++)
			{
				if (arrays[y][x]!=ET&&arrays[y+1][x]==ET&&trace[y+1][x]==removed)
				{	
					movedown(x,y);

				}
			}
		}

		if (no==hadremove)
		{
			break;
		}
	}
	point+=num*doubles;

}

void find(int x,int y)
{
	trace[y][x]=fond;
	deep++;
	if (y>0&&arrays[y-1][x]==arrays[y][x]&&trace[y-1][x]==no)
	{
		find(x,y-1);
	}
	if (x<xlong-1&&arrays[y][x+1]==arrays[y][x]&&trace[y][x+1]==no)
	{
		find(x+1,y);
	}
	if (y<ylong-1&&arrays[y+1][x]==arrays[y][x]&&trace[y+1][x]==no)
	{
		find(x,y+1);
	}
	if (x>0&&arrays[y][x-1]==arrays[y][x]&&trace[y][x-1]==no)
	{
		find(x-1,y);
	}
}


void remove(int x,int y)
{
	trace[y][x]=removed;
	if (y>0&&arrays[y-1][x]==arrays[y][x]&&trace[y-1][x]==fond)
	{
		remove(x,y-1);
	}
	if (x<xlong-1&&arrays[y][x+1]==arrays[y][x]&&trace[y][x+1]==fond)
	{
		remove(x+1,y);
	}
	if (y<ylong-1&&arrays[y+1][x]==arrays[y][x]&&trace[y+1][x]==fond)
	{
		remove(x,y+1);
	}
	if (x>0&&arrays[y][x-1]==arrays[y][x]&&trace[y][x-1]==fond)
	{
		remove(x-1,y);
	}
	arrays[y][x]=ET;
}
int buildnew()
{	
	for (int j=0;j<ylong;j++)
	{
		if (arrays[0][j]!=ET)
		{	
			return(no);
		}
	}
	nowy=1;
	nowx=4;

	
	arrays[nowy][nowx]=nextone[2][1];
	arrays[nowy-1][nowx]=nextone[1][1];
	nextone[2][1]=rand()%(classes+3);
	nextone[1][1]=rand()%(classes+3);
	//arrays[nowy][nowx]=RED;
	//arrays[nowy-1][nowx]=RED;
	draw(hwndwindow);
	drawnext(hwndwindow);
	return(yes);

}

void drawnext(HWND hWnd)
{
	HDC hdc=GetDC(hWnd);//
	HBRUSH brush;
	RECT rect;
	LOGBRUSH b;
	b.lbColor=RGB(0,0,0);
	b.lbStyle=BS_SOLID;
	b.lbHatch=HS_HORIZONTAL;
	rect.bottom=500;
	rect.left=0;
	rect.right=500;
	rect.top=0;
	SelectObject(hdcMem,bm);
	brush=CreateBrushIndirect(&b);//
	FillRect(hdcMem,&rect,brush);
	int xx=0,yy=0;
	for (int y=0;y<4;y++)
	{
		for (int x=0;x<3;x++)
		{	
			switch(nextone[y][x])
			{
			case ET:
				drawone(hdcMem,xx,yy,RGB(0,0,0));
				break;
			case RED:
				drawone(hdcMem,xx,yy,REALRED);
				break;
			case GREEN:
				drawone(hdcMem,xx,yy,REALGREEN);
				break;
			case YELLOW:
				drawone(hdcMem,xx,yy,REALYELLOW);
				break;
			case BLUE:
				drawone(hdcMem,xx,yy,REALBLUE);
				break;
			case LIGHTRED:
				drawone(hdcMem,xx,yy,REALLIGHTRED);
				break;
			case GRAY:
				drawone(hdcMem,xx,yy,REALGRAY);
				break;
			case BROWN:
				drawone(hdcMem,xx,yy,REALBROWN);
				break;
			case AMETHYST:
				drawone(hdcMem,xx,yy,REALAMETHYST);
				break;
			case WHITE:
				drawone(hdcMem,xx,yy,REALWHITE);
				break;
			case ORANGE:
				drawone(hdcMem,xx,yy,REALORANGE);
				break;
			

		}
			xx+=25;
		}
		yy+=25;xx=0;
	}
	BitBlt(hdc,350,50,3*Wone,4*Hone,hdcMem,0,0,SRCCOPY);
	ReleaseDC(hWnd,hdc);///
	DeleteObject(brush);
}



void win(HWND hWnd)
{

	HDC hdc=GetDC(hWnd);
	for (int x=20;x<20+xlong*Wone;x++)
	{
		for (int y=20;y<20+ylong*Hone;y++)
		{
			SetPixel(hdc,x,y,RGB(x,y,x*y,));
		}
	}
	SetBkColor(hdc,RGB(0,0,0));
	SetTextColor(hdc,RGB(255,0,0));
	TextOut(hdc,100,230,L"YOU WIN",7);
	ReleaseDC(hWnd,hdc);
	
}

void over(HWND hWnd)
{
	HDC hdc=GetDC(hWnd);
	for (int x=20;x<20+xlong*Wone;x++)
	{
		for (int y=20;y<20+ylong*Hone;y++)
		{
			SetPixel(hdc,x,y,RGB(x,y,x*y,));
		}
	}
	SetBkColor(hdc,RGB(0,0,0));
	SetTextColor(hdc,RGB(255,0,0));
	TextOut(hdc,100,230,L"YOU LOST",8);
	ReleaseDC(hWnd,hdc);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -