C做一个小游戏,有源代码的最好,谢谢
#include
#include
#include
#include
#include
#include//时间//文件
#include
#definerandom(x)(rand()%x)
usingnamespacestd;
voidthunder(intDif,intRow,intColumn,char*USer)
{
intr,c,alls[22][22],backstage[22][22]={0};
srand((int)time(0));
for(r=1;r<=Row;r++)//生成alls(0~1)1是雷
{
for(c=1;c<=Column;c++)
{
if(random(6)<1){alls[r][c]=1;}else{alls[r][c]=0;};
}
};
for(r=0;r<=Row+1;r++)//生成backstage(正确答案)
{
for(intc=0;c<=Column+1;c++)
{
if(alls[r][c]==1)
{
(int)backstage[r][c]='*';//将1变为*代表雷
}
else
{
for(inti=r-1;i<=r+1;i++)//将0变为数字(代表周围雷数)
for(intj=c-1;j<=c+1;j++)
{
if(alls[i][j]!=alls[r][c]&&alls[i][j]==1){backstage[r][c]++;};
}
};//else结束
};//for结束
};//for结束
cout<<======================*********================================<<endl;
charsurface[22][22];//生成surface(用户界面)
for(r=0;r<22;r++)//全部为零
for(c=0;c<22;c++)
{
surface[r][c]='0';
}
for(r=1;r(*||数字)的个数赢的时候停止循环)
for(c=1;c<=Column;c++)
{
surface[r][c]='#';
}
for(r=1;r<=Row;r++)//输出surface界面便于检查
{
for(c=1;c<=Column;c++){cout<<<<surface[r][c];};
cout<<endl;
};
cout<<请按格式输入<<endl
<<前两个数字为坐标,最后一个数字“1”表示此位置为雷,“0”则表示不是。<<endl
<<如:131表示一行三列是雷;240表示二行四列不是雷<<endl
<<提示:当数字周围雷都被扫出时,可再次按要求输入此位置,可得到周围数字。<<endl;
longi=10000000L;//计算时间开始
clock_tstart,finish;
doubleduration;
start=clock();
while(i--);//计算时间开始
intnum=Row*Column;//计算#号个数
while(num!=0)//控制是否点完所有位置
{
intx,y,judge;
cin>>x>>y>>judge;
if(alls[x][y]!=judge)
{
cout<<youlose!!!<<endl;
cout<<Theansweris:<<endl;
for(r=1;r<=Row;r++)//输了输出backstage显示正确答案
{
for(intc=1;c<=Column;c++)
{
cout<<<<(char)(backstage[r][c]==42?backstage[r][c]:backstage[r][c]+'0');//输出backstage
}
cout<<endl;
}
break;
}
else
{
if(alls[x][y]==1){if(surface[x][y]=='#'){num--;}surface[x][y]='@';}//雷判断正确显示“@”;数“#”
else
{
if(backstage[x][y]!=0)//数字判断正确显示数字
{
if(surface[x][y]=='#'){num--;surface[x][y]=backstage[x][y]+'0';}//数“#”
else
{
intlei_num=0;
for(inti=x-1;i<=x+1;i++)//数数字周围雷的个数
for(intj=y-1;j<=y+1;j++)
{
if(surface[i][j]=='@')
lei_num++;
}
if(backstage[x][y]==lei_num)//看数字周围雷是否全部扫出提示显示数字周围
{
for(inti=x-1;i<=x+1;i++)
for(intj=y-1;j<=y+1;j++)
if(surface[i][j]=='#')//数“#”
{
surface[i][j]=backstage[i][j]+'0';
num--;
}
}
}
}
else//数字为零时显示零周围的零
{
if(surface[x][y]=='#'){num--;};//数“#”
surface[x][y]=backstage[x][y]+'0';
for(inti=x-1;i<=x+1;i++)//显示零周围的数字
for(intj=y-1;j<=y+1;j++)
if(surface[i][j]=='#')//避免死循环
{
surface[i][j]=backstage[i][j]+'0';
num--; //数“#”
}
for(intk=0;k<20;k++)//最多20层零(点出最边上的零)
{
for(intR=1;R<=Row;R++)//检查所有零
for(intC=1;C<=Column;C++)//再次显示零周围的数字
{
if(surface[R][C]=='0')
{
for(inti=R-1;i<=R+1;i++)
for(intj=C-1;j<=C+1;j++)
{
if(surface[i][j]=='#')//避免死循环数“#”
{
surface[i][j]=backstage[i][j]+'0';
num--;
}
}
}
}//匹配for内
}//匹配for外
}//匹配else
}//匹配else
}//匹配els
cout<<endl;
cout<<======================*********================================<<endl;
for(r=1;r<=Row;r++)//输出界面(已修改)
{
for(c=1;c<=Column;c++){cout<<<<surface[r][c];};
cout<<endl;
};
}//匹配while
finish=clock();//计算时间结束
duration=(double)(finish-start)/CLOCKS_PER_SEC;//时间变量
if(num==0)//所有
{
cout<<Youwin!Congratulations!!<<endl;
cout<<Yourtimeis:<<duration<<endl;
if(Dif==1)//读取简单扫雷的存储文件
{
stringName;
stringname[6];
doubleTime,rang;
doubletimes[6];
inti=0;
ifstreaminf(扫雷简单.txt);
for(i=0;i<5;i++)//文件中信息导入到数组里
{
inf>>Name;inf>>rang>>Time;
name[i]=Name;
times[i]=Time;
}
inf.close();
name[5]=USer;//本轮玩家信息
times[5]=duration;
doublet1=0;
stringt2;
for(intj=0;j<5;j++)//冒泡排序法
{
for(i=0;i<5-j;i++)
{
if(times[i]>times[i+1])
{
t1=times[i];
times[i]=times[i+1];
times[i+1]=t1;
t2=name[i];
name[i]=name[i+1];
name[i+1]=t2;
}
}
}
ofstreamoutf(扫雷简单.txt);
for(i=0;i<5;i++)//将前五名玩家信息存储到文件中
{
cout<<name[i]<<<<i+1<<<<times[i]<<endl;
outf<<name[i]<<<<i+1<<<<times[i]<<endl;
}
outf.close();
}
if(Dif==2)//读取一般扫雷的存储文件
{
stringName;
stringname[6];
doubleTime,rang;
doubletimes[6];
inti=0;
ifstreaminf(扫雷一般.txt);
for(i=0;i<5;i++)//文件中信息导入到数组里
{
inf>>Name;inf>>rang>>Time;
name[i]=Name;
times[i]=Time;
}
inf.close();
name[5]=USer;//本轮玩家信息
times[5]=duration;
doublet1=0;
stringt2;
for(intj=0;j<5;j++)//冒泡排序法
{
for(i=0;i<5-j;i++)
{
if(times[i]>times[i+1])
{
t1=times[i];
times[i]=times[i+1];
times[i+1]=t1;
t2=name[i];
name[i]=name[i+1];
name[i+1]=t2;
}
}
}
ofstreamoutf(扫雷一般.txt);
for(i=0;i<5;i++)//将前五名玩家信息存储到文件中并输出
{
cout<<name[i]<<<<i+1<<<<times[i]<<endl;
outf<<name[i]<<<<i+1<<<<times[i]<<endl;
}
outf.close();
}
if(Dif==3)//读取困难扫雷的存储文件
{
stringName;
stringname[6];
doubleTime,rang;
doubletimes[6];
inti=0;
ifstreaminf(扫雷困难.txt);
for(i=0;i<5;i++)//文件中信息导入到数组里
{
inf>>Name;inf>>rang>>Time;
name[i]=Name;
times[i]=Time;
}
inf.close();
name[5]=USer;//本轮玩家信息
times[5]=duration;
doublet1=0;
stringt2;
for(intj=0;j<5;j++)//冒泡排序法
{
for(i=0;i<5-j;i++)
{
if(times[i]>times[i+1])
{
t1=times[i];
times[i]=times[i+1];
times[i+1]=t1;
t2=name[i];
name[i]=name[i+1];
name[i+1]=t2;
}
}
}
ofstreamoutf(扫雷困难.txt);
for(i=0;i<5;i++)//将前五名玩家信息存储到文件中
{
cout<<name[i]<<<<i+1<<<<times[i]<<endl;
outf<<name[i]<<<<i+1<<<<times[i]<<endl;
}
outf.close();
}
}
}
voidscale(intdif,char*User)//选择难度
{
introw,column;
if(dif==1){row=3;column=3;}
if(dif==2){row=7;column=7;}
if(dif==3){row=10;column=10;}
cout<<Thescaleis:<<row<<*<<column<<endl;
thunder(dif,row,column,User);
};
intmain()
{
intContinue=1;
intdifficulty;
charuser[10];
cout<<Welcomtothegame!<<endl
<<请输入用户名!<<endl;
cin>>user;
while(Continue==1)
{
cout<<=======================*******************=======================<<endl
<<请选择难度!<<endl
<<简单——1<<endl
<<一般——2<<endl
<<困难——3<<endl;
cin>>difficulty;
scale(difficulty,user);
cout<<继续游戏——1结束游戏——0<<endl;
cin>>Continue;
}
return0;
}
扫雷小游戏自己编的代码
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