c语言课程设计经典例题扫雷.docx

上传人:牧羊曲112 文档编号:3155491 上传时间:2023-03-11 格式:DOCX 页数:24 大小:45.33KB
返回 下载 相关 举报
c语言课程设计经典例题扫雷.docx_第1页
第1页 / 共24页
c语言课程设计经典例题扫雷.docx_第2页
第2页 / 共24页
c语言课程设计经典例题扫雷.docx_第3页
第3页 / 共24页
c语言课程设计经典例题扫雷.docx_第4页
第4页 / 共24页
c语言课程设计经典例题扫雷.docx_第5页
第5页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《c语言课程设计经典例题扫雷.docx》由会员分享,可在线阅读,更多相关《c语言课程设计经典例题扫雷.docx(24页珍藏版)》请在三一办公上搜索。

1、c语言课程设计经典例题扫雷扫雷源代码,完美运行 /* 模拟扫雷游戏 */ #include #include #include #include #include #include #include union REGS regs; int size=15;/*用于表示每个方块的大小(正方形的边长)*/ int pix,piy=50;/*pix,piy是矩阵的偏移量*/ char b2=1;/*用于显示方格周围的雷的个数*/ int pan3016;/*用于记录盘面的情况:0:没有、9:有雷、18:周围雷的个数*/ int pan13016;/*pan1纪录当前的挖雷情况,0:没有操作、1:打

2、开了、2:标记了*/ int tt;/*纪录时间参数*/ int Eflags;/*用于标记鼠标按钮的有效性,0:有效,1:无效,2:这是鼠标的任意键等于重新开始*/ int Msinit; void Draw(int x,int y,int sizex,int sizey); void Facedraw(int x,int y,int sizel,int k); void Dead(int sizel,int x,int y); void Setmouse(int xmax,int ymax,int x,int y); int Msread(int *xp,int *yp,int *bup,

3、struct time t1,int k); void Draw1(int x,int y); int Open(int x,int y); float Random; void Have(int sum,int x,int y,int xx,int yy); void Help; void Coread; void Ddraw2(int x,int y); /*下面是主函数*/ main int mode=VGAHI,devices=VGA;/*图形模式初始化的变量*/ char ams; /*鼠标操作中的标志变量*/ int xms,yms,bms; /*鼠标的状态变量*/ int i,j

4、,k,k1=0; /*i,j,k是循环变量*/ int x=9,y=9,flags=0; /*x,y矩阵的大小*/ int sum=10; /*sum 盘面的雷的总数目,是个x,y的函数*/ int x1=0,y1=0; /*用于记录光标当前的位置*/ int x11=0,y11=0; /*暂时保存鼠标位置的值*/ int sizel=10; /*脸的大小*/ int cflags=1; /*这是菜单操作标志变量,没有弹出1,弹出0*/ struct time t1=0,0,0,0; /*时间结构体,头文件已定义*/ int co3; /*暂时纪录历史纪录*/ void far *Map; /

5、*用于保存鼠标图片*/ char name320; /*名字字符串,用于记录名字*/ FILE * p; /*文件指针用于文件操作*/ Msinit; /*鼠标初始化*/ /*registerbgidriver(EGAVGA_driver);*/ initgraph(&devices,&mode,C:tc); /*图形模式初始化*/ /*为图片指针分配内存*/ if(Map=farmalloc(imagesize(0,0,20,20)=NULL)/*图片的大小是20*20*/ printf(Memory ererr!n); printf(Press any key to out!n); exi

6、t(1); /*用于检验文件是否完整*/ while(p = fopen(score.dat, r) = NULL) /*如果不能打开就新建一个*/ if(p = fopen(score.dat, w) = NULL)/*如果不能新建就提示错误并推出*/ printf(The file cannot open!n); printf(Presss any key to exit!n); getch; exit(1); /*写入初始内容*/ fprintf(p,%d %d %d,%sn%sn%sn,999,999,999,xiajia,xiajia,xiajia); fclose(p); /*暂时

7、读出历史纪录。并用co3纪录*/ fscanf(p,%d %d %d,&co0,&co1,&co2); for(i=0;i3;i+) fscanf(p,%sn,namei); fclose(p); Setmouse(1,1,615,460); /*设置鼠标的活动范围*/ pix=250-x*size/2; /*计算地雷按钮矩阵的左边*/ bss: b0=1; /*游戏开始和重来的切入点*/ flags=0; /*测试中这个变量好像没有作用,但是为了逻辑的完整性暂时保留*/ k=0; Eflags=0; tt=0; cleardevice;/*清屏*/ setbkcolor(LIGHTCYAN)

8、; for(i=0;i30;i+) /*盘面初始化*/ for(j=0;j16;j+) panij=0; pan1ij=0; for(;) /*用于生成雷的盘面情况*/ i=(int)(x*Random); j=(int)(y*Random); if(panij=0) panij=9; k=k+1; if(k=sum) break; for(i=0;ix;i+)/*用于统计各点的周边情况*/ for(j=0;j=0 & j-1=0 & pani-1j-1=9) panij+; if(j-1=0 & panij-1=9) panij+; if(i+1=0 & pani+1j-1=9) panij

9、+; if(i-1=0 & pani-1j=9) panij+; if(i+1=0 & j+1y & pani-1j+1=9) panij+; if(j+1y & panij+1=9) panij+; if(i+1x & j+1y & pani+1j+1=9) panij+; 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); setcolo

