游戏软件的开发——吃苹果(C语言版)

 

实验要求: 1.游戏输赢的评定标准是:给定一定数量的苹果,谁取了最后一个苹果就算谁赢。游戏规则是:人和电脑双方轮流取苹果;第一次无论哪一方先取苹果,都只能取“ 1~总苹果数目-1”之间(包括边界)数目的苹果;之后的每一方取苹果的数目只能是“1~上一次对方取苹果数目的两倍”之间的苹果个数;直至某一方将苹果取完为止,游戏才告结束。 2.该实验的课内学时是 4个课时。 3.程序完成后应该完成如下基本功能: 1)游戏取苹果的先后次序可以选择(人先取或电脑先取)。 2)在游戏中人取多少个苹果由参加游戏的用户自己决定输入,输入之后程序必须判断用户是否按规则输入苹果个数(每一方取苹果的数目只能是“ 1~上一次对方取苹果数目的两倍”之间的苹果个数)。因此程序应该有明确的提示信息,提示用户输入的苹果以及应该输入的苹果个数范围。用户输入之后,程序必须检查用户输入是否正确。 3)电脑取苹果的数目由程序来决定,赢取游戏的关键是费波那契数列的应用。具体参看实验提示。 4)游戏最后必须说明哪一方赢得游戏。 4.在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能: 1)游戏的速度分为快速和慢速两种。快速游戏的电脑取苹果个数方法参看实验提示。 2)游戏的提示语言清晰明确,界面美观适用。 /**********************************  源代码 ********************************************/ #include “stdio.h”
#include
#include
#include
int Apple_Fenjie[40];//全局变量,用于存储将一个数分解完后的斐波那契数
int Human_Chose[100],Computer_Chose[100],Apple_Total; 
                     //全局变量,分别用来存储玩家和电脑所选的数,及剩余苹果数        
