Exemple #1
0
static void UpdateMouseDD()
{
    DDSURFACEDESC m_surface;
    PUCHAR dst;
    DWORD ddrval;
    memset(&m_surface, 0, sizeof(DDSURFACEDESC));
    m_surface.dwSize = sizeof(DDSURFACEDESC);
    ddrval = IDirectDrawSurface_Lock(lpSurfaces[0], NULL, &m_surface,
				     DDLOCK_WAIT, NULL);
    if (ddrval != DD_OK) {
	return;
    }

    dst = (PUCHAR) m_surface.lpSurface;
    if (storeddata) {
	restore(dst, storeddata, bitDepth, m_surface.u1.lPitch, displayX,
		displayY, oldmouseX, oldmouseY);
	free(storeddata);
    }
    storeddata =
	store(dst, bitDepth, m_surface.u1.lPitch, displayX, displayY,
	      mouseX, mouseY);
    drawmouse(dst, mousepointer, bitDepth, m_surface.u1.lPitch, displayX,
	      displayY, mouseX, mouseY);
    oldmouseX = mouseX;
    oldmouseY = mouseY;
    IDirectDrawSurface_Unlock(lpSurfaces[0], m_surface.lpSurface);
}
Exemple #2
0
/* Display buffer */
static void PaintDD()
{
    DWORD ddrval;
    if (!IsWindowVisible(hWnd) || !active || !initialized
	|| !BackSurface[0])
	return;
    IDirectDrawSurface_Unlock(BackSurface[0], surface[0].lpSurface);
    IDirectDrawSurface_Unlock(BackSurface[1], surface[1].lpSurface);
    if (directX == DXFULLSCREEN) {
	if (storeddata)
	    free(storeddata), storeddata = NULL;
	storeddata =
	    store(currentbuff ? buffer2 : buffer1, bitDepth, lineSize,
		  displayX, displayY, mouseX, mouseY);
	drawmouse(currentbuff ? buffer2 : buffer1, mousepointer, bitDepth,
		  lineSize, displayX, displayY, mouseX, mouseY);
	ddrval =
	    IDirectDrawSurface_BltFast(lpSurfaces[0], 0, 0,
				       BackSurface[currentbuff], &rcScreen,
				       FALSE);
	restore(currentbuff ? buffer2 : buffer1, storeddata, bitDepth,
		lineSize, displayX, displayY, mouseX, mouseY);
	oldmouseX = mouseX;
	oldmouseY = mouseY;
    } else {
	ddrval = IDirectDrawSurface_Blt(lpSurfaces[0], &rcScreen,
					BackSurface[currentbuff],
					&rcViewport, DDBLT_WAIT, NULL);
    }
    if (ddrval != DD_OK) {
	if ((int) ddrval == (int) DDERR_SURFACELOST) {
	    IDirectDrawSurface_Restore(lpSurfaces[0]);
	    IDirectDrawSurface_Restore(BackSurface[0]);
	    IDirectDrawSurface_Restore(BackSurface[1]);
	    ddrval = IDirectDrawSurface_Blt(lpSurfaces[0], &rcScreen,
					    BackSurface[currentbuff],
					    &rcViewport, DDBLT_WAIT, NULL);
	    //if (ddrval == DDERR_SURFACELOST) resized=1; /*We've lost our fractal*/
	}
    }
    ddrval = IDirectDrawSurface_Lock(BackSurface[0], NULL, &surface[0],
				     DDLOCK_WAIT, NULL);
    ddrval = IDirectDrawSurface_Lock(BackSurface[1], NULL, &surface[1],
				     DDLOCK_WAIT, NULL);
    if (buffer1 != (char *) surface[0].lpSurface ||
	buffer2 != (char *) surface[1].lpSurface) {
	DeInitDD();
	x_fatalerror
	    ("Unexpected event - buffers moved! Please contact authors!");
    }
    needredraw = 0;

}
Exemple #3
0
void restore()									/****恢复屏幕到主菜单****/
{
	int i;
	cleardevice();
	putimage(0,0,logo,COPY_PUT);
	for (i=0;i<STARNUM;i++) drawstar(star);

	outchinese(400,80,s_cn,EOF,4,0);
	drawmenu(mm);
	drawmouse(mousex,mousey);
	if (Music_on) play(2);
	else noplay();
}
Exemple #4
0
void End(int flag)
{
	int i;
	int key=0;
	char *buffer;
	char *s[]={"真的退出吗?(y/n):","是","否","制作小组",\
		   "图形相关:谭歆","主程序:汪航勋","碰撞相关:林远骥",\
		   "菜单等:黄懿可","指导老师:肖少拥","版权所有,盗版不究","谢谢!"};
	noplay();
	if (flag)
	{
		buffer=malloc(imagesize(200,210,440,290));
		getimage(200,210,440,290,buffer);
		draw_window(210,220,430,280);
		outchinese(220,227,s[0],YELLOW,1,0);
		for (i=1;i<=2;i++)
			outchinese(150+i*100,245,s[i],GREEN,1,0);
		drawmouse(mousex,mousey);
		while(1)
		{
			while(bioskey(1)!=0) getch();
			position(0);
			drawmouse(mousex,mousey);
	
			key=bioskey(1);
			if (button==1)
			{
				for (i=1;i<=2;i++)
				{
					if (150+i*100 < mousex && mousex <166+i*100 && 245 <mousey && mousey <261)
						break;
				}
			}
			if (key== LOWER_y || i==1) break;
			else if (key == LOWER_n || i==2)
			{
				position(0);
				putimage(200,210,buffer,COPY_PUT);
				free(buffer);
				if (Music_on) play(2);
				return;
			}
		}
	}
	free(mouse);
	free(mouse_temp);
	free(dash_dot);

	cleardevice();
	while(bioskey(1)!=0) getch();
	for (i=3;i<10;i++)
	{
		outchinese(maxx/2-strlen(s[i])*4,100+18*i+200*(i/9),s[i],WHITE,1,0);
		delay(30000);
		delay(30000);
	}
	getch();
	cleardevice();
	outchinese(250,200,s[10],GREEN,4,1);
	sleep(1);
	closegraph();
	exit(0);
}
Exemple #5
0
void beforegame()								/******游戏主界面*******/
{
	int i,j;

	fire();

	ShowBmp256(70,65,".\\source\\login.bmp",1,0);

	InitGraph();
	star=malloc(sizeof(struct STAR)*STARNUM);
	initstar(star);
	InitMouse(0,0,maxx,maxy);

	getdat();
	handler=getvect(0x1c);

	mousex=getmaxx()/2;
	mousey=getmaxy()/2;

	logo=bmp_to_dat(".\\source\\snooker.bmp");
	vs1=bmp_to_dat(".\\source\\head0.bmp");
	vs2=bmp_to_dat(".\\source\\head1.bmp");

	play(1);
	for (i=0;i<3;i++)
	{
		putimage(0,0,logo,NOT_PUT);
		for (j=20;j<=1000;j+=10)
		{
			delay(1000);
		}
		delay(3000);
		putimage(0,0,logo,COPY_PUT);
		for (j=1000;j>=20;j-=10)
		{
			delay(2000);
		}
		delay(3000);
	}
	putimage(0,0,logo,COPY_PUT);
	for (i=0;i<STARNUM;i++) drawstar(star);

	outchinese(400,80,s_cn,EOF,4,2);
	putimage(300,280,vs1,COPY_PUT);
	putimage(520,280,vs2,COPY_PUT);

	settextstyle(1,0,12);
	setcolor(GREEN);
	outtextxy(380,260,"Vs");

	drawmouse(mousex,mousey);
	play(2);
	drawmenu(mm);
	while(1)
	{
		while(bioskey(1)!=0) getch();
		position(1);
		mm=fill();
		drawmouse(mousex,mousey);
		if (button==1)
		{
			switch (mm)
			{
				case 0:
					{
						free(logo);
						free(star);
						cleardevice();
						return;
					}
				case 1:
					{
						practice();
						restore();
						break;
					}
				case 2:
					{
						noplay();
						option();
						break;
					}
				case 3:
					{
						noplay();
						toprank();
						restore();
						break;
					}
				case 4:
					{
						if (Music_on==1) play(0);
						showhelp();
						break;
					}
				case 5:
					{
						position(0);
						End(1);
						drawmouse(mousex,mousey);
						break;
					}
			}
		}
		button=0;
	}
}