Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.15 KB | None | 0 0
  1. package dicegames;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Pig {
  6.  
  7. private int score1, score2;
  8. private int round = 1;
  9. private Die die;
  10. private Scanner scan;
  11. private boolean finished = false;
  12. private int maxPoints;
  13. private boolean spilModComputeren;
  14.  
  15. public Pig() {
  16. this(100, false);
  17. }
  18. public Pig(int maxPoints, boolean spilModComputeren) {
  19. this.maxPoints = maxPoints;
  20. score1 = score2 = 0;
  21. round = 1;
  22. this.spilModComputeren = spilModComputeren;
  23. die = new Die();
  24. scan = new Scanner(System.in);
  25. }
  26.  
  27. /**
  28. * Print out a neat welcome message to the player.
  29. */
  30. private void welcomeToGame() {
  31. System.out.println("\nVelkommen til spillet Pigs.");
  32. System.out.println("\nSpillets gang");
  33. System.out.println("\nHver spiller skiftes til at kaste med en terning indtil han enten kaster 1, "
  34. + "\neller beslutter sig for at stoppe. "
  35. + "\nHvis han slår en 1’er, får han ingen point i denne omgang. "
  36. + "\nHvis han beslutter sig for at stoppe inden har slår en 1’er, "
  37. + "\nlægges summen af alle hans kast i denne tur sammen med hans samlede antal point, "
  38. + "\nog turen går videre til næste spiller. "
  39. + "\nDen første spiller der samlet når " + maxPoints + " point har vundet.");
  40.  
  41. }
  42.  
  43. /**
  44. * Finishes the game and prints out the result.
  45. */
  46. private void gameOver() {
  47. finished = true;
  48. if (round % 2 == 1)
  49. System.out.println("\nSpiller 1 vandt med " + score1 + " point.");
  50. else
  51. System.out.println("\nSpiller 2 vandt med " + score2 + " point.");
  52. scan.close();
  53. }
  54.  
  55. /**
  56. * Take another turn in the game.
  57. */
  58. private void takeTurn() {
  59. boolean turnOver = false;
  60. int points = 0;
  61.  
  62. while (!turnOver) {
  63.  
  64. die.roll();
  65. int roll = die.getFaceValue();
  66. System.out.println("Du har kastet: " + roll);
  67.  
  68. // Hvis spilleren slår 1 afslut tur
  69. if (roll == 1) {
  70. System.out.println("Du slog 1. Din tur er slut og du har mistet dine opnåede point.");
  71. turnOver = true;
  72. } else {
  73. // Hvis spilleren slår 2, 3, 4, 5 eller 6 så opdater det midlertidige antal
  74. // point
  75. points += roll;
  76. System.out.println("Du har nu opnået " + points + " point i denne runde.");
  77.  
  78. // Hvis en spiller har opnået 100 point eller mere så afslut spillet
  79. if (round % 2 == 1 && score1 + points >= maxPoints) {
  80. score1 += points;
  81. gameOver();
  82. turnOver = true;
  83. } else if (round % 2 == 0 && score2 + points >= maxPoints) {
  84. score2 += points;
  85. gameOver();
  86. turnOver = true;
  87. } else {
  88. // Hvis en spiller stadig har under 100 point, så spørg om de vil slå igen
  89. System.out.println("Vil du kaste igen? Angiv Ja eller Nej: ");
  90. String goOn = scan.nextLine();
  91. // Afslut turen ved "Nej"
  92. if (goOn.equalsIgnoreCase("Nej")) {
  93. turnOver = true;
  94. // Hvis runden er et ulige tal, så opdater spiller1 score.
  95. if (round % 2 == 1) {
  96. score1 += points;
  97. System.out.println("Spiller 1 har nu en score på: " + score1);
  98. } else {
  99. score2 += points;
  100. System.out.println("Spiller 2 har nu en score på: " + score2);
  101. }
  102. }
  103. }
  104. }
  105. }
  106. round++;
  107.  
  108. }
  109.  
  110. private void takeTurnVsPC() {
  111. boolean turnOver = false;
  112. int points = 0;
  113.  
  114. while (!turnOver) {
  115. die.roll();
  116. int roll = die.getFaceValue();
  117. if (round % 2 == 1) {
  118. System.out.println("Du har kastet: " + roll);
  119. } else {
  120. System.out.println("Computeren har kastet: " + roll);
  121. }
  122.  
  123. if (roll == 1 && round % 2 == 1) {
  124. System.out.println("Du har kastet en 1'er. Din tur er slut. Øv.");
  125. System.out.println();
  126. turnOver = true;
  127. } else if (roll == 1 && round % 2 == 0) {
  128. System.out.println("Computeren har kastet en 1'er. Dens tur er slut. Oof.");
  129. System.out.println();
  130. turnOver = true;
  131. } else {
  132. points += roll;
  133.  
  134. if (round % 2 == 1) {
  135. System.out.println("Du har i denne runde opnået " + points + " points");
  136. } else {
  137. System.out.println("Computeren har i denne runde opnået " + points + " points");
  138. }
  139.  
  140. if (round % 2 == 1 && score1 + points >= maxPoints) {
  141. score1 += points;
  142. System.out.print(", hvilket sammen med dine points giver " + score1 + "!");
  143. gameOver();
  144. turnOver = true;
  145. } else if (round % 2 == 0 && score2 + points >= maxPoints) {
  146. score2 += points;
  147. gameOver();
  148. turnOver = true;
  149. } else if (round % 2 == 1) {
  150. System.out.println("Vil du kaste terningen igen? Angiv Ja eller Nej: ");
  151. String goOn = scan.nextLine();
  152. if (goOn.equalsIgnoreCase("Nej")) {
  153. turnOver = true;
  154. score1 += points;
  155. System.out.println("Nu har du en score på: " + score1);
  156. }
  157.  
  158. /**
  159. * Her er computerens beslutningsproces: 20 er valgt som computerens grænseværdi
  160. * for afslutning af tur, da det gennemsnitlige udbytte ved yderligere kast da
  161. * er lig med det forventede tab --> En sjettedel af tiden mistes alle pointene,
  162. * mens der de resterende fem sjettedele af tiden er en gennemsnitlig gevinst på
  163. * (2+3+4+5+6)/5 = 4 point. Eftersom 5/6 * 4 = 20/6 vil der være ligevægt mellem
  164. * potentielt tab og udbytte når 1/6 * x = 20/6 --> x = 20. Computeren spiller
  165. * her konservativt, så den vælger derfor at sikre sine point, hvis de er præcis
  166. * lig med 20.
  167. */
  168. } else {
  169. if (points >= 20) {
  170. turnOver = true;
  171. score2 += points;
  172. System.out.println("Computeren stopper sin tur her. Nu har computeren en score på: " + score2);
  173. }
  174.  
  175. }
  176.  
  177. }
  178. }
  179. round++;
  180. }
  181.  
  182. /**
  183. * Start the game loop.<br/>
  184. * The game is finished when the player chooses to not roll the die anymore.
  185. */
  186. public void startGame() {
  187. welcomeToGame();
  188. while (!finished) {
  189. System.out.println("\n###########################################");
  190. System.out.println("RUNDE: " + round);
  191. System.out.println("MAX POINTS: " + maxPoints);
  192. if (round % 2 == 1)
  193. System.out.println("SPILLER 1 SCORE: " + score1 + "\n");
  194. else
  195. System.out.println("SPILLER 2 SCORE: " + score2 + "\n");
  196. if (spilModComputeren) {
  197. takeTurnVsPC();
  198. } else
  199. takeTurn();
  200. }
  201. }
  202.  
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement