如何用C语言写一个猜谜游戏?
*/
# 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();
}