10、r(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

11、, / : 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;ix;i+)/*这一段用于描绘盘面*/ for(j=0;j=pix-10 & xms=2 & yms=pix-6 & xms=17 & yms=pix-6 & xms=28 yms=pix-6 & xms

12、=39 yms=pix-6 & xms=50 yms=pix-6 & xms=61 & yms=pix-6 & xms=72 & yms=pix-6 & xms=83 & yms=250-sizel-2 & yms = 30-sizel-2 & xms=250+sizel+2 & yms=0 & yms-piy =0 & xmspix+x*size & yms=0 & y1-1=0 & pan1x1-1y1-1=2) i+; if(y1-1=0 & pan1x1y1-1=2)i+; if(x1+1=0 & pan1x1+1y1-1=2) i+; if(x1-1=0 & pan1x1-1y1=2

13、) i+; if(x1+1=0 & y1+1y & pan1x1-1y1+1=2) i+; if(y1+1y & pan1x1y1+1=2) i+; if(x1+1x & y1+1=0 & y1-1=0 & pan1x1-1y1-1!=2) if(panx1-1y1-1!=9) Draw1(x1-1,y1-1); else Dead(sizel,x,y); k=0; if(y1-1=0 & pan1x1y1-1!=2) if(panx1y1-1!=9) Draw1(x1,y1-1); else Dead(sizel,x,y); k=0; if(x1+1=0 & pan1x1+1y1-1!=2)

14、 if(panx1+1y1-1!=9) Draw1(x1+1,y1-1); else Dead(sizel,x,y); k=0; if(x1-1=0 & pan1x1-1y1!=2) if(panx1-1y1!=9) Draw1(x1-1,y1); else Dead(sizel,x,y); k=0; if(x1+1=0 & y1+1y & pan1x1-1y1+1!=2) if(panx1-1y1+1!=9) Draw1(x1-1,y1+1); else Dead(sizel,x,y); k=0; if(y1+1y & pan1x1y1+1!=2) if(panx1y1+1!=9) Draw

