SHARE
TWEET

Untitled

a guest Feb 27th, 2020 87 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top