dvsb 发布留言 2008-10-11 11:16 求高手帮忙看下这个扫雷的代码鼠标为什么运行不出哪位高手帮帮忙看下这个扫雷的代码为什么运行没有鼠标的[em09] [em09] #include #include #include #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define MOUSEMOVE 0xff08 struct { int num; int roundnum; int flag; }Mine[10][10]; int gameAGAIN=0; int gamePLAY=0; int mineNUM; char randmineNUM[3]; int Keystate; int MouseExist; int MouseButton; int MouseX; int MouseY; void Init(void); void MouseOn(void); void MouseOff(void); void MouseSetXY(int,int); int LeftPress(void); int RightPress(void); void MouseGetXY(void); void Control(void); void GameBegain(void); void DrawSmile(void); void DrawRedflag(int,int); void DrawEmpty(int,int,int,int); void GameOver(void); void GameWin(void); int MineStatistics(int,int); int ShowWhite(int,int); void GamePlay(void); void Close(void); void main(void) { Init(); Control(); Close(); } void Init(void) { int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tc"); } void Close(void) { closegraph(); } void MouseOn(void) { _AX=0x01; geninterrupt(0x33); } void MouseOff(void) { _AX=0x02; geninterrupt(0x33); } void MouseSetXY(int x,int y) { _CX=x; _DX=y; _AX=0x04; geninterrupt(0x33); } int LeftPress(void) { _AX=0x03; geninterrupt(0x33); return(_BX&1); } int RightPress(void) { _AX=0x03; geninterrupt(0x33); return(_BX&2); } void MouseGetXY(void) { _AX=0x03; geninterrupt(0x33); MouseX=_CX; MouseY=_DX; } void Control(void) { int gameFLAG=1; while(1) { if(gameFLAG) { GameBegain(); GamePlay(); if(gameAGAIN==1) { gameAGAIN=0; continue; } } MouseOn(); gameFLAG=0; if(LeftPress()) { MouseGetXY(); if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85) { gameFLAG=1; continue; } } if(kbhit()) break; } MouseOff(); } void DrawSmile(void) { setfillstyle(SOLID_FILL,YELLOW); fillellipse(290,75,10,10); setcolor(YELLOW); setfillstyle(SOLID_FILL,BLACK); fillellipse(285,75,2,2); fillellipse(295,75,2,2); setcolor(BLACK); bar(287,80,293,81); } void DrawRedflag(int i,int j) { setcolor(7); setfillstyle(SOLID_FILL,RED); bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5); setcolor(BLACK); line(198+j*20,95+i*20,198+j*20,95+i*20+10); } void DrawEmpty(int i,int j,int mode,int color) { setcolor(color); setfillstyle(SOLID_FILL,color); if(mode==0) bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8); else if(mode==1) bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7); } void GameBegain(void) { int i,j; cleardevice(); if(gamePLAY!=1) { MouseSetXY(290,70); MouseX=290; MouseY=70; } gamePLAY=1; mineNUM=0; setfillstyle(SOLID_FILL,7); bar(190,60,390,290); for(i=0;i<10;i++) for(j=0;j<10;j++) DrawEmpty(i,j,0,8); setcolor(7); DrawSmile(); randomize(); for(i=0;i<10;i++) for(j=0;j<10;j++) { Mine.num=random(8); if(Mine.num==1) mineNUM++; else Mine.num=2; Mine.flag=0; } sprintf(randmineNUM,"%d",mineNUM); setcolor(1); settextstyle(0,0,2); outtextxy(210,70,randmineNUM); mineNUM=100-mineNUM; MouseOn(); } void GameOver(void) { int i,j; setcolor(0); for(i=0;i<10;i++) for(j=0;j<10;j++) if(Mine.num==1) { DrawEmpty(i,j,0,RED); setfillstyle(SOLID_FILL,BLACK); fillellipse(200+j*20,100+i*20,7,7); } } void GameWin(void) { setcolor(11); settextstyle(0,0,2); outtextxy(230,30,"YOU WIN!"); } int MineStatistics(int i,int j) { int nNUM=0; if(i==0&&j==0) { if(Mine[0][1].num==1) nNUM++; if(Mine[1][0].num==1) nNUM++; if(Mine[1][1].num==1) nNUM++; } else if(i==0&&j==9) { if(Mine[0][8].num==1) nNUM++; if(Mine[1][9].num==1) nNUM++; if(Mine[1][8].num==1) nNUM++; } else if(i==9&&j==0) { if(Mine[8][0].num==1) nNUM++; if(Mine[9][1].num==1) nNUM++; if(Mine[8][1].num==1) nNUM++; } else if(i==9&&j==9) { if(Mine[9][8].num==1) nNUM++; if(Mine[8][9].num==1) nNUM++; if(Mine[8][8].num==1) nNUM++; } else if(j==0) { if(Mine.num==1) nNUM++; if(Mine[j].num==1) nNUM++; if(Mine[j].num==1) nNUM++; if(Mine[j+1].num==1) nNUM++; if(Mine[j+1].num==1) nNUM++; } else if(j==9) { if(Mine.num==1) nNUM++; if(Mine[j].num==1) nNUM++; if(Mine[j].num==1) nNUM++; if(Mine[j-1].num==1) nNUM++; if(Mine[j-1].num==1) nNUM++; } else if(i==0) { if(Mine[j].num==1) nNUM++; if(Mine.num==1) nNUM++; if(Mine.num==1) nNUM++; if(Mine[j-1].num==1) nNUM++; if(Mine[j+1].num==1) nNUM++; } else if(i==9) { if(Mine[j].num==1) nNUM++; if(Mine.num==1) nNUM++; if(Mine.num==1) nNUM++; if(Mine[j-1].num==1) nNUM++; if(Mine[j+1].num==1) nNUM++; } else { if(Mine[j].num==1) nNUM++; if(Mine[j+1].num==1) nNUM++; if(Mine.num==1) nNUM++; if(Mine[j+1].num==1) nNUM++; if(Mine[j].num==1) nNUM++; if(Mine[j-1].num==1) nNUM++; if(Mine.num==1) nNUM++; if(Mine[j-1].num==1) nNUM++; } return(nNUM); } int ShowWhite(int i,int j) { if(Mine.flag==1||Mine.num==0) return; mineNUM--; if(Mine.roundnum==0&&Mine.num!=1) { DrawEmpty(i,j,1,7); Mine.num=0; } else if(Mine.roundnum!=0) { DrawEmpty(i,j,0,8); sprintf(randmineNUM,"%d",Mine.roundnum); setcolor(RED); outtextxy(195+j*20,95+i*20,randmineNUM); Mine.num=0; return ; } if(i!=0&&Mine[j].num!=1) ShowWhite(i-1,j); if(i!=0&&j!=9&&Mine[j+1].num!=1) ShowWhite(i-1,j+1); if(j!=9&&Mine.num!=1) ShowWhite(i,j+1); if(j!=9&&i!=9&&Mine[j+1].num!=1) ShowWhite(i+1,j+1); if(i!=9&&Mine[j].num!=1) ShowWhite(i+1,j); if(i!=9&&j!=0&&Mine[j-1].num!=1) ShowWhite(i+1,j-1); if(j!=0&&Mine.num!=1) ShowWhite(i,j-1); if(i!=0&&j!=0&&Mine[j-1].num!=1) ShowWhite(i-1,j-1); } void GamePlay(void) { int i,j,Num; for(i=0;i<10;i++) for(j=0;j<10;j++) Mine.roundnum=MineStatistics(i,j); while(!kbhit()) { if(LeftPress()) { MouseGetXY(); if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85) { MouseOff(); gameAGAIN=1; break; } if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290) { j=(MouseX-190)/20; i=(MouseY-90)/20; if(Mine.flag==1) continue; if(Mine.num!=0) { if(Mine.num==1) { MouseOff(); GameOver(); break; } else { MouseOff(); Num=MineStatistics(i,j); if(Num==0) ShowWhite(i,j); else { sprintf(randmineNUM,"%d",Num); setcolor(RED); outtextxy(195+j*20,95+i*20,randmineNUM); mineNUM--; } MouseOn(); Mine.num=0; if(mineNUM<1) { GameWin(); break; } } } } } if(RightPress()) { MouseGetXY(); if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290) { j=(MouseX-190)/20; i=(MouseY-90)/20; MouseOff(); if(Mine.flag==0&&Mine.num!=0) { DrawRedflag(i,j); Mine.flag=1; } else if(Mine.flag==1) { DrawEmpty(i,j,0,8); Mine.flag=0; } } MouseOn(); sleep(1); } } }
页: [1] 特别说明:如网页特效代码中有引用图片文件等,请自己下载到本地调试! |