C语言扫雷游戏源代码.docx

上传人:b****1 文档编号:273349 上传时间:2023-04-28 格式:DOCX 页数:33 大小:22.75KB
下载 相关 举报
C语言扫雷游戏源代码.docx_第1页
第1页 / 共33页
C语言扫雷游戏源代码.docx_第2页
第2页 / 共33页
C语言扫雷游戏源代码.docx_第3页
第3页 / 共33页
C语言扫雷游戏源代码.docx_第4页
第4页 / 共33页
C语言扫雷游戏源代码.docx_第5页
第5页 / 共33页
C语言扫雷游戏源代码.docx_第6页
第6页 / 共33页
C语言扫雷游戏源代码.docx_第7页
第7页 / 共33页
C语言扫雷游戏源代码.docx_第8页
第8页 / 共33页
C语言扫雷游戏源代码.docx_第9页
第9页 / 共33页
C语言扫雷游戏源代码.docx_第10页
第10页 / 共33页
C语言扫雷游戏源代码.docx_第11页
第11页 / 共33页
C语言扫雷游戏源代码.docx_第12页
第12页 / 共33页
C语言扫雷游戏源代码.docx_第13页
第13页 / 共33页
C语言扫雷游戏源代码.docx_第14页
第14页 / 共33页
C语言扫雷游戏源代码.docx_第15页
第15页 / 共33页
C语言扫雷游戏源代码.docx_第16页
第16页 / 共33页
C语言扫雷游戏源代码.docx_第17页
第17页 / 共33页
C语言扫雷游戏源代码.docx_第18页
第18页 / 共33页
C语言扫雷游戏源代码.docx_第19页
第19页 / 共33页
C语言扫雷游戏源代码.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言扫雷游戏源代码.docx

《C语言扫雷游戏源代码.docx》由会员分享,可在线阅读,更多相关《C语言扫雷游戏源代码.docx(33页珍藏版)》请在冰点文库上搜索。

C语言扫雷游戏源代码.docx

C语言扫雷游戏源代码

/*

模拟扫雷游戏

*/

#include

#include

#include

#include

#include

#include

#include

unionREGSregs;

intsize=15;/*用于表示每个方块的大小(正方形的边长)*/

intpix,piy=50;/*pix,piy是矩阵的偏移量*/

charb[2]="1";/*用于显示方格周围的雷的个数*/

intpan[30][16];/*用于记录盘面的情况:

0:

没有、9:

有雷、1~8:

周围雷的个数*/

intpan1[30][16];/*pan1[][]纪录当前的挖雷情况,0:

没有操作、1:

打开了、2:

标记了*/

inttt;/*纪录时间参数*/

intEflags;/*用于标记鼠标按钮的有效性,0:

有效,1:

无效,2:

这是鼠标的任意键等于重新开始*/

intMsinit();

voidDraw(intx,inty,intsizex,intsizey);

voidFacedraw(intx,inty,intsizel,intk);

voidDead(intsizel,intx,inty);

voidSetmouse(intxmax,intymax,intx,inty);

intMsread(int*xp,int*yp,int*bup,structtimet1,intk);

voidDraw1(intx,inty);

intOpen(intx,inty);

floatRandom();

voidHave(intsum,intx,inty,intxx,intyy);

voidHelp();

voidCoread();

voidDdraw2(intx,inty);

 

/*下面是主函数*/

main()

