用c写的游戏——扫雷

本文介绍了一个简单的扫雷游戏实现过程,使用C语言编程,并详细解释了游戏的基本逻辑、随机雷区生成、玩家交互及游戏胜利条件判断等核心部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习了,system("cls"); time_t; time(&time);还有格式,思想;


/*#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int num,side;


typedef struct _mine{
char val;
int show;
int safe;
}mine;


void init(mine a[100][100])
{
int n,i,j,k,h;
printf("请输入边长和雷数\n");
scanf("%d%d",&side,&num);
for(i=1;i<=side;i++)
{
for(j=1;j<=side;j++)
{
a[i][j].safe=0;
a[i][j].show=0;
a[i][j].val=' ';
}
}
srand((int)time(0));
n=0;
while(n<num)
{
i=rand()%side+1;
j=rand()%side+1;
if(a[i][j].val=='@')
continue;
a[i][j].val='@';
n++;
}
for(i=1;i<=side;i++)
{
for(j=1;j<=side;j++)
{
if(a[i][j].val!='@')
{
n=0;
for(k=i-1;k<=i+1;k++)
{
for(h=j-1;h<=j+1;h++)
{
if(a[k][h].val=='@')
n++;
}
}
if(n!=0)
{
a[i][j].val=48+n;
}
}
}
}
}


void show(mine a[100][100])
{
int i,j;
printf("  ");
for(i=1;i<=side;i++)
{
printf("%4d",i);
}
printf("\n");
printf("   ");
for(i=1;i<=side;i++)
{
printf("----");
}
printf("\n");
for(i=1;i<=side;i++)
{
printf(" %d | ",i); 
for(j=1;j<=side;j++)
{
if(a[i][j].show==0)
{
printf("%c",'#');
}
else if(a[i][j].show==1)
{
printf("%c",a[i][j].val);
}
else if(a[i][j].show==2) 
{
printf("%c",'?');
}
printf(" | ");
}
printf("\n");
}
printf("   ");
for(i=1;i<=side;i++)
{
printf("----");
}
printf("\n");
}


int shu(mine a[100][100])
{
int i,j,n;
n=0;
for(i=1;i<=side;i++)
{
for(j=1;j<=side;j++)
{
if(a[i][j].show==1)
n++;
}
}
return n;
}


void kongbai(mine a[100][100],int x,int y)
{
int k,h;
if(a[x][y].safe==0)
{
a[x][y].safe=1;
a[x][y].show=1;
if(a[x-1][y].val!='@'&&x-1>=1&&x-1<=side&&y>=1&&y<=side)
{
a[x-1][y].show=1;
if(a[x-1][y].val==' ')
{
kongbai(a,x-1,y);
}
}
if(a[x+1][y].val!='@'&&x+1>=1&&x+1<=side&&y>=1&&y<=side)
{
a[x+1][y].show=1;
if(a[x+1][y].val==' ')
{
kongbai(a,x+1,y);
}
}
if(a[x][y-1].val!='@'&&x>=1&&x<=side&&y-1>=1&&y-1<=side)
{
a[x][y-1].show=1;
if(a[x][y-1].val==' ')
{
kongbai(a,x,y-1);
}
}
if(a[x][y+1].val!='@'&&x>=1&&x<=side&&y+1>=1&&y+1<=side)
{
a[x][y+1].show=1;
if(a[x][y+1].val==' ')
{
kongbai(a,x,y+1);
}
}
}
}


int NUM_mine(mine a[100][100])
{
int i,j,n=0;
for(i=1;i<=side;i++)
{
for(j=1;j<=side;j++)
{
if(a[i][j].val=='?')
{
n++;
}
}
}
return (num-n);
}


void main()
{
mine a[100][100];
int f,x,y,i,j;
char ch;
time_t start_time,end_time;
init(a);
time(&start_time);
while(1)
{
time(&end_time);
system("cls");
show(a);
printf("\n  地雷:%d\t\t\t  时间: %d 秒\n",NUM_mine(a),end_time-start_time);
printf("\n提示: 1为安全,0为地雷,格式(1/0 x y)");
scanf("%d%d%d",&f,&x,&y);
if(f==1)
{
a[x][y].show=1;
if(a[x][y].val=='@')
{
a[x][y].val='X';
time(&end_time);
system("cls");
printf("  ");
for(i=1;i<=side;i++)
{
printf("%4d",i);
}
printf("\n");
printf("   ");
for(i=1;i<=side;i++)
{
printf("----");
}
printf("\n");
for(i=1;i<=side;i++)
{
printf(" %d | ",i); 
for(j=1;j<=side;j++)
{
printf("%c",a[i][j].val);
printf(" | ");
}
printf("\n");
}
printf("   ");
for(i=1;i<=side;i++)
{
printf("----");
}
printf("\n");
printf("\n  地雷:%d\t\t\t  时间: %d 秒\n",NUM_mine(a),end_time-start_time);
printf("\n你输了哈哈哈哈!!!!\n");
printf("还敢来吗?(Y||N)");
getchar();
scanf("%c",&ch);
if(ch=='Y')
{
init(a);
time(&start_time);
}
else
break;
}
else
{
kongbai(a,x,y);
}
if(shu(a)==(side*side-num))
{
time(&end_time);
system("cls");
printf("  ");
for(i=1;i<=side;i++)
{
printf("%4d",i);
}
printf("\n");
printf("   ");
for(i=1;i<=side;i++)
{
printf("----");
}
printf("\n");
for(i=1;i<=side;i++)
{
printf(" %d | ",i); 
for(j=1;j<=side;j++)
{
printf("%c",a[i][j].val);
printf(" | ");
}
printf("\n");
}
printf("   ");
for(i=1;i<=side;i++)
{
printf("----");
}
printf("\n你赢了,蒙的吧\n");
printf("还敢来吗?(Y||N)");
getchar();
scanf("%c",&ch);
if(ch=='Y')
{
init(a);
time(&start_time);
}
else
break;
}
}
else if(f==0)
{
a[x][y].show=2;
}
}
}*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值