您的位置:首页 > 其它

程序设计:剪刀、石头、布(二)

2017-01-04 22:58 190 查看
问题及代码

/*烟台大学计算机与控制工程学院
题目描述:剪刀石头布小游戏。功能包括:
(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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: