永发信息网

C语言开发扫雷游戏,C语言设计

答案:2  悬赏:70  手机版
解决时间 2021-04-20 21:28

3.5扫地雷游戏项目介绍

扫地雷是一款益智游戏,只要在不触雷的前提下找到所有雷标,即胜利。因此,它考验着游戏者的智力判断能力,经过多次锻炼有利于挖掘人的大脑智慧潜能,从而久玩不衰。

1、工作原理

在隐秘的雷池里,游戏者借助鼠标点击非雷点,最后锁定雷点;在找的过程中时间越短,得分越高。

2、功能介绍

(1)、界面:有比较友好的界面;

(2)、具有鼠标控制、得分计算、失败提醒等功能;

(3)、具有说明性帮助文件。

最佳答案

请问你是需要代码还是需要思路?

全部回答

源代码

#include <graphics.h> #include <stdlib.h> #include <dos.h> #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:\\program files\\winyes\\tc20h\\bgi"); } 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[i][j].num=random(8); if(Mine[i][j].num==1) mineNUM++; else Mine[i][j].num=2; Mine[i][j].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[i][j].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[i][j+1].num==1) nNUM++; if(Mine[i+1][j].num==1) nNUM++; if(Mine[i-1][j].num==1) nNUM++; if(Mine[i-1][j+1].num==1) nNUM++; if(Mine[i+1][j+1].num==1) nNUM++; } else if(j==9) { if(Mine[i][j-1].num==1) nNUM++; if(Mine[i+1][j].num==1) nNUM++; if(Mine[i-1][j].num==1) nNUM++; if(Mine[i-1][j-1].num==1) nNUM++; if(Mine[i+1][j-1].num==1) nNUM++; } else if(i==0) { if(Mine[i+1][j].num==1) nNUM++; if(Mine[i][j-1].num==1) nNUM++; if(Mine[i][j+1].num==1) nNUM++; if(Mine[i+1][j-1].num==1) nNUM++; if(Mine[i+1][j+1].num==1) nNUM++; } else if(i==9) { if(Mine[i-1][j].num==1) nNUM++; if(Mine[i][j-1].num==1) nNUM++; if(Mine[i][j+1].num==1) nNUM++; if(Mine[i-1][j-1].num==1) nNUM++; if(Mine[i-1][j+1].num==1) nNUM++; } else { if(Mine[i-1][j].num==1) nNUM++; if(Mine[i-1][j+1].num==1) nNUM++; if(Mine[i][j+1].num==1) nNUM++; if(Mine[i+1][j+1].num==1) nNUM++; if(Mine[i+1][j].num==1) nNUM++; if(Mine[i+1][j-1].num==1) nNUM++; if(Mine[i][j-1].num==1) nNUM++; if(Mine[i-1][j-1].num==1) nNUM++; } return(nNUM); } int ShowWhite(int i,int j) { if(Mine[i][j].flag==1||Mine[i][j].num==0) return; mineNUM--; if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1) { DrawEmpty(i,j,1,7); Mine[i][j].num=0; } else if(Mine[i][j].roundnum!=0) { DrawEmpty(i,j,0,8); sprintf(randmineNUM,"%d",Mine[i][j].roundnum); setcolor(RED); outtextxy(195+j*20,95+i*20,randmineNUM); Mine[i][j].num=0; return ; } if(i!=0&&Mine[i-1][j].num!=1) ShowWhite(i-1,j); if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1) ShowWhite(i-1,j+1); if(j!=9&&Mine[i][j+1].num!=1) ShowWhite(i,j+1); if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1) ShowWhite(i+1,j+1); if(i!=9&&Mine[i+1][j].num!=1) ShowWhite(i+1,j); if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1) ShowWhite(i+1,j-1); if(j!=0&&Mine[i][j-1].num!=1) ShowWhite(i,j-1); if(i!=0&&j!=0&&Mine[i-1][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[i][j].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[i][j].flag==1) continue; if(Mine[i][j].num!=0) { if(Mine[i][j].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[i][j].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[i][j].flag==0&&Mine[i][j].num!=0) { DrawRedflag(i,j); Mine[i][j].flag=1; } else if(Mine[i][j].flag==1) { DrawEmpty(i,j,0,8); Mine[i][j].flag=0; } } MouseOn(); sleep(1); } } }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么 就是强不出+12的 郁闷
银桂便利店地址有知道的么?有点事想过去
main food的意思是什么
有GPRS功能和支持JAVA,上网炒股手机推荐
440270001服务费是什么啊~~~扣了我15块
图片缩小以后怎么才能保证还清楚
焦作红叶园林发展有限公司怎么去啊,有知道地
怎样检测硬盘坏道。有什么软件介绍吗。
我的QQ掉了怎么找回来啊
广东省佛山市顺德区有什么镇
现在世界上最贵的房子是哪个国家的。叫什么?
decade剧场版什么时候可以看?
焕新堂地址有知道的么?有点事想过去
关于乡村的谚语,天气谚语有哪些?
请问无锡到德州的动车组有哪几个班次,最好是
推荐资讯
嘉兴或平湖哪儿有卖集光瓶的?
英雄岛兵团宝珠多少人气可以领,怎么领
新亚花园南门怎么去啊,有知道地址的么
疼跟痛有区别吗?
描述草莓好吃的句子,吃月饼的段落和句子
谁有这只卡通猫更多的图片 谢谢了啊 急需
保定距离天津多少公里,河南离天津有多远?
马桶堵了怎么通了通不下去怎么办
我的脸两颊稍胖,单眼皮,眼较小,身高也不高
表示寄情于山水的诗句,对待人物态度的名言
什么东西不可以吃
谢霆锋和陈冠希一起演的电影有哪些?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?