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

📄 mantischessdraw.cpp

📁 一个VC6.0的象棋源代码
💻 CPP
字号:
#include "Windows.h"
#include "math.h"
#include "MantisChessDef.h"
#include "MantisChessDraw.h"

const float PAI=(float)3.1415927;
const int XC[2]={BWA/2,BWA/2-1};	//XC,YC-棋子宽的一半
const int YC[2]={BWA/2,BWA/2-2};	//[0].[1]分别为阴影和明线的偏移量

void DrawStar(HDC hdc,int x,int y,int i)
{
	if(x!=0)
	{
		MoveToEx(hdc,XC[i]+BWA*x-3,YC[i]+BWA*y-3,NULL);
		LineTo(hdc,XC[i]+BWA*x-6,YC[i]+BWA*y-3);

		MoveToEx(hdc,XC[i]+BWA*x-3,YC[i]+BWA*y-3,NULL);
		LineTo(hdc,XC[i]+BWA*x-3,YC[i]+BWA*y-6);

		MoveToEx(hdc,XC[i]+BWA*x-3,YC[i]+BWA*y+3,NULL);
		LineTo(hdc,XC[i]+BWA*x-6,YC[i]+BWA*y+3);

		MoveToEx(hdc,XC[i]+BWA*x-3,YC[i]+BWA*y+3,NULL);
		LineTo(hdc,XC[i]+BWA*x-3,YC[i]+BWA*y+6);
	}
	if(x!=8)
	{
		MoveToEx(hdc,XC[i]+BWA*x+3,YC[i]+BWA*y-3,NULL);
		LineTo(hdc,XC[i]+BWA*x+6,YC[i]+BWA*y-3);

		MoveToEx(hdc,XC[i]+BWA*x+3,YC[i]+BWA*y-3,NULL);
		LineTo(hdc,XC[i]+BWA*x+3,YC[i]+BWA*y-6);

		MoveToEx(hdc,XC[i]+BWA*x+3,YC[i]+BWA*y+3,NULL);
		LineTo(hdc,XC[i]+BWA*x+6,YC[i]+BWA*y+3);

		MoveToEx(hdc,XC[i]+BWA*x+3,YC[i]+BWA*y+3,NULL);
		LineTo(hdc,XC[i]+BWA*x+3,YC[i]+BWA*y+6);
	}

}

void MakeWood(HDC hdc, int cx, int cy, COLORREF color, int x0, int y0, int z0, float angle0,int dark)
{
	int i,j;
	FLOAT r,angle,u,v,w;

	for( j=0;j<cy;j++)
	for( i=0;i<cx;i++)
	{
		w=0;
		u=(FLOAT)j*2;
		v=(FLOAT)i;
		r=(FLOAT)sqrt(v*v+w*w);
		if(v==0)
			angle=PAI/2;
		else
			angle=(FLOAT)atan2(v,w);
		angle+=angle0;

		w=FLOAT(r*cos(angle));
		v=FLOAT(r*sin(angle));

		u+=x0;
		v+=y0;
		w+=z0;	

		SetPixel(hdc,i,j,WoodGrain(u,v,w,color,dark));
	}
}

