如何用C语言写一个猜谜游戏?

/*致主人:本游戏系统可支持多用户游戏,一次只能有一个用户登录。运行该程序将生成一个文件来存储用户信息。这个程序允许的用户数是1000。为了让游戏更有趣,节目特别为不同的玩家分数设计了不同的关卡。当程序初始化时,将生成一个只包含五个系统播放器的文件。游戏过程中,文件会不断刷新。如果玩家想删除之前所有的游戏记录,只需要删除存储的文件即可。存储记录的文件名为“孙一”。如果失主想联系我们,请加QQ好友865363864。添加好友时请注明身份。

*/

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & lttime.h & gt

//#定义NULL 0

/**************************************************************************************************************************/

结构计算机//定义系统播放器结构。

{

char播放器[30];

int分数;

int times

int时间;

} CPT[1000]= { " player 1 ",100,1," player2 ",100,1,1," player3 ",100,1,1," player4 ",100

文件* in//生成指向记录玩家信息的文件的指针。

int数,rool//rool:玩家所在数组的角。number:数组元素的个数。

/****************************************************************************************************************************/

Int h() //生成一个随机数(1,2或3);

{

int k,n;

n = rand()% 3;

返回n+1;

}

/****************************************************************************************************************************/

Int str_to_num(char a[]) //引入函数str_to_num:将字符串转换成整数(Int)!

{

int i=strlen(a)-1,num=0,time = 1;

for(;我& gt=0;我-)

{

num = num+(a[I]-' 0 ')* time;

时间=时间* 10;

}

return(数字);

}

/*****************************************************************************************************************************/

void b(int n)

{

开关((整数)(n/20))

{

Case(0):printf("等级:江湖渣渣");打破;

案例(1):

案例(二):printf("等级:江湖初学者");打破;

情况(3):

案例(4):

案例(5):printf(《官阶:浪子》);打破;

案例(6):

案例(7):

案例(8):

案例(9):printf(《等级:江湖骑士》);打破;

案例(10):

案例(11):

案例(12):

案例(13):

案例(14):

案例(15):

案例(16):

案例(17):

案例(18):

案例(19):printf("年级:学校负责人");打破;

默认值:

{

开关((int)(n/1000))

{

Case(0):printf("等级:武林盟主");打破;

案例(1):

情况(2):

情况(3):

案例(4):printf ("Rank:江湖奇人");打破;

案例(5):

案例(6):

案例(7):

案例(8):

案例(9):printf ("rank:为失败而孤独");打破;

默认:printf ("rank:不朽");打破;

}

}

}

}

/*****************************************************************************************************************************/

Int readfile(void) //读取文件

{

int i,number = 5;

if((in=fopen("sunyi.txt "," rb "))!=空)

{

弗雷德(& ampnumber,sizeof(int),1,in);

for(I = 0;我& lt号码;i++)

{

弗雷德(& ampcpt[i],sizeof(结构计算机),1,in);

}

fclose(in);

}

返回(数字);

}

/******************************************************************************************************************************/

Void writefile() //写入文件

{

int I;

in=fopen("sunyi.txt "," WB ");

fwrite(& amp;number,sizeof(int),1,in);

for(I = 0;我& lt号码;i++)

{

fwrite(& amp;cpt[i],sizeof(结构计算机),1,in);

}

fclose(in);

}

/*******************************************************************************************************************************/

void reule()//规则函数

{

Printf("猜谜游戏\ n ");

printf(" Rule:\ n ");

Printf("输入" n "或" n "查看积分,第一局免费给玩家100金币,每局都是");

Printf("提示您输入保证金,必须大于1金币!(含1枚),游戏开始后提示输入一个1 ~ 3”);

printf(";1表示石头,2表示剪刀,3表示布。同时,系统还会打卡,按照流行规则,胜者”);

Printf("你会拿到押金,否则扣钱。分数小于5分时,将有5次机会获得系统30分的免费积分,“);

Printf("当玩家的金币数为零时(5次后获得30金币的机会已用完),系统会提示玩家结束游戏。并删除”);

Printf("用户除外。\ n ");

Printf(" #这个系统会自动生成5个系统玩家轮流和你玩。游戏开始前,玩家需要登录调用自己”);

Printf("游戏记录的,如果是第一次游戏,请输入"注册",然后输入新的用户名进行注册,如果之前的话");

Printf("玩过游戏,请输入“入口”,然后输入“用户名”登录。\n(注意:该系统允许在该记录中存储多个用户的信息。)\ n \ n”);

}

/*********************************************************************************************************************************/

int register()//游戏开始前的登录和注册。

{

char ch[30];

int I;

环路4:

printf(" \ n第一次玩游戏?请输入“注册”进行注册!\n登录?请输入“入口”登录\ n));

环路3:

scanf("%s ",ch);

if(strcmp("寄存器",ch)==0)

{

环路2:

Printf("请输入新用户名:(长度小于30个字符)");

scanf("%s ",ch);

for(I = 5;我& lt号码;i++)

{

if(strcmp(cpt[i])。player,ch)==0)

{

Printf("该用户已经注册!注册失败!请重新注册!\ n ");

转到loop2

}

}

strcpy(cpt[number])。player,ch);

CPT[编号]。得分= 100;

CPT[编号]。时间= CPT[数字]。次数= 1;

数字+= 1;

writefile();

Printf("注册成功!请以你的用户身份登录并玩游戏!:");

转到loop4

}

else if(strcmp("entry ",ch)==0)

{

Printf("请输入用户名登录:");

scanf("%s ",ch);

for(I = 5;我& lt号码;i++)

{

if(strcmp(cpt[i])。player,ch)==0)

{

Printf("登录成功!\ n ");

Printf("你将在你的用户下玩游戏。!");

打破;

}

}

如果(i = =数字)

{

Printf("输入错误或未注册或用户因丢失所有金币已被系统删除!\ n请重新输入您的用户名登录!");

转到loop4

}

}

其他

{

Printf("您既没有输入"注册",也没有输入"录入",因此系统无法执行您的命令,请重新输入:\ n ");

转到loop3

}

返回(一);

}

/*********************************************************************************************************************************/

Void game() //游戏和查询的主要功能

{

int o,p;

char a[10],wether[1];

If (CPT [rool].time = = 1) printf("我们的游戏系统会免费给你100金币。\ n ");

if(cpt[rool].得分& lt5 & amp& ampcpt[rool]。时代& lt=5)

{

if(cpt[rool].时代& lt5)

{

Printf("你的分数低于5分,系统会给你30金币的%d时间\n ",cpt[rool]。次);

}

其他

{

Printf("你的分数不足5分,系统最后一次给你30金币!\ n ");

}

cpt[rool]。得分+= 30;

cpt[rool]。times+= 1;

game();

}

if(cpt[rool].分数==0)

{

int q;

Printf("没有积分就不能玩!您的用户将被删除。如果您想继续游戏,请重新申请用户\ n游戏结束!\ n ");

for(q = rool;q & lt数字-1;q++)

{

strcpy(cpt[q].玩家,cpt[q+1]。玩家);

cpt[q]。时间=cpt[q+1]。时间;

cpt[q]。times=cpt[q+1]。时代;

cpt[q]。分数=cpt[q+1]。分数;

}

数字-= 1;

writefile();

返回;

}

其他

{

Printf("是否要继续游戏,输入' y '或' y '继续游戏\ n ");

scanf("%s ",wether);

if(strcmp("y ",wether)!= 0 & amp& ampstrcmp("Y ",wether)!=0)

{

printf("游戏停止");

返回;

}

其他

{

loop1:

Printf("请为我们的游戏输入您的存款,或者输入' n '或' n '来查看分数排名\ n ");

环路5:

scanf("%s ",a);

/****************************************************************************************************************************************************/

if(a[0]= ' n ' | | a[0]= ' n ')//搜索排名

{

int i[5]={-1,-1,-1,-1,-1},j,k,d=0,e=0,line =-1;

for(k = 1;k & lt=5;k++)

{

for(d = 0;d & lt5;d++)

{

如果(d!= I[0]& amp;& ampd!= I[1]& amp;& ampd!= I[2]& amp;& ampd!= I[3]& amp;& ampd!=i[4])破;

}

for(j = 0;j & lt号码;j++)

{

if(cpt[j].得分& gt=cpt[d]。得分与奖金。& ampj!= I[0]& amp;& ampj!= I[1]& amp;& ampj!= I[2]& amp;& ampj!= I[3]& amp;& ampj!= I[4])d = j;

}

I[k-1]= d;

if(d==rool)

{

line = k;

}

Printf ("\ nPlayer: %10s,金币数:% 4d,",CPT [d]。球员,CPT [d]。分数);

b(cpt[d]。分数);

}

如果(行!=-1)

{

printf(" \n \ n您当前的分数是:%d,\ n等级为:%d,\ n ",cpt[rool]。分数,线);

b(cpt[rool]。分数);

printf(" \ n \ n ");

}

其他

{

printf(" \n \ n您当前的分数是:% d,\ n不在前5名\ n ",cpt[rool]。分数);

b(cpt[rool]。分数);

printf(" \ n \ n ");

}

game();

}

/*****************************************************************************************************************************************************/

Else //玩游戏

{

int g=0,le = strlen(a);

for(;g & lt乐;g++)

{

如果(!(a[g]>= ' 0 ' & amp& ampa[g]& lt;='9'))

{

Printf("您输入了游戏系统不识别的字符,请重新输入:");

打破;

}

}

if(g & lt;乐)

{

转到loop5

}

int money = str _ to _ num(a);

如果(金钱==0)

{

Printf("押金不能为' 0 ',请重新输入:");

转到loop5

}

如果(钱& lt0)

{

Printf("存款不能为负数,请重新输入:");

转到loop5

}

Printf("你这一轮的玩家是系统玩家% d..\n ",(cpt[rool]。时间-1)% 5+1);

if(cpt[(cpt[rool].时间-1)%5]。得分& lt5)

{

cpt[(cpt[rool]。时间-1)%5]。得分+= 50;

Printf("你的对手金币不足5,系统会给你的对手50金币\ n ");

}

Printf("您设置的存款是%d\n ",money);

如果(钱& gtcpt[rool]。分数)

{

Printf("对不起,你的金币不够!请重新输入!\ n ");

goto loop 1;

}

如果(钱& gtcpt[(cpt[rool]。时间-1)%5]。分数)

{

Printf("对不起,你的对手缺少金币!请重新输入!\ n ");

goto loop 1;

}

if(1 & gt;0)

{

Printf("游戏开始,请打卡!(1表示石头,2表示剪刀,3表示布)”);

scanf("%d ",& ampo);

p = h();

开关(o)

{

案例1:

{

Printf("玩家出拳:石头\ n ");

打破;

}

案例二:

{

Printf("玩家出拳:剪刀\ n ");

打破;

}

案例三:

{

Printf("玩家出拳:布\ n ");

打破;

}

}

开关(p)

{

案例1:

{

printf(" System Punch:Stone \ n ");

打破;

}

案例二:

{

Printf("系统打孔:剪刀\ n ");

打破;

}

案例三:

{

printf(" System Punch:Cloth \ n ");

打破;

}

}

开关(o-p)

{

案例0:

{

Printf("平局!系统不会改变你的金币数量,你的余额是:%d\n ",cpt[rool]。分数);

打破;

}

案例1:

案例二:

{

Printf("如果你输了,系统会扣除%d金币,你的余额是% d \ n ",money,CPT [rool]。分数-钱);

cpt[rool]。分数-=钱;

cpt[(cpt[rool]。时间-1)%5]。score=cpt[(cpt[rool]。时间-1)%5]。分数+钱;

打破;

}

案例-1:

案例二:

{

Printf("你赢了,系统会给你%d金币,你的余额是:% d \ n ",money,CPT [rool]。分数+钱);

cpt[rool]。分数+=钱;

cpt[(cpt[rool]。时间-1)%5]。score=cpt[(cpt[rool]。时间-1)%5]。分数-钱;

打破;

}

}

cpt[rool]。时间+= 1;

writefile();

}

game();

}

}

}

}

Main() //主函数

{

srand((无符号)time(0));

number = readfile();

rule();

rool = register();

game();

}