问题及代码
/*烟台大学计算机与控制工程学院 题目描述:剪刀石头布小游戏。功能包括: (1)人机对战可以自定义游戏局数; (2)玩家对战有三局和五局模式 (2)采用计分法; 作者:展一 完成时间:2017年1月5日 */ #include <stdio.h> #include <stdlib.h> #include <time.h> void first_menu();//主菜单 void second_menu();//二级菜单 void per_com(int*,int*,int*);//人机 void third_menu();//三级菜单 void per_per3(int*,int*);//玩家三局 void per_per5(int*,int*);//玩家五局 int main() { int game_num,choice,pattern_num,x,i,per=0,com=0,sum1=0,sum2=0,*p_per,*p_com,*p_x,*p_sum1,*p_sum2; p_per=&per; p_com=&com; p_sum1=&sum1; p_sum2=&sum2; first_menu(); scanf("%d",&choice); if(choice==1) { printf("请输入你要玩的局数:"); scanf("%d",&game_num); for(i=0; i<game_num; i++) { second_menu(); scanf("%d",&x); p_x=&x; per_com(p_per,p_com,p_x); } printf("您的得分为:%d 电脑的得分为:%d\n",per,com); if(per==com) { printf("平局!"); } else if(per>com) { printf("你很厉害!"); } else { printf("再接再厉!"); } } else if(choice==2) { third_menu(); scanf("%d",&pattern_num); if(pattern_num==1) { for(i=0; i<3; i++) { per_per3(p_sum1,p_sum2); } printf("玩家一的得分为:%d 玩家二的得分为:%d\n",sum1,sum2); if(sum1==sum2) { printf("平局!"); } else if(sum1>sum2) { printf("玩家一胜出!"); } else { printf("玩家二胜出!"); } } else if(pattern_num==2) { for(i=0; i<5; i++) { per_per5(p_sum1,p_sum2); } printf("玩家一的得分为:%d 玩家二的得分为:%d\n",sum1,sum2); if(sum1==sum2) { printf("平局!"); } else if(sum1>sum2) { printf("玩家一胜出!"); } else { printf("玩家二胜出!"); } } else { printf("谢谢使用!"); return 0; } } else { printf("谢谢使用!"); return 0; } return 0; } /************************************************************* 功能描述:游戏开始时选择游戏模式的主菜单 其他说明:无 *************************************************************/ void first_menu() { printf(" 欢迎进入小蠢蛋剪刀、石头、布游戏系统\n"); printf("请输入编号选择你要进行的对局模式:\n"); printf("1:人机对战\n"); printf("2:玩家对战\n"); printf("3:退出游戏\n"); printf("请选择:"); } /************************************************************* 功能描述:人机模式下选择出招的菜单 其他说明:无 *************************************************************/ void second_menu() { printf("请输入以下编号:\n"); printf("1:剪刀\n"); printf("2:石头\n"); printf("3:布\n"); } /************************************************************* 功能描述:人机模式对战,可以判断胜负并累计积分…… 输入参数:n-玩家与电脑出招编号的差,用来评判胜负 p_x-玩家的出招代表的编号 y-电脑的出招代表的编号 p-per-玩家的积分 p_com-电脑的积分 返 回 值: p_per和p_com 其他说明:无 *************************************************************/ void per_com(int*p_per,int*p_com,int*p_x) { int y,n; srand(time(0)); y=rand()%3+1; n = *(p_x)-y; if(n == 0) { if(*(p_x)==1) printf("我也是剪刀,平局!再来!\n"); else if(*(p_x)==2) printf("我也是石头,平局!再来!\n"); else printf("我也是布,平局!再来!\n"); } else if(n == -1 || n == 2) { if(*(p_x)==1) { printf("我是布,算你厉害\n"); } else if(*(p_x)==2) { printf("我是剪刀,算你厉害\n"); } else { printf("我是石头,算你厉害\n"); } (*p_per)++; } else { if(*(p_x)==1) { printf("哈哈哈!我是石头,你输了!\n"); } else if(*(p_x)==2) { printf("哈哈哈!我是布,你输了!\n"); } else { printf("哈哈哈!我是剪刀,你输了!\n"); } (*p_com)++; } } /************************************************************* 功能描述:玩家对战模式下选择对战局数的菜单… 其他说明:无 *************************************************************/ void third_menu() { printf("请输入编号选择对局数:\n"); printf("1:三局\n"); printf("2:五局\n"); printf("3:退出游戏\n"); printf("请选择:"); } /************************************************************* 功能描述:玩家三局对战模式,可以判断胜负并累计积分 输入参数:n-玩家一与玩家二出招编号的差,用来评判胜负 num1-玩家一的出招 num2-玩家二的出招 p_sum1-玩家一的积分 p_sum2-玩家二的积分 返 回 值:…p_sum1和p_sum2… 其他说明:无 *************************************************************/ void per_per3(int*p_sum1,int*p_sum2) { int num1,num2,n; printf("请玩家一输入<1表示剪刀、2表示石头、3表示布>:"); scanf("%d",&num1); printf("请玩家二输入<1表示剪刀、2表示石头、3表示布>:"); scanf("%d",&num2); n=num1-num2; if(n == 0) { if(num1==1) printf("玩家一出剪刀,玩家二出剪刀,平局!\n"); else if(num1==2) printf("玩家一出石头,玩家二出石头,平局!\n"); else printf("玩家一出布,玩家二出布,平局!\n"); } else if(n == -1 || n == 2) { if(num1==1) { printf("玩家一出剪刀,玩家二出石头,玩家二胜出!\n"); } else if(num1==2) { printf("玩家一出石头,玩家二出布,玩家二胜出!\n"); } else { printf("玩家一出布,玩家二出剪刀,玩家二胜出!\n"); } (*p_sum2)++; } else { if(num1==1) { printf("玩家一出剪刀,玩家二出布,玩家一胜出!\n"); } else if(num1==2) { printf("玩家一出石头,玩家二出剪刀,玩家一胜出!\n"); } else { printf("玩家一出布,玩家二出石头,玩家一胜出!\n"); } (*p_sum1)++; } } /************************************************************* 功能描述:玩家五局对战模式,可以判断胜负并累计积分 输入参数:n-玩家一与玩家二出招编号的差,用来评判胜负 num1-玩家一的出招 num2-玩家二的出招 p_sum1-玩家一的积分 p_sum2-玩家二的积分 返 回 值:…p_sum1和p_sum2… 其他说明:无 *************************************************************/ void per_per5(int*p_sum1,int*p_sum2) { int num1,num2,n; printf("请玩家一输入<1表示剪刀、2表示石头、3表示布>:"); scanf("%d",&num1); printf("请玩家二输入<1表示剪刀、2表示石头、3表示布>:"); scanf("%d",&num2); n=num1-num2; if(n == 0) { if(num1==1) printf("玩家一出剪刀,玩家二出剪刀,平局!\n"); else if(num1==2) printf("玩家一出石头,玩家二出石头,平局!\n"); else printf("玩家一出布,玩家二出布,平局!\n"); } else if(n == -1 || n == 2) { if(num1==1) { printf("玩家一出剪刀,玩家二出石头,玩家二胜出!\n"); } else if(num1==2) { printf("玩家一出石头,玩家二出布,玩家二胜出!\n"); } else { printf("玩家一出布,玩家二出剪刀,玩家二胜出!\n"); } (*p_sum2)++; } else { if(num1==1) { printf("玩家一出剪刀,玩家二出布,玩家一胜出!\n"); } else if(num1==2) { printf("玩家一出石头,玩家二出剪刀,玩家一胜出!\n"); } else { printf("玩家一出布,玩家二出石头,玩家一胜出!\n"); } (*p_sum1)++; } }运行结果
测试数据1:
choice:1
game_num: 1
x: 1
测试数据2:
choice:2
pattern_num:1
sum1:1 2 3
sum2:2 3 1
”