当前位置:新励学网 > 秒知问答 > C做一个小游戏,有源代码的最好,谢谢

C做一个小游戏,有源代码的最好,谢谢

发表时间:2024-07-18 05:54:10 来源:网友投稿

#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;

}

扫雷小游戏自己编的代码

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!