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

📄 interface.cpp

📁 Clear Mine扫雷游戏: 这是一个模拟扫雷游戏的vc编码程序 编码思想: 通过几个数组设定好雷区的位置
💻 CPP
字号:
#include "koules.h"
#include "interface.h"

LPDIRECTDRAWSURFACE draw_surf;  //main draw surface
LPBYTE font_buff=NULL;

VScreenType background;
VScreenType starbackground;
LPDIRECTDRAWSURFACE      
		bball_bitmap,
		apple_bitmap,
		inspector_bitmap,
		mouse_bitmap,
        lunatic_bitmap,
		lball_bitmap[NLETTERS],
        hole_bitmap,
		ball_bitmap,
		eye_bitmap[MAXROCKETS],
		rocket_bitmap[MAXROCKETS],
        ehole_bitmap,
		koules_bitmap;

extern int TextLen (char *text)
{
	return strlen(text)*9;
}

void outchar(LPBYTE vbuff,DWORD linelen,int x,int y,BYTE c,int color)
{
	WORD k;
	LPBYTE fbuff=font_buff+c*16;//font_data
	int lc=y;
	y*=linelen;
	for(int i=0;i<16;i++,lc++,y+=linelen)
	{
	k=*(fbuff+i);
	if(lc>=0 && lc<600)
		for(int j=0;j<8;j++)
		{
		if(k & 0x80)
			*(vbuff+x+j+y)=(BYTE)color;
		k<<=1;
		}
	}
}

extern void					DrawText(int x, int y, char *text,int color)
{
	DDSURFACEDESC desc;
	ZeroMemory( &desc, sizeof(desc) );
	desc.dwSize = sizeof(desc);
	HRESULT r=draw_surf->Lock( 0, &desc, DDLOCK_WAIT | DDLOCK_WRITEONLY, 0 );
	if (r!=DD_OK)
		return ;
	BYTE* surfbits = (BYTE*)desc.lpSurface;
	int tx=x;
	while(*text)
	{
		outchar(surfbits,desc.lPitch,tx,y,*text,(BYTE)color);
		tx+=9;
		text++;
	}
	draw_surf->Unlock( 0 );
}

extern void DrawBlackMaskedText (int x, int y, char *text)
{
	DrawText(x,y,text,0);
}

extern void DrawRedMaskedText(int x, int y, char *text)
{
	DrawText(x,y,text,66);
}

extern void DrawWhiteMaskedText (int x, int y, char *text)
{
	DrawText(x,y,text,255);
}

extern void DrawRectangle (int x1, int y1, int x2, int y2, int color)
{
	HDC dc;
	POINT pts[5];
	pts[0].x=x1,pts[0].y=y1;
	pts[1].x=x2,pts[1].y=y1;
	pts[2].x=x2,pts[2].y=y2;
	pts[3].x=x1,pts[3].y=y2;
	pts[4].x=x1,pts[4].y=y1;
	HPEN pen=CreatePen(PS_SOLID,1,PTORGB(color));
	draw_surf->GetDC(&dc);
	SelectObject(dc,pen);
	Polyline(dc,pts,5);
	draw_surf->ReleaseDC(dc);
	DeleteObject(pen);
}

extern LPDIRECTDRAWSURFACE CompileBitmap (int x, int y, char *bitmap)
{
	int sx=(x+3)& ~3;
	LPBYTE p= new BYTE[sx*y];
	LPBYTE realdata=(LPBYTE)bitmap;
	ZeroMemory(p,sx*y);
	if(sx!=x)
	{
		for(int i=0;i<y;i++)
			memcpy(p+sx*i,bitmap+x*i,x);
		realdata=p;
	}
	LPDIRECTDRAWSURFACE surf= GetDDWin()->CreateSurface(sx,y);
	GetDDWin()->Copy_Bmp08_Surface08( surf,realdata,sx,y);
	DDCOLORKEY ddc;
    ddc.dwColorSpaceLowValue=0;
    ddc.dwColorSpaceHighValue=0;
	surf->SetColorKey(DDCKEY_SRCBLT,&ddc);
	Addsurf(sx,y,(char *)realdata,surf);
	return surf;
}

extern void FillRectangle(CONST int x,CONST int y,CONST int x1,CONST int y1,CONST int color)
{
	HDC dc;
	HBRUSH br=CreateSolidBrush(PTORGB(color));
	CRect rc(x,y,x1,y1);
	draw_surf->GetDC(&dc);
	FillRect(dc,rc,br);
	draw_surf->ReleaseDC(dc);
	DeleteObject(br);
}

extern void Line(CONST int x1,CONST int y1,CONST int x2,CONST int y2,CONST int color)
{
	HDC dc;
	HPEN pen=CreatePen(PS_SOLID,1,PTORGB(color));
	draw_surf->GetDC(&dc);
	SelectObject(dc,pen);
	MoveToEx(dc,x1,y1,NULL);
	LineTo(dc,x2,y2);
	draw_surf->ReleaseDC(dc);
	DeleteObject(pen);
}

extern void INLINE PutBitmap(CONST int x,CONST int y,CONST int xsize,CONST int ysize,LPDIRECTDRAWSURFACE bitmap)
{
	GetDDWin()->BltSurface(draw_surf,bitmap,x,y,TRUE);
}

extern INLINE void
CopyVSToVS (VScreenType source, VScreenType destination)
{
	GetDDWin()->BltSurface(destination,source,0,0,FALSE);
}

extern INLINE void
CopyToScreen (VScreenType source)
{
	GetDDWin()->BltSurface(GetDDWin()->primsurf,source,0,0,FALSE);
}

extern  COLORREF PTORGB(int color)
{
	PALETTEENTRY pt; 
	GetDDWin()->palette->GetEntries(0,color,
    1,&pt);
	return RGB(pt.peRed,pt.peGreen,pt.peBlue);
}

surf_queue surf_header={0,0,NULL,NULL,NULL};

extern void	Addsurf(int sx,int sy,char *data,LPDIRECTDRAWSURFACE lpsurf)
{
	surf_queue *p=&surf_header;
	while(p->next)
		p=p->next;
	surf_queue *q=new surf_queue;
	q->bitmap=data;
	q->lpsurf=lpsurf;
	q->sx=sx;
	q->sy=sy;
	q->next=NULL;
	p->next=q;
}

⌨️ 快捷键说明

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