/* 1 *********************************************/
int PanDuan_Fibo(int m)
//判断一个数是否为斐波那契数,是就返回其在数列中的下标,不是则返回0
{   int Fibo[40],i,j=0;
  Fibo[0]=0;
  Fibo[1]=Fibo[2]=1;
 for(i=2;i   Fibo[i]=Fibo[i-2]+Fibo[i-1]; 
 for(i=0;i     if (m==Fibo[i])
      return i;  
 return 0; 
}
/* 2 *********************************************/
int FenJie_Fibo(int Apple_Fenjie[40],int m)
//将一个数m分解,并将结果存在数组Apple_Fenjie[40]中,函数返回数组的最大下标
   { int Fibo[40],i,j=0,k;
  Fibo[0]=0;
  Fibo[1]=Fibo[2]=1;
  for(i=2;i      Fibo[i]=Fibo[i-2]+Fibo[i-1]; 
  k=PanDuan_Fibo(m);
   if(k==0)
   {  for(i=0;m>0; )
     { if(m       {Apple_Fenjie[j]=Fibo[i-1];
        m=m-Apple_Fenjie[j];
        j++;i=-1;
      }
      i++;
     }
   }
   else
     {j=1;
      Apple_Fenjie[j-1]=Fibo[k-1];
      Apple_Fenjie[j]=Fibo[k-2];
      j++;
     } 
 return j-1;       
}
/* 3 ********************************************************************/
  int Computer(int speed,int i,int Who_First)       //电脑取苹果 
        {   int min,j,Apple_Quick,floag=0,Apple_Fenjie1[40],temp=0;
          Human_Chose[0]=Apple_Total/2-1;
             Computer_Chose[0]=Apple_Total/2-1; 
         min=FenJie_Fibo(Apple_Fenjie,Apple_Total);  
            if(Who_First==1)     
              temp=1;           
           if(Apple_Total              { Computer_Chose[i]=Apple_Total;
                Apple_Total=Apple_Total-Computer_Chose[i];
              }
             else if((Apple_Fenjie[min]               {  if(speed==1)
                   {Computer_Chose[i]=Apple_Fenjie[min];
                     Apple_Total=Apple_Total-Computer_Chose[i];
                   }
                 else if(speed==2)
                    {  Apple_Quick=Apple_Fenjie[min];
                      for(j=1;1;j++)
                        {  Apple_Quick=Apple_Quick+Apple_Fenjie[min-j]; 
                           if((Apple_Quick                                {  floag=FenJie_Fibo(Apple_Fenjie1,Apple_Total-Apple_Quick);
                                if(Apple_Fenjie1[floag]>2*Apple_Quick)
                                  continue;
                                else
                                  break; 
                               }
                           break;
                        }
                      Apple_Quick=Apple_Quick-Apple_Fenjie[min-j];
                      Computer_Chose[i]=Apple_Quick;
                       Apple_Total=Apple_Total-Computer_Chose[i];
                    }
              }
           else
               { Computer_Chose[i]=1;
                 Apple_Total=Apple_Total-Computer_Chose[i];
               }
            if(Who_First==1)
              {printf(“电脑取[1~%d]:%dn”,Human_Chose[i]*2,Computer_Chose[i]);
              }
            else if(Who_First==2)
              {  
                if (i==1)
                printf(“t|第%d轮–剩下%d个苹果–电脑取[1~%d]:%dn”,i,Apple_Total+Computer_Chose[i],Apple_Total+Computer_Chose[i]-1,Computer_Chose[i]);
               else if(i>=2)
                printf(“t|第%d轮–剩下%d个苹果–电脑取[1~%d]:%dn”,i,Apple_Total+Computer_Chose[i],Human_Chose[i-1]*2,Computer_Chose[i]);  
              }
           if(Apple_Total               { printf(“nt电脑胜利!!n”);
                return 0;
              }
           if(Who_First==2)
           {printf(“t|第%d轮–剩下%d个苹果–玩家取[1~%d]:”,i,Apple_Total,Computer_Chose[i]*2);
           }
           return 1;  
       }             
/* 4 *****************************************************/
  int Human(int i,int Who_First)           //玩家取苹果
        {  if(Who_First==1)
          {
           if (i==1)
               {printf(“t|第%d轮–剩下%d个苹果–玩家取[1~%d]:”,i,Apple_Total,Apple_Total-1);
                scanf(“%d”,&Human_Chose[i]);
                while(Human_Chose[i]Apple_Total-1)
                   {printf(“tt非法取苹果,请重取[1~%d]:”,Apple_Total-1);
                    scanf(“%d”,&Human_Chose[i]);
                   }
               }
             else if(i>=2)
               {
                 printf(“t|第%d轮–剩下%d个苹果–玩家取[1~%d]:”,i,Apple_Total,Computer_Chose[i-1]*2);
                 scanf(“%d”,&Human_Chose[i]);
                  while(Human_Chose[i]Computer_Chose[i-1]*2)
                     { printf(“tt非法取苹果,请重取[1~%d]:”,Computer_Chose[i-1]*2);
                      scanf(“%d”,&Human_Chose[i]);   
                     }
               }
          }
          else if(Who_First==2)
           { scanf(“%d”,&Human_Chose[i]);
              while(Human_Chose[i]Computer_Chose[i]*2)
                   {printf(“tt非法取苹果,请重取[1~%d]:”,Computer_Chose[i]*2);
                    scanf(“%d”,&Human_Chose[i]);
                   }
           }
           Apple_Total=Apple_Total-Human_Chose[i];
           if(Apple_Total               {  printf(“nt玩家胜利!!n”);
                return 0;
              }
           if(Who_First==1)
             printf(“t|第%d轮–剩下%d个苹果–“,i,Apple_Total);
           return 1;
        }
/* 5 ********************************************************/
   void Computer_FirstChose(int Apple_Total,int speed,int Who_First)  //电脑先取
       {  int i=1;
          while(1)    
           { if(Computer(speed,i,Who_First)==0)
              break;
            if(Human(i,Who_First)==0)
              break;
            i++;
           }          
       }
/* 6 ***********************************************************/
   void Human_FirstChose(int Apple_Total,int speed,int Who_First)  //玩家先取
     {  int i=1;
     while(1)
     { if(Human (i,Who_First)==0)
              break;
       if(Computer(speed,i,Who_First)==0)
              break;
      i++;
     }
     }  
/*************************************************/
  int Game_Description( )   //游戏说明
  {  system(“cls”);fflush(stdin);
    printf(“nnt|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
     printf(“t|ttt   “吃苹果”游戏说明tttt       |n”);
     printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
     printf(“t|游戏输赢的评定标准是:给定一定数量的苹果,谁取了最后一个苹果就算谁赢。        |n”);
     printf(“t|游戏规则是:tttttttt       |n”);
     printf(“t|  人和电脑双方轮流取苹果;第一次无论哪一方先取苹果,都只能取“1~总苹果数目-1”|n”);
     printf(“t|之间(包括边界)数目的苹果;之后的每一方取苹果的数目只能是“1~上一次对方取苹果|n”);
     printf(“t|数目的两倍”之间的苹果个数;直至某一方将苹果取完为止,游戏才告结束。          |n”);
     printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
     printf(“nntttt–返回主菜单    n”);
     getch();    
     return 1;
  }   
/****************************************************/
  int Game_Enter(int speed,int Who_First )  //进入游戏
  {  char temp;
    system(“cls”);fflush(stdin);
    printf(“nt  进入游戏==>游戏信息: “);
    if(speed==1)
       printf(““);
    else if(speed==2)
       printf(““);
    if(Who_First==1)
       printf(” 先取”); 
    if(Who_First==2)
       printf(” 先取”);
    printf(“nt|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
     printf(“t|tt第一步==设置苹果总数t        |n”);
     printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
     printf(“t|>–由玩家输入tttt| n”);
     printf(“t|>–由电脑随机产生ttt|n”);
     printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
    printf(“t|t请选择==>”);
    temp=getchar();
    switch(temp)
    { case ‘1’:
          {  printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
           printf(“t|t请输入苹果总数:t”);
           scanf(“%d”,&Apple_Total);
           while(Apple_Total               {printf(“t|t请重新输入苹果总数(>=2):t”);
               scanf(“%d”,&Apple_Total);
              }
           printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
               printf(“nttt–开始取苹果     n”);
           return 1;
          }
      default:
            { srand((unsigned)time(NULL));
                Apple_Total=rand()%200;
                printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
                printf(“t|t电脑随机产生的苹果数是:%d 个n”,Apple_Total);
                printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
               printf(“nttt–开始取苹果    n”);
                return 1;
            }
    }
    getch();
  }        
    
/*************************************************/
 void Game_Setting(int*speed,int*Who_First)   //游戏的开始设置
  {  int chose;
     system(“cls”);
     printf(“nnt|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
     printf(“t|t欢迎进入“吃苹果”游戏–苏贵阳tt|n”);
     printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
     printf(“t|t-进入游戏t -电脑先取tt|n”);
     printf(“t|t-提高难度t -游戏说明tt|n”);
     printf(“t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|n”);
     chose=getchar();
     switch(chose)
     {
      case ‘1’:
                Game_Enter(*speed,*Who_First); break;
      case ‘2’:
              { system(“cls”);
               *Who_First=2;
               printf(“nnttt设置完成,现在是由>先取苹果”);
               printf(“nntttt–返回主菜单    n”);
                 getch();
                 Game_Setting(speed,Who_First);
              } break;
      case ‘3’:
              { system(“cls”);
               *speed=2;
               printf(“nnttt设置完成,现在游戏难度已提升为–>”);
               printf(“nntttt–返回主菜单    n”);
                 getch();
                 Game_Setting(speed,Who_First);
              } break;
      case ‘4’:
               if(Game_Description( ))
                 Game_Setting(speed,Who_First);
                 break;
      default: Game_Setting(speed,Who_First);
     }
 }
/* 7 ****************************************************************/
void main()      //主函数
{   int speed,Who_First;
  begin:
  speed=1;Who_First=1;
  Human_Chose[0]=Apple_Total/2-1;
     Computer_Chose[0]=Apple_Total/2-1;   
   
     Game_Setting(&speed,&Who_First);
     getch();
    if(Who_First==1)
        {   printf(“nnt现在正式开始取苹果:nn”);
         Human_FirstChose(Apple_Total,speed,Who_First); 
        } 
     else if(Who_First==2)
        {  printf(“nnt现在正式开始取苹果:nn”);
           Computer_FirstChose(Apple_Total,speed,Who_First); 
        } 
      getch();
      printf(“nt-重新游戏,n”);
      getch();
      goto begin; 
     
}  

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览115050 人正在系统学习中 相关资源:GHOST系统只剩C盘数据恢复软件_ghost分区丢失只剩c盘数据恢复…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年10月5日
下一篇 2015年10月6日

相关推荐