{

intmode=VGAHI,devices=VGA;/*图形模式初始化的变量*/

charams;/*鼠标操作中的标志变量*/

intxms,yms,bms;/*鼠标的状态变量*/

inti,j,k,k1=0;/*i,j,k是循环变量*/

intx=9,y=9,flags=0;/*x,y矩阵的大小*/

intsum=10;/*sum盘面的雷的总数目,是个x,y的函数*/

intx1=0,y1=0;/*用于记录光标当前的位置*/

intx11=0,y11=0;/*暂时保存鼠标位置的值*/

intsizel=10;/*脸的大小*/

intcflags=1;/*这是菜单操作标志变量,没有弹出1,弹出0*/

structtimet1={0,0,0,0};/*时间结构体,头文件已定义*/

intco[3];/*暂时纪录历史纪录*/

voidfar*Map;/*用于保存鼠标图片*/

charname[3][20];/*名字字符串,用于记录名字*/

FILE*p;/*文件指针用于文件操作*/

Msinit();/*鼠标初始化*/

/*registerbgidriver(EGAVGA_driver);*/

initgraph(&devices,&mode,"C:

\\tc");/*图形模式初始化*/

/*为图片指针分配内存*/

if((Map=farmalloc(imagesize(0,0,20,20)))==NULL)/*图片的大小是20*20*/

{

printf("Memoryererr!

\n");

printf("Pressanykeytoout!

\n");

exit

(1);

}

/*用于检验文件是否完整*/

while((p=fopen("score.dat","r"))==NULL)/*如果不能打开就新建一个*/

{

if((p=fopen("score.dat","w"))==NULL)/*如果不能新建就提示错误并推出*/

{

printf("Thefilecannotopen!

\n");

printf("Presssanykeytoexit!

\n");

getch();

exit

(1);

}

/*写入初始内容*/

fprintf(p,"%d%d%d,%s\n%s\n%s\n",999,999,999,"xiajia","xiajia","xiajia");

fclose(p);

}

/*暂时读出历史纪录。

并用co[3]纪录*/

fscanf(p,"%d%d%d,",&co[0],&co[1],&co[2]);

for(i=0;i<3;i++)

fscanf(p,"%s\n",name[i]);

fclose(p);

Setmouse(1,1,615,460);/*设置鼠标的活动范围*/

pix=250-x*size/2;/*计算地雷按钮矩阵的左边*/

bss:

b[0]='1';/*游戏开始和重来的切入点*/

flags=0;/*测试中这个变量好像没有作用,但是为了逻辑的完整性暂时保留*/

k=0;

Eflags=0;

tt=0;

cleardevice();/*清屏*/

setbkcolor(LIGHTCYAN);

for(i=0;i<30;i++)/*盘面初始化*/

for(j=0;j<16;j++)

{

pan[i][j]=0;

pan1[i][j]=0;

}

for(;;)/*用于生成雷的盘面情况*/

{

i=(int)(x*Random());

j=(int)(y*Random());

if(pan[i][j]==0)

{

pan[i][j]=9;

k=k+1;

}

if(k==sum)break;

}

for(i=0;i

for(j=0;j

{

if(pan[i][j]==0)/*只有没有雷的才需要处理*/

{

if(i-1>=0&&j-1>=0&&pan[i-1][j-1]==9)pan[i][j]++;

if(j-1>=0&&pan[i][j-1]==9)pan[i][j]++;

if(i+1=0&&pan[i+1][j-1]==9)pan[i][j]++;

if(i-1>=0&&pan[i-1][j]==9)pan[i][j]++;

if(i+1

if(i-1>=0&&j+1

if(j+1

if(i+1

}

}

if(sum==10)/*画底座*/

{

Draw(170,1,162,200);

setcolor

(1);

outtextxy(175,5,"Game()");

setcolor(4);

outtextxy(175,5,"G");

}/*小*/

else

if(sum==40)

{

Draw(115,1,272,307);

setcolor

(1);

outtextxy(120,5,"Game(G)");

setcolor(4);

outtextxy(120,5,"G");

}/*中*/

else

if(sum==99)

{

Draw(40,1,470,307);

setcolor

(1);

outtextxy(45,5,"Game(G)");

setcolor(4);

outtextxy(45,5,"G");

}/*大*/

setcolor

(1);/*显示提示信息*/

outtextxy(100,350,":

Help.");

setcolor(4);

outtextxy(100,350,"H");

setcolor

(1);

outtextxy(200,350,"/:

exit.");

setcolor(4);

outtextxy(200,350,"Q");

outtextxy(220,350,"ESC");

setcolor

(1);

outtextxy(330,350,":

cores.");

setcolor(4);

outtextxy(330,350,"R");

Facedraw(250,30,sizel,2);/*显示控制按钮,脸型*/

for(i=0;i

for(j=0;j

{

Draw(i*size+pix,j*size+piy,size,size);

}

Have(sum,pix+20,30,x,y);/*各项的初始显示*/

k=0;

setfillstyle(1,0);

bar(460-pix,25,490-pix,40);

setcolor(4);

outtextxy(465-pix,30,"000");

/*下面这一段用于接收用户的控制,并做出反应*/

for(;;)

{

ams=Msread(&xms,&yms,&bms,t1,k);/*读取鼠标状态*/

/*下面一段用于保存并记录鼠标图片*/

if(flags!

=0)

{

putimage(x11,y11,Map,COPY_PUT);

}

x11=xms;

y11=yms;

flags=1;

/*这里插入菜单操作*/

if((xms>=pix-10&&xms<=pix+26&&yms>=2&&yms<=14&&bms==1)||ams=='g'||ams=='G')/*点中菜单的判断*/

{

Draw(pix-10,14,100,88);/*画菜单*/

cflags=0;

setcolor

(1);/*下面显示菜单项*/

outtextxy(pix-4,19,"Restar(R)");

setcolor(4);

outtextxy(pix-4,19,"R");

setcolor

(1);/*下面显示菜单项*/

outtextxy(pix-4,30,"Easy(E)");

setcolor(4);

outtextxy(pix-4,30,"E");

setcolor

(1);/*下面显示菜单项*/

outtextxy(pix-4,41,"Nomall(N)");

setcolor(4);

outtextxy(pix-4,41,"N");

setcolor

(1);/*下面显示菜单项*/

outtextxy(pix-4,52,"Hard(H)");

setcolor(4);

outtextxy(pix-4,52,"H");

setcolor

(1);/*下面显示菜单项*/

outtextxy(pix-4,63,"Corse(C)");

setcolor(4);

outtextxy(pix-4,63,"C");

setcolor

(1);/*下面显示菜单项*/

outtextxy(pix-4,74,"Help(L)");

setcolor(4);

outtextxy(pix-4,74,"L");

setcolor

(1);/*下面显示菜单项*/

outtextxy(pix-4,85,"Quit(Q)");

setcolor(4);

outtextxy(pix-4,85,"Q");

bms=0;

}/*完成菜单的描绘*/

/*这里是为了完全实现鼠标控制才加入的内容*/

if(Eflags==2&&(bms!

=0||ams!

=-1))

{

gotobss;

}

/*下面实现菜单的功能,每一项响应一个菜单项*/

if(cflags==0)

{

if((xms>=pix-6&&xms<=pix+85&&yms>=17&&yms<=28&&bms==1)||(ams=='r'||ams=='R'))/*下面依次响应菜单中各项*/

{

cflags=1;

gotobss;

}

else

if((xms>=pix-6&&xms<=pix+85&&yms>=28&&yms<=39&&bms==1)||ams=='e'||ams=='E')

{

cflags=1;

x=9;

y=9;

sum=10;

pix=250-x*size/2;

gotobss;

}

else

if((xms>=pix-6&&xms<=pix+85&&yms>=39&&yms<=50&&bms==1)||ams=='n'||ams=='N')

{

cflags=1;

x=16;

y=16;

sum=40;

pix=250-x*size/2;

gotobss;

}

else

if((xms>=pix-6&&xms<=pix+85&&yms>=50&&yms<=61&&bms==1)||ams=='h'||ams=='H')

{

cflags=1;

x=30;

y=16;

sum=99;

pix=250-x*size/2+25;

gotobss;

}

else

if((xms>=pix-6&&xms<=pix+85&&yms>=61&&yms<=72&&bms==1)||ams=='c'||ams=='C')

{

cflags=1;

Coread();

}

else

if((xms>=pix-6&&xms<=pix+85&&yms>=72&&yms<=83&&bms==1)||ams=='l'||ams=='L')

{

cflags=1;

Help();

}

else

if((xms>=pix-6&&xms<=pix+85&&yms>=83&&yms<=94&&bms==1)||ams=='q'||ams=='Q'||ams==27)

{

cflags=1;

fclose(p);

closegraph();

farfree(Map);

exit

(1);

}

else

if(bms!

=0)

{

cflags=1;

gotobss;

}

}/*结束菜单功能的实现*/

/*在笑脸按钮处单击时重新开始*/

if(cflags!

=0&&xms>=250-sizel-2&&yms>=30-sizel-2&&xms<=250+sizel+2&&yms<=30+sizel+2&&bms==1)

{

gotobss;

}

if(Eflags==0&&cflags!

=0&&xms-pix>=0&&yms-piy>=0&&xms

{

x1=(int)((xms-pix)/size);/*计算鼠标目前的按钮位置*/

y1=(int)((yms-piy)/size);

if(ams==-1&&bms==1&&pan1[x1][y1]==0)/*单击鼠标左键*/

{

if(k==0)/*k这里判断是否是第一次按下.0:

不计时,1:

开始计时*/

{

gettime(&t1);

k=1;

}

if(pan[x1][y1]!

=9)

{

Draw1(x1,y1);

Open(x,y);

}

else

{

Dead(sizel,x,y);

k=0;

}

}

if(ams==-1&&bms==2&&pan1[x1][y1]==0)/*单击鼠标右键*/

{

delay(100);

setcolor(10);

circle(x1*size+pix+7,y1*size+piy+7,4);

pan1[x1][y1]=2;

Have(sum,pix+20,30,x,y);

}

else

if(ams==-1&&bms==2&&pan1[x1][y1]==2)/*单击鼠标右键*/

{

delay(100);

Draw(x1*size+pix,y1*size+piy,size,size);

pan1[x1][y1]=0;

Have(sum,pix+20,30,x,y);

}/*相当于鼠标右击*/

if(ams==-1&&bms==3&&pan1[x1][y1]==1)

{/*相当于鼠标双击,有效性判断*/

i=0;

if(x1-1>=0&&y1-1>=0&&pan1[x1-1][y1-1]==2)i++;

if(y1-1>=0&&pan1[x1][y1-1]==2)i++;

if(x1+1=0&&pan1[x1+1][y1-1]==2)i++;

if(x1-1>=0&&pan1[x1-1][y1]==2)i++;

if(x1+1

if(x1-1>=0&&y1+1

if(y1+1

if(x1+1

if(i==pan[x1][y1])/*有效*/

{

if(x1-1>=0&&y1-1>=0&&pan1[x1-1][y1-1]!

=2)

{

if(pan[x1-1][y1-1]!

=9)

Draw1(x1-1,y1-1);

else

{

Dead(sizel,x,y);

k=0;

}

}

if(y1-1>=0&&pan1[x1][y1-1]!

=2)

{

if(pan[x1][y1-1]!

=9)

Draw1(x1,y1-1);

else

{

Dead(sizel,x,y);

k=0;

}

}

if(x1+1=0&&pan1[x1+1][y1-1]!

=2)

{

if(pan[x1+1][y1-1]!

=9)

Draw1(x1+1,y1-1);

else

{

Dead(sizel,x,y);

k=0;

}

}

if(x1-1>=0&&pan1[x1-1][y1]!

=2)

{

if(pan[x1-1][y1]!

=9)

Draw1(x1-1,y1);

else

{

Dead(sizel,x,y);

k=0;

}

}

if(x1+1

=2)

{

if(pan[x1+1][y1]!

=9)

Draw1(x1+1,y1);

else

{

Dead(sizel,x,y);

k=0;

}

}

if(x1-1>=0&&y1+1

=2)

{

if(pan[x1-1][y1+1]!

=9)

Draw1(x1-1,y1+1);

else

{

Dead(sizel,x,y);

k=0;

}

}

if(y1+1

=2)

{

if(pan[x1][y1+1]!

=9)

Draw1(x1,y1+1);

else

{

Dead(sizel,x,y);

k=0;

}

}

if(x1+1

=2)

{

if(pan[x1+1][y1+1]!

=9)

Draw1(x1+1,y1+1);

else

{

Dead(sizel,x,y);

k=0;

}

}

Open(x,y);

}

}

/*胜利条件*/

k1=0;

for(i=0;i

for(j=0;j

if(pan1[i][j]!

=1)k1++;

if(k1==sum)

{

for(i=0;i

for(j=0;j

if(pan1[i][j]==0)

{

setcolor(10);circle(i*size+pix+7,j*size+piy+7,4);

}

Facedraw(250,30,sizel,3);

if(x==9&&tt

if(x==16&&tt

if(x==30&&tt

if(i==0)

{

Draw(10,10,300,55);

setcolor(4);

outtextxy(20,15,"Youbreakthecorse!

");

outtextxy(20,25,"Pleaseinputyourname(0-19):

");

setfillstyle(1,14);

bar(20,35,200,50);

for(i=0;i<19;i++)

{

name[j][i]=getch();

if(name[j][i]==8)i=i-2;

if(name[j][i]==13){name[j][i]='\0';break;}

name[j][i+1]='\0';

setfillstyle(1,14);

bar(20,35,200,50);

setcolor

(1);

outtextxy(20,40,name[j]);

}

if((p=fopen("score.dat","w"))==NULL)

{

printf("Thefilecannotopen!

\n");

exit

(1);

}

fprintf(p,"%d%d

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2