c语言之石头剪刀布对战游戏



#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");
   }

河北工业大学计算机软件技术基础(VC) 课程设计任务书 题目:人机对战——石头剪刀布 目的与要求 目的 通过编该程序,培养学生综合利用C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计,并对Windows平台下的控制台进行深入的了解。 基本要求 要求用C++语言编程,在Visual C++环境下调试完成; 要求划分功能模块,各个功能分别使用函数来完成; 源代码程序要求必要的注释。 设计方法和基本原理 课题功能描述 编一个人机进行石头剪刀布的小游戏。要求能够进行完一轮猜拳后,显示统计信息。每一轮游戏的过程是首先由玩家选择要出的拳,然后计算机选择出拳,输出本轮游戏的胜负情况,然后输出统计信息(玩家胜利次数、计算机胜利次数和平局次数),然后每轮猜拳结束后,询问玩家是否要继续游戏游戏界面如下: 主要技术问题的描述 随机函数 随机函数名为rand(),使用时必须包含头文件stdlib.h。 创新要求 在基本要求达到后,进行创新设计: 程序要保证计算机的胜利次数至少是玩家胜利次数的1.5倍。 课程设计的考核方式及评分方法 考核方式 (1) 学生要提交书面课程设计报告(A4纸打印);并将设计报告的电子文档、.cpp源文件和.h头文件放到一个文件夹里上传到所对应班级的学生名称相应文件夹中。 (2) 课程设计结束时,在机房当场验收。教师提供测试数据,由学生运行所设计的系统,检查运行结果是否正确,并回答教师提出的有关问题。 评分方法 根据出勤率、课程设计期间纪律、课程设计运行结果、课程设计报告及答辩情况综合评分。 书设计报告的要求(详细内容见“设计报告模板”) 课程设计的有关文档“设计报告模板”和“课程设计要求”请在下载任务书处下载。    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值