15、1(x1,y1+1); else Dead(sizel,x,y); k=0; if(x1+1x & y1+1y &pan1x1+1y1+1!=2) if(panx1+1y1+1!=9) Draw1(x1+1,y1+1); else Dead(sizel,x,y); k=0; Open(x,y); /*胜利条件*/ k1=0; for(i=0;ix;i+) for(j=0;jy;j+) if(pan1ij!=1) k1+; if(k1=sum) for(i=0;ix;i+) for(j=0;jy;j+) if(pan1ij=0) setcolor(10);circle(i*size+pix+7,

16、j*size+piy+7,4); Facedraw(250,30,sizel,3); if(x=9 & ttco0) j=0;co0=tt;i=0; if(x=16 & ttco1) j=1;co1=tt;i=0; if(x=30 & ttco2) j=2;co2=tt;i=0; if(i=0) Draw(10,10,300,55); setcolor(4); outtextxy(20,15,You break the corse!); outtextxy(20,25,Please input your name(0 - 19):); setfillstyle(1, 14); bar(20,3

17、5,200,50); for(i=0;i19;i+) nameji=getch; if(nameji=8) i=i-2; if(nameji=13) nameji=0;break; nameji+1=0; setfillstyle(1, 14); bar(20,35,200,50); setcolor(1); outtextxy(20,40,namej); if(p = fopen(score.dat, w) = NULL) printf(The file cannot open!n); exit(1); fprintf(p,%d %d %d,co0,co1,co2); for(i=0;i3;

18、i+) fprintf(p,%sn,namei); fclose(p); Coread; getch; goto bss; /*结束111的判断*/ /*下面是一些快捷功能键的定义*/ if(ams=q|ams=Q| ams=27 ) fclose(p);closegraph;farfree(Map);exit(1); /*退出主程序的唯一出口*/ if(ams=c|ams=C) goto bss; /*重来*/ if(ams=h|ams=H) Help;k=0; /*帮助文档*/ if(ams=r|ams=R) Coread;k=0; /*察看成绩*/ getimage(xms,yms,xm

19、s+20,yms+20,Map); Ddraw2(xms,yms); delay(10); /*结束鼠标循环读取的死循环*/ /*+主函数结束+*/ /*这个函数用于实现鼠标的初始化*/ int Msinit int recored; regs.x.ax=0; int86 (0x33, & regs, & regs); recored=regs.x.ax; if(recored=0) printf(Mouse not found or Mouse driver not installed.n); return 0; else return recored; /*下面这个子程序是完成描绘一个按钮

20、*/ void Draw(int x,int y,int sizex,int sizey)/* x, y为左上角坐标sizex,sizey为长和宽*/ int sizx=sizex-1; int sizy=sizey-1; setcolor(15);/*这里最好用白色*/ line(x,y,x+sizx-1,y); line(x,y+1,x+sizx-2,y+1); line(x,y,x,y+sizy-1); line(x+1,y,x+1,y+sizy-2); setcolor(8);/*这里最好用深灰色*/ line(x+1,y+sizy,x+sizx,y+sizy); line(x+2,y

21、+sizy-1,x+sizx,y+sizy-1); line(x+sizx-1,y+1,x+sizx-1,y+sizy); line(x+sizx,y+2,x+sizx,y+sizy); setcolor(7);/*这里最好用灰色*/ putpixel(x,y+sizy,3); putpixel(x+1,y+sizy-1,3); putpixel(x+sizx,y,3); putpixel(x+sizx-1,y+1,3); setfillstyle(1, 7);/*这里最好用灰色,设置填充模式*/ bar(x+2,y+2,x+sizx-2,y+sizy-2); /*下面是一些画图程序*/ /*

22、形参x,y笑脸的中心坐标,sizel脸的大小(半径), k为要描述的脸型,1:哭、2:平常、3:笑*/ void Facedraw(int x,int y,int sizel,int k) Draw(x-sizel-3,y-sizel-3,2*(sizel+4),2*(sizel+4);/*画一个按钮*/ setcolor(14); setfillstyle(1, 14); pieslice(x, y, 0, 360, sizel);/*画一个黄色的圆面*/ setfillstyle(1, 0); setcolor(0); if(k=1)/*失败*/ line(x-sizel*7/20,y-s

23、izel*7/20,x-sizel*3/20,y-sizel*3/20);/*画两个差表示眼睛*/ line(x-sizel*7/20,y-sizel*3/20,x-sizel*3/20,y-sizel*7/20); line(x+sizel*3/20,y-sizel*7/20,x+sizel*7/20,y-sizel*3/20); line(x+sizel*3/20,y-sizel*3/20,x+sizel*7/20,y-sizel*7/20); arc(x,y+sizel,20,160, sizel/2); if(k=2)/*平常*/ bar(x-sizel*7/20,y-sizel*7/

24、20,x-sizel*3/20,y-sizel*3/20); bar(x+sizel*3/20,y-sizel*7/20,x+sizel*7/20,y-sizel*3/20); arc(x,y,200,340, sizel*3/4); if(k=3)/*成功*/ bar(x-sizel/2,y-sizel/2,x-sizel*3/20,y-sizel*3/20); bar(x+sizel*3/20,y-sizel/2,x+sizel/2,y-sizel*3/20); line(x-sizel*3/20,y-sizel/2,x+sizel*3/20,y-sizel/2); line(x-size

25、l/2,y-sizel*5/20,x-sizel,y); line(x+sizel/2,y-sizel*5/20,x+sizel,y); arc(x,y,200,340, sizel*3/4); /*嘴巴*/ /*死亡后的处理程序*/ /*x,y要判断的点的坐标,sizel为脸的大小*/ void Dead(int sizel,int x,int y) int i,j;/*循环变量*/ setcolor(4); for(i=0;ix;i+) for(j=0;jy;j+) if(panij=9) circle(i*size+pix+7,j*size+piy+7,4); /*用红色的圆圈标记有雷的

26、方块*/ Facedraw(250,30,sizel,1); Eflags=1; /*下面的函数用于实现设置鼠标的移动范围*/ /*xmax,ymax为左上角的坐标x,y矩阵的大小*/ void Setmouse(int xmax,int ymax,int x,int y) int left,right,top,buttom;/*这四个变量用于确定移动的左上角和右下角*/ left=xmax; right=x; top=ymax; buttom=y; regs.x.ax=7; regs.x.cx=left; regs.x.dx=right; int86(0x33,& regs,& regs); regs.x.ax=8; regs.x.cx=top; regs.x.dx=buttom; int86(0x33,& regs,& regs); /*下面这个函数用于实现鼠标的读取*/ /*xp,yp,bup分别为鼠标的位置和按键情况,t1,k是时间现实参数,t1为开始时间,k为开始标记*/ int Msread(int *xp,int *yp,int *bup,struct time t1,int k) int x0=*xp,y0

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号