APPLE.CPP
上传用户:wszmarenbt
上传日期:2013-04-26
资源大小:2552k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //THE PROGRAM IS TO SET A GAME BETWEEN PEOPLE & COMPUTER
  2. //FILE APPLE.CPP
  3. #include <stdio.h>
  4. #include <conio.h>
  5. int  CHANCE,FIRST,MODEL,ANSWER;
  6. long LASTGET,WANTGET,SUMAPPLE,FIBONACI[46];
  7. void INITIAL();                         //To  Init      Environment
  8. long FIBFUNCTION(int NUM);              //To  Form      Fibonacci List
  9. void GAME();                            //The Slow      Model Game
  10. void PERSON();                          //The Person    Function
  11. void RESULT(); //To  See the   Result
  12. void MACHINESLOW();                     //The Slow      Machine Function
  13. void MACHINEQUICK();                    //The Quick     Machine Function
  14. int  GETMINFIB(int CURRENTAPPLES);      //To  Get a     Minimum Fibonacci
  15. int main(void)
  16. {
  17. INITIAL();
  18. GAME();                            //To Play the Game of Apple(s)
  19. getch();                           //To See  the Result
  20. RESULT();                          //To See  the Display
  21. getch();
  22. return 0;
  23. }
  24. long FIBFUNCTION(int NUM)
  25. {
  26. long FIB1=1,FIB2=1,FIB3;
  27. int CIRCLE;
  28. if (NUM<=1) return 1;
  29. for (FIB3=FIB1+FIB2,CIRCLE=2;CIRCLE<NUM;CIRCLE++)
  30. {
  31. FIB1=FIB2;
  32. FIB2=FIB3;
  33. FIB3=FIB1+FIB2;
  34. }
  35. return FIB3;
  36. }
  37. void INITIAL()
  38. {
  39. clrscr();
  40. printf("--- Please input the sum number of the apple(s) (sum>=1) : ");
  41. scanf("%ld",&SUMAPPLE);
  42. printf("n--- Please take the chance(0---YOU FIRST / 1---I FIRST): ");
  43. scanf("%d",&CHANCE);
  44. printf("n--- Please take the type(0---SLOW MODEL/ 1---QUICK MODEL): ");
  45. scanf("%d",&MODEL);
  46. if (SUMAPPLE>1)
  47. printf("n--- The first time both of us can only choose 1 - %ldn"
  48.  ,SUMAPPLE-1);
  49. else printf("n--- The first time both of us can only choose 1 !n");
  50. for (int circle=0;circle<46;circle++) FIBONACI[circle]=FIBFUNCTION(circle);
  51. FIRST=1;
  52. LASTGET=0;
  53. }
  54. int GETMINFIB(int CURRENTAPPLES)
  55. {
  56. int circle=45,FOUND=0;               //The above limit of the Fibonacci
  57. while ((circle>=0) && (FOUND==0))
  58. {
  59. while (CURRENTAPPLES<FIBONACI[circle]) circle=circle-1;
  60. if (CURRENTAPPLES==FIBFUNCTION(circle)) FOUND=1;
  61. else
  62. {
  63. CURRENTAPPLES=CURRENTAPPLES-FIBFUNCTION(circle);
  64. circle=circle-1;
  65. }
  66. }
  67. return FIBFUNCTION(circle);
  68. }
  69. void MACHINESLOW()
  70. {
  71. WANTGET=GETMINFIB(SUMAPPLE);
  72. if ((FIRST) && ((SUMAPPLE-GETMINFIB(SUMAPPLE))!=0))
  73. WANTGET=GETMINFIB(SUMAPPLE);
  74. if ((FIRST) && ((SUMAPPLE-GETMINFIB(SUMAPPLE))==0)) WANTGET=1;
  75. if ((WANTGET>2*LASTGET) && (!FIRST)) WANTGET=1;
  76. LASTGET=WANTGET;
  77. SUMAPPLE=SUMAPPLE-WANTGET;
  78. printf("n***** I get %ld apple(s).n",LASTGET);
  79. printf("n----- The Current Apple(s) is/are : %ldn",SUMAPPLE);
  80. CHANCE=0;
  81. FIRST=0;
  82. if (SUMAPPLE==0) printf("n***** I win the GAME !");
  83. ANSWER=0;
  84. }
  85. void MACHINEQUICK()
  86. {
  87. int TRY1,TRY2;
  88. TRY1=TRY2=SUMAPPLE;
  89. WANTGET=GETMINFIB(SUMAPPLE);                      //Initial get
  90. if ((FIRST) && (SUMAPPLE==1)) WANTGET=1;          //Only one apple
  91. while ((FIRST) && (WANTGET*2<(SUMAPPLE-WANTGET)))
  92. {
  93. TRY1=TRY1-GETMINFIB(TRY1);
  94. WANTGET=WANTGET+GETMINFIB(TRY1);
  95. if (WANTGET*2>GETMINFIB(SUMAPPLE-WANTGET))
  96. {
  97. WANTGET=WANTGET-GETMINFIB(TRY1);
  98. break;
  99. }
  100. }
  101. if (((FIRST) && ((SUMAPPLE-GETMINFIB(SUMAPPLE))==0)) && (SUMAPPLE!=1))
  102. WANTGET=WANTGET+1;                           //Fibonacci apples
  103. if ((WANTGET>2*LASTGET) && (!FIRST)) WANTGET=1;
  104. while ((!FIRST)&&((WANTGET*2)<(SUMAPPLE-WANTGET))&&(WANTGET<=2*LASTGET))
  105. {
  106. TRY2=TRY2-GETMINFIB(TRY2);
  107. WANTGET=WANTGET+GETMINFIB(TRY2);
  108. }
  109. if ((FIRST)&&(WANTGET!=0)&&(SUMAPPLE-WANTGET<=WANTGET*2))
  110. WANTGET=WANTGET-GETMINFIB(TRY1);
  111. if ((WANTGET!=1)&&(!FIRST)) WANTGET=WANTGET-GETMINFIB(TRY2);
  112. if (WANTGET==0) WANTGET=WANTGET+GETMINFIB(TRY2);
  113. if ((SUMAPPLE<=LASTGET*2) && (!FIRST))
  114. {
  115. WANTGET=SUMAPPLE;
  116. SUMAPPLE=0;
  117. }
  118. LASTGET=WANTGET;
  119. if (SUMAPPLE!=0) SUMAPPLE=SUMAPPLE-WANTGET;
  120. if ((SUMAPPLE+WANTGET)==GETMINFIB(SUMAPPLE+WANTGET)
  121. &&(SUMAPPLE>LASTGET*2))
  122. {
  123. SUMAPPLE=SUMAPPLE+WANTGET-1;
  124. LASTGET=1;
  125. }
  126. printf("n***** I get %ld apple(s).n",LASTGET);
  127. printf("n----- The Current Apple(s) are/is : %ldn",SUMAPPLE);
  128. CHANCE=0;
  129. FIRST=0;
  130. if (SUMAPPLE==0) printf("n***** I win the GAME !");
  131. ANSWER=0;
  132. }
  133. void PERSON()
  134. {
  135. printf("n***** The apple(s) you want to get : ");
  136. scanf("%ld",&WANTGET);
  137. if (FIRST)
  138. {
  139. if (SUMAPPLE==1)
  140. {
  141. while (WANTGET!=1)
  142. {
  143. printf("n----- You are cheated !n");
  144. printf("nThe apple(s) you want to get : ");
  145. scanf("%ld",&WANTGET);
  146. }
  147. }
  148. if (SUMAPPLE>1)
  149. {
  150. while ((WANTGET>=SUMAPPLE) || (WANTGET<=0))
  151. {
  152. printf("n----- You are cheated !n");
  153. printf("nThe apple(s) you want to get : ");
  154. scanf("%ld",&WANTGET);
  155. }
  156. }
  157. FIRST=0;
  158. }
  159. else
  160. {
  161. while ((WANTGET>2*LASTGET) || (WANTGET<=0) || (WANTGET>SUMAPPLE))
  162. {
  163. printf("n----- You are cheated !n");
  164. printf("nThe apple(s) you want to get : ");
  165. scanf("%ld",&WANTGET);
  166. }
  167. }
  168. SUMAPPLE=SUMAPPLE-WANTGET;
  169. LASTGET=WANTGET;
  170. CHANCE=1;
  171. printf("n----- You get %ld apple(s).n",LASTGET);
  172. if (SUMAPPLE==0) printf("n***** You win the GAME ! ");
  173. ANSWER=1;
  174. }
  175. void GAME()
  176. {
  177. while (SUMAPPLE>0)
  178. {
  179. if ((CHANCE==1) && (MODEL==0) && (SUMAPPLE!=0)) MACHINESLOW();
  180. if ((CHANCE==1) && (MODEL==1) && (SUMAPPLE!=0)) MACHINEQUICK();
  181. if ((CHANCE==0) && (SUMAPPLE!=0)) PERSON();
  182. }
  183. }
  184. void RESULT()
  185. {
  186. if (ANSWER==1) cprintf("nCongratulations !n");
  187. else cprintf("nYou Lose the Game, Try again !n");
  188. cprintf("DESIGNED BY NEWTRUMPn");
  189. }