猜拳游戏

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include<windows.h>
#include<time.h>
#define  MAXNAME  10
#define  MAXPASSWORD 10
#define  NAME   "Lucy"
#define  PASSWORD  "123456"
#define  MFLUSH   {int  ch=0;while((ch=getchar())!='\n'&&ch!=EOF);}
#define  PAUSE    {char  ch;   printf("按任意键继续...");  ch =getchar();}
typedef struct  Player{
 char  name[MAXNAME];//存储玩家名
 char  passWd[MAXPASSWORD];//存储玩家密码
 int   total;//游戏次数
 int   victory;//胜利次数
}Player,*pPlayer;
void  Menu(void);//主菜单
pPlayer  CreatePlayer(void);//产生玩家
void  DestroyPlayer();//销毁玩家
void  WinOut(int  playGuess,int  comptGuess);//打印玩家和电脑出的结果
void  ShowRank(void);//排行榜
void  MenuControl();
int  Random();
pPlayer  play=NULL;
//*************************************************
//**************菜单设计函数***********************
//*************************************************
void  Menu()
{
 system("cls");
 printf("欢迎来到猜拳游戏\n");
 printf("================\n\n");
 printf("1.石头  2.布   3.剪刀    0  退出游戏\n");
 printf("请出拳:\n");
}
//*************************************************
//**************创造玩家函数***********************
//*************************************************
pPlayer  CreatePlayer()
{
 pPlayer  tmp=(pPlayer)malloc(sizeof(Player));
 if(NULL==tmp)
  return  NULL;
 strcpy(tmp->name,NAME);
 strcpy(tmp->passWd,PASSWORD);
 tmp->total=0;
 tmp->victory=0;
 return   tmp;
}
//*************************************************
//**************销毁玩家函数***********************
//*************************************************
void   DestroyPlayer()
{
 if(NULL!=play)
        free(play);
 play=NULL;
}
//*************************************************
//**************显示结果函数***********************
//*************************************************
void   WinOut(int  playGuess,int  comptGuess)
{
 if(1==playGuess)
  printf("玩家出了石头\n");
 else if(2==playGuess)
  printf("玩家出了布\n");
 else if(3==playGuess)
  printf("玩家出了剪刀\n");
 if(1==comptGuess)
  printf("电脑出了石头\n");
 else if(2==comptGuess)
  printf("电脑出了布\n");
 else if(3==comptGuess)
  printf("电脑出了剪刀\n");
}
//*************************************************
//**************显示胜率函数***********************
//*************************************************
void  ShowRank()
{
 double   win=0;
 printf("        排行榜\n");
 printf("=========================\n\n");
 printf("玩家名  总局数   所赢局数     胜率\n");
 
 if(0!=play->total)
     win=(double)play->victory/play->total*100;
 printf("%-10s%-10d%-10d%-10.2f%",play->name,play->total,play->victory,win);
}
//*************************************************
//**************控制主函数*************************
//*************************************************
void   MenuControl()
{
 int  playGuess=0;
 int  comptGuess=0;
 int  sub=0;
 while(1)
 {
  Menu();
  do{
   scanf("%d",&playGuess);
            MFLUSH
  }while(playGuess<0||playGuess>3);
  
  if(0==playGuess)
  {
    ShowRank();
    return;
  }
  comptGuess=Random();
  sub=playGuess-comptGuess;
  ++play->total;
  
  WinOut(playGuess,comptGuess);
  switch(sub)
  {
  case  -1:
  case  2:
   printf("恭喜你,你赢了\n");
   ++play->victory;
   break;
  case  0:
   printf("和了\n");
   break;
  default:
   printf("很遗憾,你输了,你可选择再来一局\n");
   break;
  }
  PAUSE
 }
}
//*************************************************
//**************产生随机数函数*********************
//*************************************************
int  Random()
{
 int  i=0;
 for(i=3;i>=0;i--)
 {
  system("cls");
  printf("电脑出拳中:%d",i);
  Sleep(500);
  
 }
 system("cls");
 srand((unsigned  int)(time(NULL)));
 return  rand()%3+1;
}
int main()
{
 play=CreatePlayer();
 if(NULL==play)
     return  1;
 MenuControl();
 DestroyPlayer();
 system("pause");
 return 0;
}

你可能感兴趣的:(c语言所作猜拳游戏)