C语言扫雷源代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void MouseSetXY(int,int);/*设置当前位置*/ int LeftPress(void);/*左键按下*/ int RightPress(void);/*鼠标右键按下*/ int MiddlePress(); void MouseGetXY(void);/*得到当前位置*/ int MouseStatus(); 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 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);
MouseOn(MouseX,MouseY);/*新位置显示*/ } if(press!=0)/*有按键的情况*/
return press; return 0;/*只移动的情况*/ }
void Control(void)/*游戏开始,重新,关闭*/ {
int gameFLAG=1;/*游戏失败后判断是否重新开始的标志*/ while(1) {
/*鼠标信息宏定义*/ #define WAITING 0xff00 #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define RIGHTPRESS 0xff02 #define RIGHTCLICK 0xff20 #define RIGHTDRAG 0xff2a #define MIDDLEPRESS 0xff04 #define MIDDLECLICK 0xff40 #define MIDDLEDRAG 0xff4c #define MOUSEMOVE 0xff08
C 语言扫雷源代码.txt 如果背叛是一种勇气,那么接受背叛则需要更大的勇气。爱情是块砖, 婚姻是座山。砖不在多,有一块就灵;山不在高,守一生就行。 #include <graphics.h>
#include <stdlib.h> #include <dos.h> #include <conio.h>
MouseX=_CX;
MouseY=_DX;
}
/*鼠标按键情况,返回 0 表示只移动,返回 1 表示左右键同时按下,2 表示只按了左键,3 表
示只按了右键*/
int MouseStatus() { int x,y; int status; int press=0;
int i,j,color; status=0;/*默认鼠标没有移动*/
int Keystate; int MouseExist; int MouseButton; int MouseX; int MouseY; int up[16][16],down[16][16],mouse_draw[16][16],pixel_save[16][16];
void {int long
void main(void) {
Init(); MouseMath(); //MouseOn(MouseX,MouseY); Control(); Close(); }
void Init(void)/*图形开始*/ {
int gd=DETECT,gm; registerbgidriver(EGAVGA_driver); initgraph(&gd,&gm,""); } void Close(void)/*图形关闭*/ { closegraph(); } /*鼠标光标显示*/ void MouseOn(int x,int y)
x=MouseX; y=MouseY;
while(x==MouseX&&y==MouseY&&status==0&&press==0) { if(LeftPress()&&RightPress())
press=1; else if(LeftPress())
press=2; else if(RightPress())
MouseOff(); 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); MouseGetXY(); MouseOn(MouseX,MouseY); } void DrawRedflag(int i,int j)/*显示红旗*/ { MouseOff(); 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); MouseGetXY(); MouseOn(MouseX,MouseY); } void DrawEmpty(int i,int j,int mode,int color)/*两种空格子的显示*/ { MouseOff(); setcolor(color); setfillstyle(SOLID_FILL,color); if(mode==0)/*没有单击过的大格子*/
for(k=jj;k>=0;k--)
down[i][k]=0;
for(k=0;k<16;k++)/*四种组合方式*/
{
if(up[i][k]==0&&down[i][k]==0)
mouse_draw[i][k]=1;
else if(up[i][k]==0&&down[i][k]==1)
mouse_draw[i][k]=2;
j=jj=15;
while(UpNum[i]!=0)
{
up[i][j]=UpNum[i]%2;
j--;
UpNum[i]/=2;
}
while(DownNum[i]!=0)
{
down[i][jj--]=DownNum[i]%2;
DownNum[i]/=2;
}
for(k=j;k>=0;k--)
up[i][k]=0;
MouseStatus(); if(gameFLAG)/*游戏失败后没判断出重新开始或者退出游戏的话就继续判断*/ {
GameBegain(); /*游戏初始画面*/ GamePlay();/*具体游戏*/ if(gameAGAIN==1)/*游戏中重新开始*/ {
gameAGAIN=0; continue; } }
MouseMath()/*计算鼠标的样子*/ i,j,jj,k; UpNum[16]={
0x3fff,0x1fff,0x0fff,0x07ff, 0x03ff,0x01ff,0x00ff,0x007f, 0x003f,0x00ff,0x01ff,0x10ff,
0x30ff,0xf87f,0xf87f,0xfc3f
press=3; MouseGetXY(); if(MouseX!=x||MouseY!=y)
status=1; }
if(status)/*移动பைடு நூலகம்况才重新显示鼠标*/ { for(i=0;i<16;i++)/*原位置异或消去*/
for(j=0;j<16;j++) { if(mouse_draw[i][j]==3||mouse_draw[i][j]==4) continue; color=getpixel(x+j,y+i); putpixel(x+j,y+i,color^color); putpixel(x+j,y+i,pixel_save[i][j]); }
return(_BX&2);
}
/*是否按下中键
返回值同上
*/
int MiddlePress()
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&4);
}
void MouseGetXY(void)/*得到当前位置*/
{
_AX=0x03;
geninterrupt(0x33);
else if(up[i][k]==1&&down[i][k]==0)
mouse_draw[i][k]=3;
else
mouse_draw[i][k]=4;
}
}
mouse_draw[1][2]=4;/*特殊点*/
}
void Init(void);/*图形驱动*/ void MouseOn(int,int);/*鼠标光标显示*/ void MouseOff(void);/*鼠标光标隐藏*/
struct {
int num;/*格子当前处于什么状态,1 有雷,0 已经显示过数字或者空白格子*/ int roundnum;/*统计格子周围有多少雷*/ int flag;/*右键按下显示红旗的标志,0 没有红旗标志,1 有红旗标志*/ }Mine[10][10];
int gameAGAIN=0;/*是否重来的变量*/ int gamePLAY=0;/*是否是第一次玩游戏的标志*/ int mineNUM;/*统计处理过的格子数*/ char randmineNUM[3];/*显示数字的字符串*/
} /*隐藏鼠标*/
void MouseOff() { int i,j,x,y,color; x=MouseX; y=MouseY; for(i=0;i<16;i++)/*原位置异或消去*/
for(j=0;j<16;j++) { if(mouse_draw[i][j]==3||mouse_draw[i][j]==4) continue; color=getpixel(x+j,y+i); putpixel(x+j,y+i,color^color); putpixel(x+j,y+i,pixel_save[i][j]); }
gameFLAG=0; if(LeftPress())/*判断是否重新开始*/ {
if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85) { gameFLAG=1; continue; }
} if(kbhit())/*判断是否按键退出*/
break; }
} void DrawSmile(void)/*画笑脸*/ {
};
long
DownNum[16]={
0x0000,0x7c00,0x6000,0x7000,
0x7800,0x7c00,0x7e00,0x7f00,
0x7f80,0x7e00,0x7c00,0x4600,
0x0600,0x0300,0x0300,0x0180
};
for(i=0;i<16;i++)
{
{ int i,j; int color;
for(i=0;i<16;i++)/*画鼠标*/
{ for(j=0;j<16;j++) { pixel_save[i][j]=getpixel(x+j,y+i);/*保存原来的颜色*/ if(mouse_draw[i][j]==1) putpixel(x+j,y+i,0); else if(mouse_draw[i][j]==2) putpixel(x+j,y+i,15); } }
相关文档
最新文档