COLORREF WoodGrain(FLOAT u, FLOAT v, FLOAT w,COLORREF color,int dark)
{
	int r,g,b;
	FLOAT radius,angle;
	int grain;
	radius = (FLOAT)sqrt(u*u+w*w);
	if(w==0)
		angle = PAI/2;
	else
		angle =(FLOAT) atan2(u,w);
	radius = FLOAT(radius+1.1*sin(20*angle+v/150));
	grain =int(radius)%10;

	r=GetRValue(color);
	g=GetGValue(color);
	b=GetBValue(color);

	switch(grain)
	{
	case 0:
		r=max(0,r-dark/2);
		g=max(0,g-dark/2);
		b=max(0,b-dark/2);
		color=RGB(r,g,b);
		break;
	case 1:
	case 2:
	case 3:
		r=max(0,r-dark);
		g=max(0,g-dark);
		b=max(0,b-dark);
		color=RGB(r,g,b);
		break;
	case 4:
	case 5:
	case 6:
	case 7:
	case 8:
	case 9:
	default: 
		break;
	}
	return color;
}
void MakeBoard(HDC hdc,COLORREF cr)
{
	//填充
	MakeWood(hdc,XBW,YBW,cr,-rand()%XBW,rand()%YBW,rand()%1000+500,FLOAT(rand()%20/1000.1+0.01),20);
	//画棋盘
	HPEN pen[2],oldpen;
	int r,g,b;
	COLORREF cr1,cr2;

	r=GetRValue(cr);
	g=GetGValue(cr);
	b=GetBValue(cr);
	cr1=RGB(min(255,r+40),min(255,g+40),min(255,b+40));
	cr2=RGB(max(0,r-40),max(0,g-40),max(0,b-40));
	pen[0]=CreatePen(PS_SOLID,0,cr1);
	pen[1]=CreatePen(PS_SOLID,0,cr2);

	oldpen=(HPEN)SelectObject(hdc,pen[0]);

	for(int i=0;i<=1;i++)
	{
	 	SelectObject(hdc,pen[i]);
		//画边框(双线)
		MoveToEx(hdc,XC[i]-3,YC[i]-3,NULL);
		LineTo(hdc,XC[i]-3,YC[i]+3+BWA*9);
		LineTo(hdc,XC[i]+3+BWA*8,YC[i]+3+BWA*9);
		LineTo(hdc,XC[i]+3+BWA*8,YC[i]-3);
		LineTo(hdc,XC[i]-3,YC[i]-3);

		MoveToEx(hdc,XC[i],YC[i],NULL);
		LineTo(hdc,XC[i],YC[i]+BWA*9);
		LineTo(hdc,XC[i]+BWA*8,YC[i]+BWA*9);
		LineTo(hdc,XC[i]+BWA*8,YC[i]);
		LineTo(hdc,XC[i],YC[i]);
		//画竖线
		int n;
		for( n=1;n<=8;n++)
		{
			MoveToEx(hdc,XC[i],YC[i]+BWA*n,NULL);
			LineTo(hdc,XC[i]+BWA*8,YC[i]+BWA*n);
		}
		for( n=1;n<=7;n++)
		{
			MoveToEx(hdc,XC[i]+BWA*n,YC[i],NULL);
			LineTo(hdc,XC[i]+BWA*n,YC[i]+BWA*4);
		
			MoveToEx(hdc,XC[i]+BWA*n,YC[i]+BWA*5,NULL);
			LineTo(hdc,XC[i]+BWA*n,YC[i]+BWA*9);
		}
		//画宫
		MoveToEx(hdc,XC[i]+BWA*3,YC[i]+BWA*0,NULL);	
		LineTo(hdc,XC[i]+BWA*5,YC[i]+BWA*2);	//上捺
		
		MoveToEx(hdc,XC[i]+BWA*5,YC[i]+BWA*0,NULL);	
		LineTo(hdc,XC[i]+BWA*3,YC[i]+BWA*2);	//上撇
		
		MoveToEx(hdc,XC[i]+BWA*3,YC[i]+BWA*7,NULL);	
		LineTo(hdc,XC[i]+BWA*5,YC[i]+BWA*9);	//下捺
		
		MoveToEx(hdc,XC[i]+BWA*5,YC[i]+BWA*7,NULL);	
		LineTo(hdc,XC[i]+BWA*3,YC[i]+BWA*9);	//下撇
		//画星
		DrawStar(hdc,7,2,i);
		DrawStar(hdc,1,2,i);
		DrawStar(hdc,0,3,i);
		DrawStar(hdc,2,3,i);
		DrawStar(hdc,4,3,i);
		DrawStar(hdc,6,3,i);
		DrawStar(hdc,8,3,i);

		DrawStar(hdc,7,7,i);
		DrawStar(hdc,1,7,i);
		DrawStar(hdc,0,6,i);
		DrawStar(hdc,2,6,i);
		DrawStar(hdc,4,6,i);
		DrawStar(hdc,6,6,i);
		DrawStar(hdc,8,6,i);
	}
	SelectObject(hdc,oldpen);
	DeleteObject(pen[0]);
	DeleteObject(pen[1]);
}

⌨️ 快捷键说明

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