新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > C语言猜拳游戏代码及分析

C语言猜拳游戏代码及分析

作者: 时间:2016-12-01 来源:网络 收藏
● 设计思路:包括软件的整体架构、功能块的设计思路、函数封装等等;
● 功能实现:从用户的角度,使用上发现与众不同的地方;
● 其它方面;
c语言程序代码:
/*
func:猜拳游戏
auth:肖乔
date:2014.02.22
*/
#include
#include
#include
#include
#define TRUE 1
typedef struct {
charname[30]; //用户名长度最长28
charpassword[30]; //密码长度最长28
doublemoney;
inttimes;
intwin;
}game_t;
//清空缓存
void fflush_in();
//登录菜单函数
void log_menu();
//功能菜单函数
void ctrl_menu();
//登录函数
int log_in(game_t *p,int *count,int *my);
//注册函数
int add_user(game_t *p,int *count);
//登录控制函数
void log_ctrl(game_t *p,int *count,int*my);
//功能控制函数
void ctrl(game_t *p,int *count,int *my);
//查看函数
void look(game_t *p,int *count,int *my);
//查看菜单
void look_menu();
//查看所有
void look_all(game_t *p,int *count);
//查看个人
void look_my(game_t *p,int *my);
//初始化函数
int log_start(game_t *p,int *count);
//保存函数
int exit_save(game_t *p,int *count);
//充值函数
int pay(game_t *p,int *my);
//修改函数
void alter(game_t *p,int *count,int *my);
//修改菜单
void alter_menu();
//修改密码
int alter_pass(game_t *p,int *my);
//注销用户
int del(game_t *p,int *count,int *my);
//游戏控制函数
void game_ctrl(game_t *p,int *my);
//游戏菜单
void game_menu();
//下注
int game_pay(game_t *p,int *my,double*mon);
//游戏函数
void game_play(game_t *p,int *my,double*mon);
//游戏
int game();
//排序控制函数
void cmp(game_t *p,int *count);
//排序菜单
void cmp_menu();
//按金额排序函数
int cmp_money(const void *px,const void*py);
//胜率函数
void win_times(game_t *p,int *count);
//按胜率排序函数
int cmp_win(const void *px,const void *py);
int main(){
game_tstu[100]={""}; //最多100个用户
intcount=0; //count表示用户数
intmy=0; //my表示本人用户下标
printf("欢迎使用猜拳游戏");
if(log_start(stu,&count)==0) //系统初始化
printf("系统初始化成功");
else
printf("系统初始化失败");
log_ctrl(stu,&count,&my); //功能控制函数
return0;
}
//初始化函数 0-成功1-失败
int log_start(game_t *p,int *count){
FILE*fp=NULL;
fp=fopen("data","a+");
if(NULL==fp)
return1;
while(fread(&p[*count],sizeof(game_t),1,fp))
*count+=1;
fclose(fp);
return0;
}
//保存函数 0-成功 1-失败
int exit_save(game_t *p,int *count){
FILE*fp=NULL;
fp=fopen("data","w");
if(NULL==fp)
return1;;
fwrite(p,sizeof(game_t),*count,fp);
fclose(fp);
return0;
}
//功能控制函数
void ctrl(game_t *p,int *count,int *my){
intchose=0;
while(TRUE){
chose=0;
ctrl_menu();
printf("请选择:");
scanf("%d",&chose);
fflush_in();
switch(chose){
case1: //查看
look(p,count,my);
break;
case2: //游戏
game_ctrl(p,my);
break;
case3: //充值
if(pay(p,my)==0)
printf("充值成功");
else
printf("充值失败");
break;
case4: //修改
alter(p,count,my);
break;
case5: //排序
cmp(p,count);
break;
case6: //返回
return;
break;
default:
printf("输入错误,请重新输入");
}
}
}
//排序控制函数
void cmp(game_t *p,int *count){
intchose=0;
while(TRUE){
chose=0;
cmp_menu();
printf("请选择:");
scanf("%d",&chose);
fflush_in();
switch(chose){
case1: //金额
qsort(p,*count,sizeof(game_t),cmp_money);
printf("排序成功");
break;
case2: //胜率
win_times(p,count);
printf("排序成功");
break;
case3: //返回
return;
break;
default:
printf("输入错误,请重新输入");
}
}
}
//胜率函数
void win_times(game_t *p,int *count){
doublewins[100]={0.0};
doublei=0,j=0;
intk=0;
for(k=0;k<*count;k++){
i=p[k].times;
j=p[k].win;
wins[k]=(i=0?0:(double)j/i*100);
}
qsort(wins,*count,sizeof(game_t),cmp_win);
}
//按胜率排序函数
int cmp_win(const void *px,const void *py){
constgame_t *p1=px;
constgame_t *p2=py;
if(p1->money>p2->money)
return-1;
if(p1->moneymoney)
return1;
else
return0;
}
//按金额排序函数
int cmp_money(const void *px,const void*py){
constgame_t *p1=px;
constgame_t *p2=py;
if(p1->money>p2->money)
return-1;
if(p1->moneymoney)
return1;
else
return0;
}
//排序菜单
void cmp_menu(){
printf("1.按金额排序 2.按胜率排序 3.返回");
}
//游戏控制函数
void game_ctrl(game_t *p,int *my){
intchose=0;
doublemon=0.0;
while(TRUE){
chose=0;
game_menu();
printf("请选择:");
scanf("%d",&chose);
fflush_in();
switch(chose){
case1: //下注
if(game_pay(p,my,&mon)==0)
printf("下注成功,请开始游戏");
else
printf("下注失败");
break;
case2: //猜拳
game_play(p,my,&mon);
break;
case3: //返回
return;
break;
default:
printf("输入错误,请重新输入");
}
}
}
//游戏函数
void game_play(game_t *p,int *my,double*mon){
intresult=0;
intradio=0;
if(*mon==0){
printf("请先下注");
return;
}
p[*my].money-=*mon;
result=game();
srand((unsigned)time(NULL));
radio=rand()%5+1;
if(result==0){
p[*my].money+=0;
printf("平局,余额%.2f",p[*my].money);
p[*my].times+=1;
}
elseif(result==1){
p[*my].money+=(*mon)*radio;
printf("您胜利了,奖金:%.2f余额:%.2f",(*mon)*radio,p[*my].money);
p[*my].times+=1;
p[*my].win+=1;
}
else{
printf("您输了%.2lf,余额%.2lf",*mon,p[*my].money);
p[*my].times+=1;
}
*mon=0.0;
}
//游戏 0-平局,1-胜,-1-输
int game(){
intmy=0;
intradio=0;
while(my!=1&&my!=2&&my!=3){
printf("1.剪刀 2.石头 3.布");
printf("请选择:");
scanf("%d",&my);
fflush_in();
switch(my){
case1:
printf("您出的是剪刀");
break;
case2:
printf("您出的是石头");
break;
case3:
printf("您出的是布");
break;
default:
printf("输入错误,请重新输入");
}
}
srand((unsigned)time(NULL));
radio=rand()%3+1;
if(radio==1)
printf("电脑出的是剪刀");
elseif(radio==2)
printf("电脑出的是石头");
elseif(radio==3)
printf("电脑出的是布");
switch(radio-my)
{
case1:
case-2:
return-1;
case2:
case-1:
return1;
default:
return0;
}
}
//下注 0-成功 1-失败
int game_pay(game_t *p,int *my,double*mon){
doublemoney=0.0;
if(p[*my].money==0){
printf("您的余额为0.00,请充值");
return1;
}
printf("您的余额为:%.2lf元",p[*my].money);
printf("请下注:");
scanf("%lf",&money);
fflush_in();
if(money<=0){
printf("金额输入有误");
return1;
}
if(money>p[*my].money){
printf("余额不足,请充值");
return1;
}
*mon=money;
return0;
}
//游戏菜单
void game_menu(){
printf("1.下注 2.猜拳 3.返回");
}
//修改函数 0-成功 1-失败

评论


技术专区

关闭