Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package dicegames;
- import java.util.Scanner;
- public class Pig {
- private int score1, score2;
- private int round = 1;
- private Die die;
- private Scanner scan;
- private boolean finished = false;
- private int maxPoints;
- private boolean spilModComputeren;
- public Pig() {
- this(100, false);
- }
- public Pig(int maxPoints, boolean spilModComputeren) {
- this.maxPoints = maxPoints;
- score1 = score2 = 0;
- round = 1;
- this.spilModComputeren = spilModComputeren;
- die = new Die();
- scan = new Scanner(System.in);
- }
- /**
- * Print out a neat welcome message to the player.
- */
- private void welcomeToGame() {
- System.out.println("\nVelkommen til spillet Pigs.");
- System.out.println("\nSpillets gang");
- System.out.println("\nHver spiller skiftes til at kaste med en terning indtil han enten kaster 1, "
- + "\neller beslutter sig for at stoppe. "
- + "\nHvis han slår en 1’er, får han ingen point i denne omgang. "
- + "\nHvis han beslutter sig for at stoppe inden har slår en 1’er, "
- + "\nlægges summen af alle hans kast i denne tur sammen med hans samlede antal point, "
- + "\nog turen går videre til næste spiller. "
- + "\nDen første spiller der samlet når " + maxPoints + " point har vundet.");
- }
- /**
- * Finishes the game and prints out the result.
- */
- private void gameOver() {
- finished = true;
- if (round % 2 == 1)
- System.out.println("\nSpiller 1 vandt med " + score1 + " point.");
- else
- System.out.println("\nSpiller 2 vandt med " + score2 + " point.");
- scan.close();
- }
- /**
- * Take another turn in the game.
- */
- private void takeTurn() {
- boolean turnOver = false;
- int points = 0;
- while (!turnOver) {
- die.roll();
- int roll = die.getFaceValue();
- System.out.println("Du har kastet: " + roll);
- // Hvis spilleren slår 1 afslut tur
- if (roll == 1) {
- System.out.println("Du slog 1. Din tur er slut og du har mistet dine opnåede point.");
- turnOver = true;
- } else {
- // Hvis spilleren slår 2, 3, 4, 5 eller 6 så opdater det midlertidige antal
- // point
- points += roll;
- System.out.println("Du har nu opnået " + points + " point i denne runde.");
- // Hvis en spiller har opnået 100 point eller mere så afslut spillet
- if (round % 2 == 1 && score1 + points >= maxPoints) {
- score1 += points;
- gameOver();
- turnOver = true;
- } else if (round % 2 == 0 && score2 + points >= maxPoints) {
- score2 += points;
- gameOver();
- turnOver = true;
- } else {
- // Hvis en spiller stadig har under 100 point, så spørg om de vil slå igen
- System.out.println("Vil du kaste igen? Angiv Ja eller Nej: ");
- String goOn = scan.nextLine();
- // Afslut turen ved "Nej"
- if (goOn.equalsIgnoreCase("Nej")) {
- turnOver = true;
- // Hvis runden er et ulige tal, så opdater spiller1 score.
- if (round % 2 == 1) {
- score1 += points;
- System.out.println("Spiller 1 har nu en score på: " + score1);
- } else {
- score2 += points;
- System.out.println("Spiller 2 har nu en score på: " + score2);
- }
- }
- }
- }
- }
- round++;
- }
- private void takeTurnVsPC() {
- boolean turnOver = false;
- int points = 0;
- while (!turnOver) {
- die.roll();
- int roll = die.getFaceValue();
- if (round % 2 == 1) {
- System.out.println("Du har kastet: " + roll);
- } else {
- System.out.println("Computeren har kastet: " + roll);
- }
- if (roll == 1 && round % 2 == 1) {
- System.out.println("Du har kastet en 1'er. Din tur er slut. Øv.");
- System.out.println();
- turnOver = true;
- } else if (roll == 1 && round % 2 == 0) {
- System.out.println("Computeren har kastet en 1'er. Dens tur er slut. Oof.");
- System.out.println();
- turnOver = true;
- } else {
- points += roll;
- if (round % 2 == 1) {
- System.out.println("Du har i denne runde opnået " + points + " points");
- } else {
- System.out.println("Computeren har i denne runde opnået " + points + " points");
- }
- if (round % 2 == 1 && score1 + points >= maxPoints) {
- score1 += points;
- System.out.print(", hvilket sammen med dine points giver " + score1 + "!");
- gameOver();
- turnOver = true;
- } else if (round % 2 == 0 && score2 + points >= maxPoints) {
- score2 += points;
- gameOver();
- turnOver = true;
- } else if (round % 2 == 1) {
- System.out.println("Vil du kaste terningen igen? Angiv Ja eller Nej: ");
- String goOn = scan.nextLine();
- if (goOn.equalsIgnoreCase("Nej")) {
- turnOver = true;
- score1 += points;
- System.out.println("Nu har du en score på: " + score1);
- }
- /**
- * Her er computerens beslutningsproces: 20 er valgt som computerens grænseværdi
- * for afslutning af tur, da det gennemsnitlige udbytte ved yderligere kast da
- * er lig med det forventede tab --> En sjettedel af tiden mistes alle pointene,
- * mens der de resterende fem sjettedele af tiden er en gennemsnitlig gevinst på
- * (2+3+4+5+6)/5 = 4 point. Eftersom 5/6 * 4 = 20/6 vil der være ligevægt mellem
- * potentielt tab og udbytte når 1/6 * x = 20/6 --> x = 20. Computeren spiller
- * her konservativt, så den vælger derfor at sikre sine point, hvis de er præcis
- * lig med 20.
- */
- } else {
- if (points >= 20) {
- turnOver = true;
- score2 += points;
- System.out.println("Computeren stopper sin tur her. Nu har computeren en score på: " + score2);
- }
- }
- }
- }
- round++;
- }
- /**
- * Start the game loop.<br/>
- * The game is finished when the player chooses to not roll the die anymore.
- */
- public void startGame() {
- welcomeToGame();
- while (!finished) {
- System.out.println("\n###########################################");
- System.out.println("RUNDE: " + round);
- System.out.println("MAX POINTS: " + maxPoints);
- if (round % 2 == 1)
- System.out.println("SPILLER 1 SCORE: " + score1 + "\n");
- else
- System.out.println("SPILLER 2 SCORE: " + score2 + "\n");
- if (spilModComputeren) {
- takeTurnVsPC();
- } else
- takeTurn();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement