📄 saolei.c
字号:
for(y=0;y<my;y++)/*地图数组设为0*/
for(x=0;x<mx;x++)
map[y][x]=0;
for(;i<count;){/*随机埋雷*/
y=rand()%my;
x=rand()%mx;
if(map[y][x]==0){
map[y][x]++;
i++;
}
}
map_window();
}
void m_save(){/*储存menu挡住的部分*/
int i,j;
for(j=40;j<=93;j++)
for(i=2;i<=52;i++)
m_s[j-40][i-2]=getpixel(i,j);
}
void m_load(){/*恢复menu挡住的部分*/
int i,j;
for(j=40;j<=93;j++)
for(i=2;i<=52;i++)
putpixel(i,j,m_s[j-40][i-2]);
}
void ha_mouse(){
int i,j,k,x=-1,y=-1,flag=0,color;
int tx1,ty1,tx2,ty2,tbx;
int new_x=ha_x,new_y=ha_y;
/*char tgraph[193][303],tg=0;*/
union REGS inregs,outregs,regs2;
inregs.x.ax=0x03;
while(!bioskey(1)){
int86(0x33,&inregs,&outregs);/*调用鼠标中断*/
regs2.x.ax=0x06;
regs2.x.bx=0x00;
int86(0x33,®s2,®s2);/*CX=水平位置(最后释放时),DX=垂直位置(最后释放时)*/
tx2=regs2.x.cx;
ty2=regs2.x.dx;
if(x!=outregs.x.cx || y!=outregs.x.dx || tbx!=outregs.x.bx){
/*printf("%d",outregs.x.bx);*/
if(flag){
for(j=0;j<10;j++)/*恢复上次鼠标一定范围内的像素颜色*/
for(i=0;i<6;i++)
putpixel(x+i,y+j,re[j][i]);
}
flag=1;
/*====================================================================================================================扩充功能部分*/
if(outregs.x.bx & 0x01){/*鼠标左键按下------------------------鼠标点击判断*/
if(outregs.x.cx>=639-19 && outregs.x.cx<=638 && outregs.x.dx>=1 && outregs.x.dx<=18)exit(0);/*关闭按钮*/
else if(outregs.x.cx>=1 && outregs.x.cx<=32 && outregs.x.dx>=21 && outregs.x.dx<=38){/*主菜单-游戏*/
if(n1==-1)m_save();
else if(n1==1)m_load();
n1=0;
n2=-1;
menu_window();
}
else if(outregs.x.cx>=33 && outregs.x.cx<=64 && outregs.x.dx>=21 && outregs.x.dx<=38){/*主菜单-难度*/
if(n1==-1)m_save();
else if(n1==0)m_load();
n1=1;
n2=-1;
menu_window();
}
else if(n1==0 && n2==1)exit(0);
/*开局*/
else if((n1==0 && n2==0) || (outregs.x.cx>=(ha_x+ha_x+2+mx*10)/2-16 && outregs.x.cx<=(ha_x+ha_x+2+mx*10)/2+16 && outregs.x.dx>=(ha_y+ha_y-30)/2-9 && outregs.x.dx<=(ha_y+ha_y-30)/2+8)){/*开局*/
dead=0;/*生*/
n1=-1;
m_load();
initmap();
}
else if(n1==1 && n2==0){/*易*/
dead=0;/*生*/
n1=-1;
m_load();
hard=0;
initmap();
}
else if(n1==1 && n2==1){/*中*/
dead=0;/*生*/
n1=-1;
m_load();
hard=1;
initmap();
}
else if(n1==1 && n2==2){/*难*/
dead=0;/*生*/
n1=-1;
m_load();
hard=2;
initmap();
}
/*
else if(outregs.x.cx>=new_x && outregs.x.cx<=new_x+1+mx*10+1 && outregs.x.dx>+new_y-30 && outregs.x.dx<=new_y){ 拖动扫雷图标扫雷
if(tg==0){ 扫雷部分存储
tg++;
for(j=0;j<=1+my*10+1+30;j++)
for(i=0;i<=mx*10+2;i++)
tgraph[j][i]=getpixel(ha_x+i,ha_y+j-30);
}
if(tbx&1 && x>=new_x && x<=new_x+1+mx*10+1 && y>=new_y-30 && y<=new_y){
setcolor(YELLOW);
rectangle(new_x,new_y-29,new_x+1+mx*10,new_y+1+my*10);
rectangle(new_x,new_y-30,new_x+1+mx*10+1,new_y+1+my*10+1);
new_x+=outregs.x.cx-x;
new_y+=outregs.x.dx-y;
tg=2;
}
else if(tg=2 && x>=new_x && x<=new_x+1+mx*10+1 && y>=new_y-30 && y<=new_y){
tg=0;
ha_x=new_x;
ha_y=new_y;
for(j=0;j<=1+my*10+1+30;j++)
for(i=0;i<=mx*10+2;i++)
putpixel(ha_x+i,ha_y+j-30,tgraph[j][i]);
}
}
*/
else{/*没有点击到按钮*/
if(n1!=-1)m_load();
n1=n2=-1;
menu_window();
}
}
if(n1==0 && outregs.x.cx>=2 && outregs.x.cx<=31 && outregs.x.dx>=40 && outregs.x.dx<=75){/*游戏下级菜单操作*/
n2=(outregs.x.dx-40)/18;
menu_window();
}
if(n1==1 && outregs.x.cx>=34 && outregs.x.cx<=52 && outregs.x.dx>=40 && outregs.x.dx<=93){/*难度下级菜单操作*/
n2=(outregs.x.dx-40)/18;
menu_window();
}
/*-----------------------------左键点击控制部分*/
if(tx2-ha_x-2>=0 && ty2-ha_y-2>=0 && (tx2-ha_x-2)/10>=0 && (tx2-ha_x-2)/10<=mx-1 && (ty2-ha_y-2)/10>=0 && (ty2-ha_y-2)/10<=my-1 && dead==0 && (tx1!=tx2 || ty1!=ty2)){
box_open((tx2-ha_x-2)/10,(ty2-ha_y-2)/10,1);
}
if(outregs.x.bx>>1 & 0x01 && dead==0){/*鼠标右键按下------------------------鼠标点击判断*/
if((outregs.x.cx-ha_x-2)/10>=0 && (outregs.x.cx-ha_x-2)/10<=mx-1 && (outregs.x.dx-ha_y-2)/10>=0 && (outregs.x.dx-ha_y-2)/10<=my-1){
box_mark((outregs.x.cx-ha_x-2)/10,(outregs.x.dx-ha_y-2)/10);/*插旗标记*/
}
}
/*================================================================================================================================*/
for(j=0;j<10;j++)/*储存鼠标一定范围内的像素颜色*/
for(i=0;i<6;i++)
re[j][i]=getpixel(outregs.x.cx+i,outregs.x.dx+j);
for(i=0;i<8;i++){/*确定鼠标各顶点位置*/
m_now_poly[i]=m_poly[i]+outregs.x.cx;
i++;
m_now_poly[i]=m_poly[i]+outregs.x.dx;
}
setcolor(GREEN);
drawpoly(4,m_now_poly);/*显示鼠标框架*/
setfillstyle(SOLID_FILL,WHITE);/*填充鼠标,注意以白色填充,当遇到白色背景时会不能完全填充*/
floodfill(m_now_poly[0]+1,m_now_poly[1]+5,GREEN);
setcolor(LIGHTRED);
drawpoly(4,m_now_poly);/*显示鼠标框架*/
}
x=outregs.x.cx;/*存鼠标坐标,供恢复使用*/
y=outregs.x.dx;
tbx=outregs.x.bx;
tx1=tx2;/*暂存鼠标释放的位置*/
ty1=ty2;
}
}
void full_window(){/*整体部分,包括标题栏的绘制*/
setbkcolor(BLACK);
setcolor(WHITE);
line(0,20,639,20);
rectangle(0,0,639,479);
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(1,1,638,19);
drawmat(sao16S,16,6,3,BLACK);/*标题部分-汉字*/
drawmat(lei16S,16,25,3,BLACK);
setcolor(BLACK);
settextstyle(0,0,1);
outtextxy(44,8,"- made by HungryAnt");
setfillstyle(SOLID_FILL,RED);/*显示关闭图标*/
bar(639-19,1,638,18);
setcolor(WHITE);
setlinestyle(0,0,3);/*X*/
line(639-19+2,1+2,638-2,18-2);
line(639-19+2,18-2,638-2,1+2);
setlinestyle(0,0,1);
}
void menu_window(){/*------------------------------------------菜单栏*/
int i;
setcolor(BLACK);
for(i=0;i<2;i++){/*主菜单*/
if(i==n1)setfillstyle(SOLID_FILL,DARKGRAY);
else setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(32*i+1,21,32*(i+1),38);
}
drawmat(you12S,12,4,21+3,BLACK);/*游戏*/
drawmat(xi12S,12,4+12+2,21+3,BLACK);
drawmat(nan12S,12,32+4,21+3,BLACK);/*难度*/
drawmat(du12S,12,32+4+12+2,21+3,BLACK);
if(n1==0){/*------------------包括菜单----------------游戏菜单*/
for(i=0;i<2;i++){
if(i==n2)setfillstyle(SOLID_FILL,DARKGRAY);
else setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(2,39+(i*(12+6))+1,2+2+12*2+3,39+((i+1)*(12+6)));
}
drawmat(kai12S,12,4,39+3,BLACK);/*开局*/
drawmat(ju12S,12,4+12+2,39+3,BLACK);
drawmat(tui12S,12,4,39+6+3+12,BLACK);/*退出*/
drawmat(chu12S,12,4+12+2,39+6+3+12,BLACK);
}
else if(n1==1){/*-------------------------------------难度菜单*/
for(i=0;i<3;i++){
if(i==n2)setfillstyle(SOLID_FILL,DARKGRAY);
else setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(2+32,39+(i*(12+6))+1,2+32+12+6,39+((i+1)*(12+6)));
}
drawmat(yi12S,12,2+32+4,39+3,BLACK);/*易中难*/
drawmat(zhong12S,12,2+32+4,39+18+3,BLACK);
drawmat(nan12S,12,2+32+4,39+36+3,BLACK);
}
}
ha_graph(){/*图形模式初始化*/
int gd=DETECT,gm,errorcode;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
errorcode = graphresult();
if (errorcode != grOk){
printf("Graphics error: %s",grapherrormsg(errorcode));
printf("Author:HungryAnt");
getch();
exit(1);
}
}
int main(){
int i;
srand((unsigned)time(NULL));/*使每次执行程序得到的结果不一样*/
ha_graph();
full_window();
menu_window(-1,-1);/*菜单*/
initmap();/*地图初始化*/
ha_mouse();/*鼠标*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -