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); }
/* 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; }
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(); }
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); }
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; } }