/*
模拟扫雷游戏
*/
#include <graphics.h>
#include <math.h>
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
union REGS regs;
int size=15;/*用于表示每个方块的大小(正方形的边长)*/
int pix,piy=50;/*pix,piy是矩阵的偏移量*/
char b[2]="1";/*用于显示方格周围的雷的个数*/
int pan[30][16];/*用于记录盘面的情况:0:没有、9:有雷、1~8:周围雷的个数*/
int pan1[30][16];/*pan1[][]纪录当前的挖雷情况,0:没有操作、1:打开了、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,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,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 co[3]; /*暂时纪录历史纪录*/
void far *Map; /*用于保存鼠标图片*/
char name[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("Memory ererr!\n");
printf("Press any key to out!\n");
exit(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,%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<x;i++)/*用于统计各点的周边情况*/
for(j=0;j<y;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<x && j-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<x && pan[i+1][j]==9) pan[i][j]++;
if(i-1>=0 && j+1<y && pan[i-1][j+1]==9) pan[i][j]++;
if(j+1<y && pan[i][j+1]==9) pan[i][j]++;
if(i+1<x && j+1<y && pan[i+1][j+1]==9) pan[i][j]++;
}
}
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<x;i++)/*这一段用于描绘盘面*/
for(j=0;j<y;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))
{
goto bss;
}
/*下面实现菜单的功能,每一项响应一个菜单项*/
if(cflags==0)
{
if((xms>=pix-6 && xms<=pix+85 && yms>=17 && yms<=28 && bms==1)|| (ams=='r' || ams=='R'))/*下面依次响应菜单中各项*/
{
cflags=1;
goto bss;
}
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;
goto bss;
}
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;
goto bss;
}
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;
goto bss;
}
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);
herem
- 粉丝: 2
- 资源: 15
最新资源
- YOLO算法-禾本科杂草数据集-4760张图像带标签.zip
- YOLO算法-无人机俯视视角动物数据集-10140张图像带标签-斑马-骆驼-大象-牛-羊.zip
- YOLO算法-挖掘机与火焰数据集-8129张图像带标签-挖掘机.zip
- YOLO算法-塑料数据集-3029张图像带标签-塑料制品-白色塑料.zip
- PyKDL库源码,编译安装PyKDL库
- YOLO算法-红外探测数据集-10573张图像带标签-小型车-人-无人机.zip
- 基于 C++和TCP和WebSocket的即时通信系统设计与实现(源码+文档)
- 电商管理系统项目源代码全套技术资料.zip
- 全国2022年04月高等教育自学考试02326操作系统试题及答案
- YOLO算法-垃圾数据集-3818张图像带标签-可口可乐-百事可乐.zip
- YOLO算法-瓶纸盒合并数据集-1317张图像带标签-纸张-纸箱-瓶子.zip
- YOLO算法-杂草检测项目数据集-3970张图像带标签-杂草.zip
- YOLO算法-杂草检测项目数据集-3853张图像带标签-杂草.zip
- YOLO算法-挖掘机与火焰数据集-7735张图像带标签-挖掘机.zip
- 文旅项目源代码全套技术资料.zip
- YOLO算法-罐头和瓶子数据集-1531张图像带标签-鲜奶-瓶子.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