You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
278 lines
3.9 KiB
278 lines
3.9 KiB
最近
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <math.h>
|
|
#include <time.h>
|
|
//#include <conio.h>
|
|
#define CLS system("cls");
|
|
#define R 7
|
|
#define L 7
|
|
#define AMOUNT 6
|
|
|
|
int ca=0,cb=0;
|
|
bool end=0;
|
|
int xlocation=0,ylocation=0,sum=0;
|
|
char ifstart=0;
|
|
char a[R][L]={0};
|
|
char b[R][L]={0};
|
|
char c[R+2][L+2]={0};
|
|
|
|
struct Block
|
|
{
|
|
bool changable;
|
|
int value;
|
|
};
|
|
struct Block aa[R][L];
|
|
|
|
void initial();
|
|
void game();
|
|
void choose();
|
|
int ifsure(int x);
|
|
void ifbreakend();
|
|
void ifwinend();
|
|
void printsituation();//debug函数
|
|
void printwhole();//打印棋盘
|
|
|
|
int main()
|
|
{
|
|
initial();
|
|
choose();
|
|
}
|
|
|
|
void choose()
|
|
{
|
|
printf("是否开始游戏\n1-开始\n2-退出\n");
|
|
scanf("%d",&ifstart);
|
|
switch(ifstart)
|
|
{
|
|
case 1 :
|
|
printf("开始游戏\n");
|
|
getchar();
|
|
CLS
|
|
game();
|
|
break;
|
|
case 2 :
|
|
printf("成功退出\n");
|
|
CLS
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
}
|
|
|
|
void game()
|
|
{
|
|
initial();
|
|
int ifx=0,ify=0;
|
|
int i=0,j=0,leix=0,leiy=0,leia=0;
|
|
bool jd=0,jx=1;
|
|
printf("\n");
|
|
while (1)
|
|
{
|
|
if(jx)
|
|
{
|
|
for(;i<R;i++)
|
|
{
|
|
for(;j<L;j++)
|
|
{
|
|
printf("?");
|
|
}
|
|
j=0;
|
|
printf("\n");
|
|
}
|
|
}
|
|
printf("请选择坐标(先行后列)\n");
|
|
scanf("%d %d",&i,&j);
|
|
CLS
|
|
xlocation=i-1;
|
|
ylocation=j-1;
|
|
ifx=ifsure(xlocation);
|
|
ify=ifsure(ylocation);
|
|
jd=(!(ifx||ify));
|
|
if(jd)
|
|
{
|
|
a[xlocation][ylocation]=1;
|
|
aa[xlocation][ylocation].changable=0;
|
|
if(jx)
|
|
{
|
|
for(;leia<AMOUNT;leia++)//放置雷
|
|
{
|
|
srand(clock());
|
|
leix=abs(((rand()+1)%(R+1))-1);
|
|
leiy=abs(((rand()+1)%(L+1))-1);
|
|
if(b[leix][leiy]==0&&a[leix][leiy]==0)
|
|
{
|
|
b[leix][leiy]=1;
|
|
}
|
|
else leia--;
|
|
}
|
|
jx=0;
|
|
}
|
|
printwhole();
|
|
ifbreakend();
|
|
if(end)
|
|
{
|
|
printf("你踩雷了!拜拜!\n(按任意键继续)");
|
|
printsituation();
|
|
getchar();
|
|
choose();
|
|
break;
|
|
}
|
|
ifwinend();
|
|
if(end)
|
|
{
|
|
printf("恭喜获胜!\n(按任意键继续)");
|
|
getchar();
|
|
getchar();
|
|
CLS
|
|
choose();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
int ifsure(int x)
|
|
{
|
|
if(x<0||x>R)
|
|
{
|
|
printf("位置不合法,请重新选择!\n");
|
|
return 1;
|
|
}
|
|
else return 0;
|
|
}
|
|
|
|
void ifbreakend()
|
|
{
|
|
int i1=0,j1=0;
|
|
bool r1=0,r2=0;
|
|
for(;i1<R;i1++)
|
|
{
|
|
for(;j1<L;j1++)
|
|
{
|
|
r1=a[i1][j1];
|
|
r2=b[i1][j1];
|
|
if (r1==r2&&r1==1)
|
|
{
|
|
end=1;
|
|
}
|
|
}
|
|
j1=0;
|
|
}
|
|
}
|
|
|
|
void ifwinend()
|
|
{
|
|
int i2=0,j2=0,amo=0;
|
|
bool r3=0,r4=0;
|
|
for(;i2<R;i2++)
|
|
{
|
|
for(;j2<L;j2++)
|
|
{
|
|
r3=a[i2][j2];
|
|
r4=b[i2][j2];
|
|
if (r3!=r4)
|
|
{
|
|
amo++;
|
|
}
|
|
}
|
|
j2=0;
|
|
}
|
|
if(amo==R*L)
|
|
{
|
|
end=1;
|
|
}
|
|
}
|
|
|
|
void printsituation()
|
|
{
|
|
int ii=0,ji=0;
|
|
printf("\n");
|
|
printf("a:\n");
|
|
for(;ii<R;ii++)
|
|
{
|
|
for(;ji<L;ji++)
|
|
{
|
|
printf("%d",a[ii][ji]);
|
|
}
|
|
ji=0;
|
|
printf("\n");
|
|
}
|
|
printf("\n");
|
|
printf("b:\n");
|
|
ii=0,ji=0;
|
|
for(;ii<R;ii++)
|
|
{
|
|
for(;ji<L;ji++)
|
|
{
|
|
printf("%d",b[ii][ji]);
|
|
}
|
|
ji=0;
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
void printwhole()
|
|
{
|
|
int ip=0,jp=0,is=0,js=0;
|
|
for(;is<R;is++)
|
|
{
|
|
for(;js<L;js++)
|
|
{
|
|
if(a[is][js])
|
|
{
|
|
for(;ip<R;ip++)
|
|
{
|
|
for(;jp<L;jp++)
|
|
{
|
|
c[ip+1][jp+1]=b[ip][jp];
|
|
}
|
|
jp=0;
|
|
}
|
|
ip=jp=0;
|
|
sum=c[xlocation][ylocation]+c[xlocation][ylocation+1]+c[xlocation][ylocation+2]+c[xlocation+1][ylocation]+c[xlocation+1][ylocation+2]+c[xlocation+2][ylocation]+c[xlocation+2][ylocation+1]+c[xlocation+2][ylocation+2];
|
|
if (!aa[xlocation][ylocation].changable)
|
|
{
|
|
aa[xlocation][ylocation].value=sum;
|
|
}
|
|
}
|
|
if(((aa[is][js].value==0)&&(!aa[is][js].changable))||((aa[is][js].value!=0)&&(!aa[is][js].changable)))
|
|
{
|
|
printf("%d",aa[is][js].value);
|
|
aa[is][js].changable=0;
|
|
}
|
|
else printf("?");
|
|
}
|
|
js=0;
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
void initial()
|
|
{
|
|
ca=cb=0;
|
|
for(;ca<R;ca++)
|
|
{
|
|
for(;cb<L;cb++)
|
|
{
|
|
aa[ca][cb].changable=1;
|
|
aa[ca][cb].value=0;
|
|
a[ca][cb]=0;
|
|
b[ca][cb]=0;
|
|
}
|
|
cb=0;
|
|
}
|
|
ca=cb=0;
|
|
for(;ca<R+2;ca++)
|
|
{
|
|
for(;cb<L+2;cb++)
|
|
{
|
|
c[ca][cb]=0;
|
|
}
|
|
cb=0;
|
|
}
|
|
ca=cb=end=0;
|
|
xlocation=0,ylocation=0,sum=0;
|
|
ifstart=0;
|
|
}
|