fork(1) download
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <string>
  4. #include <cstdlib>
  5. using namespace std;
  6.  
  7.  
  8.  
  9. int printSticks(int sticks);
  10. int getMove(int sticks);
  11. int computerMove(int sticks);
  12.  
  13. /*****************************************************************
  14. ANROP: playGame();
  15. VERSION: xxxxx xx
  16. UPPGIFT: Låter användaren spela ett parti pinne mot datorn
  17. ******************************************************************/
  18. void playGame()
  19. {
  20. int numSticks = 15 + (rand() % 11); // slump 15..25
  21. while (numSticks > 0)
  22. {
  23. printSticks(numSticks);
  24.  
  25. cout << "\tHur många vill du plocka? ";
  26. int userMove = getMove(numSticks);
  27. numSticks -= userMove;
  28.  
  29. if(numSticks <= 0)
  30. {
  31. cout << "Du vann, turgubbe!" << endl;
  32. break;
  33. }
  34.  
  35. cout << "\nResultat:\t\t";
  36. for (int i = 0; i < numSticks; i++) // skriver ut resultat i pinnar
  37. {
  38. if (i >= 0 && ((i % 5) == 0))
  39. cout << " |";
  40. else
  41. cout << "|";
  42. }
  43.  
  44. int myMove = computerMove(numSticks);
  45.  
  46. cout << "\tDatorn tar\t" << myMove << endl;
  47. numSticks -= myMove;
  48.  
  49. if (numSticks <= 0)
  50. {
  51. cout << "Datorn vann, looooser!!" << endl;
  52. break;
  53. }
  54. }
  55. }// playGame
  56.  
  57. /*****************************************************************
  58. ANROP: int num = getMove(sticks);
  59. UPPGIFT: Läser in användarens drag (iterativt tills ett giltigt drag anges)
  60. INPAR: sticks = antalet stickor i den aktuella högen
  61. RETUR: num = användares drag, 1 eller, 2 men <= sticks
  62. ANM: vid anrop måste sticks > 0, ty annars finns inget giltigt drag
  63. ******************************************************************/
  64. int getMove(int sticks)
  65. {
  66. if (sticks > 0)
  67. {
  68. int plocka = 0;
  69. cin >> plocka;
  70.  
  71. while (plocka != 1 || plocka != 2)
  72. {
  73. if (plocka == 1 && sticks > 0)
  74. {
  75. return 1;
  76. }
  77. else if (plocka == 2 && sticks > 1)
  78. {
  79. return 2;
  80. }
  81. else
  82. {
  83. cout << "Gick ej att plocka " << plocka << "" << " st stickor, välj igen: ";
  84. cin >> plocka;
  85. }
  86. }
  87. }
  88. else
  89. {
  90. return 0;
  91. }
  92. return 0;
  93. }//getMove
  94.  
  95. /*****************************************************************
  96. ANROP: int num = computerMove(sticks);
  97. UPPGIFT: Returnerar datorns drag
  98. INPAR: sticks = Antalet stickor i den aktuella högen
  99. RETUR: num = datorns drag, 1 eller 2 men <= sticks
  100. ANM: vid anrop måste sticks > 0, ty annars finns inget giltigt drag
  101. ******************************************************************/
  102. int computerMove(int sticks)
  103. {
  104. if (sticks > 0)
  105. {
  106. int plocka = 0;
  107. plocka = rand() % 3;
  108.  
  109. while (plocka != 1 || plocka != 2)
  110. {
  111. if (plocka == 1 && sticks >= 0)
  112. {
  113. return 1;
  114. }
  115. else if (plocka == 2 && sticks >= 1)
  116. {
  117. return 2;
  118. }
  119. else
  120. {
  121. plocka = rand() % 3;
  122. }
  123. }
  124. }
  125. else
  126. {
  127. return 0;
  128. }
  129. return 0;
  130. }// computerMove()
  131.  
  132. /*****************************************************************
  133. ANROP: printSticks(sticks);
  134. UPPGIFT: Skriver ut sticks stycken stickor gruperade i
  135. grupper av fem, föjt av ett antal
  136. mellanslag så att total 30 tecken skrivs ut
  137. ******************************************************************/
  138. int printSticks(int sticks)
  139. {
  140. cout << "\nAktuell hög:\t ";
  141.  
  142. for (int i = 0; i < sticks; i++)
  143. {
  144. if ((i % 5) == 4)
  145. cout << "| ";
  146. else
  147. cout << "|";
  148. }
  149.  
  150.  
  151. return 0;
  152. }
  153.  
  154. int main()
  155. { setlocale( LC_ALL, "swedish");
  156.  
  157. while (true)
  158. {
  159. playGame();
  160. cout << "Vill du spela mera?";
  161. string answ;
  162. cin >> answ;
  163. if (answ[0]!='j' && answ[0]!='J')
  164. {
  165. cout << "Fegis!!" << endl;
  166. break;
  167. }
  168. }
  169. return 0;
  170. }// main
  171.  
  172.  
Success #stdin #stdout 0s 5008KB
stdin
2
2
2
2
2
2
2
n
stdout
Aktuell hög:	 ||||| ||||| ||||| ||||| |	Hur många vill du plocka? 
Resultat:		 ||||| ||||| ||||| ||||	Datorn tar	1

Aktuell hög:	 ||||| ||||| ||||| |||	Hur många vill du plocka? 
Resultat:		 ||||| ||||| ||||| |	Datorn tar	1

Aktuell hög:	 ||||| ||||| ||||| 	Hur många vill du plocka? 
Resultat:		 ||||| ||||| |||	Datorn tar	2

Aktuell hög:	 ||||| ||||| |	Hur många vill du plocka? 
Resultat:		 ||||| ||||	Datorn tar	1

Aktuell hög:	 ||||| |||	Hur många vill du plocka? 
Resultat:		 ||||| |	Datorn tar	1

Aktuell hög:	 ||||| 	Hur många vill du plocka? 
Resultat:		 |||	Datorn tar	1

Aktuell hög:	 ||	Hur många vill du plocka? Du vann, turgubbe!
Vill du spela mera?Fegis!!