#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
char mode;
void sub_menu(char mode);
void main_menu();
printf(" 欢迎进入 石头剪刀布 对战游戏\n");
printf("请选择对战模式:人人对战(A) 人机对战(B) 退出(C)\n");
printf("你的选择是:");
scanf("%c",&mode);
if(mode=='A') //人人对战
{
printf("人人对战\n");
sub_menu(mode);
}
if(mode=='B')
{
printf("人(roleA)机(roleB)对战\n");//人机对战
sub_menu(mode);
}
if(mode=='C') //退出
exit(1);
return 0;
}
void sub_menu(char mode) //选择对战局数
{
char roleA='A',roleB='B';
void AtoB(char roleA,char roleB,int m,char mode);
int m;
printf("请选择对战局制: 三局两胜制(3) 五局三胜制(5)\n");
scanf("%d%*c",&m);
printf("你的选择:");
if(m==3)
printf("三局两胜制\n");
if(m==5)
printf("五局三胜制\n");
AtoB(roleA,roleB,m,mode);
}
void AtoB(char roleA,char roleB,int m,char mode) // A B对战m局
{
int one_round(char roleA,char roleB,char mode) ; //A B对战1局
int i,winner,scoreA,scoreB;
scoreA=scoreB=0; // 初始化得分
printf("石头(a)、剪刀(b)、布(c)\n");
for(i=1; i<=m; i++)
{
winner=one_round(roleA,roleB,mode); // 一局对战获得胜者
if(winner==roleA)
scoreA++;
if(winner==roleB)
scoreB++;
}
printf("总结局");
printf("roleA:%d ",scoreA); //输出得分
printf("roleB:%d ",scoreB);
if(scoreA==scoreB)
printf("平局\n"); //输出结果
else if(scoreA>scoreB)
printf("roleA胜\n");
else
printf("roleB胜\n");
}
int one_round(char roleA,char roleB,char mode) // roleA 和 roleB 对战1局
{
void show_score(int choiceA,int choiceB);
void show_winner(int choiceA,int choiceB);
char make_choice(char role);
char make_b_choice(char role);
int pk(char ch1,char ch2);
int winner;
char choiceA,choiceB;
if(mode=='A') // 人人获取roleA,B的选择
{
choiceA=make_choice(roleA);
choiceB=make_choice(roleB);
}
if(mode=='B') //人机 获取roleA,B的选择
{
choiceA=make_choice(roleA);
choiceB=make_b_choice(roleB);
}
winner=pk(choiceA,choiceB); // 根据roleA和roleB的选择判断输赢
show_score(choiceA,choiceB); // 输出得分
show_winner(choiceA,choiceB); // 输出获胜者
return winner;
}
char make_choice(char role) //人人返回role选择的结果(石头、剪刀、布)
{
char choice;
scanf("%c%*c",&choice);
printf("%c的选择:",role);
if(choice=='a')
printf("石头\n");
if(choice=='b')
printf("剪刀\n");
if(choice=='c')
printf("布\n");
return choice;
}
char make_b_choice(char role) //人机返回role选择的结果(石头、剪刀、布)
{
char choice;
srand(time(0));
choice=rand()%3+'a';
//printf("%c",choice);
printf("%c的选择:",role);
if(choice=='a')
printf("石头\n");
if(choice=='b')
printf("剪刀\n");
if(choice=='c')
printf("布\n");
return choice;
}
int pk(char choiceA,char choiceB) //返回谁获胜或平局,ch1和ch2表示石头、剪刀、布
{
char roleA='A',roleB='B';
if(choiceA==choiceB)
return 0;
else if(choiceA==choiceB+1||choiceA+2==choiceB)
return roleB;
else
return roleA;
}
void show_score(int choiceA,int choiceB) //输出角色(mode表示人机或人人对战)的得分。
{
if(choiceA==choiceB)
printf("roleB:0 roleA:0");
else if(choiceA==choiceB+1||choiceA+2==choiceB)
printf("roleB:1 roleA:0 ");
else
printf("roleB:0 roleA:1 ");
}
void show_winner(int choiceA,int choiceB) //输出角色(mode表示人机或人人对战)的输赢结果。
{
if(choiceA==choiceB)
printf("平局\n");
else if(choiceA==choiceB+1||choiceA+2==choiceB)
printf("roleB胜\n");
else
printf("roleA胜\n");
}