Advertisement
Guest User

Untitled

a guest
Dec 16th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.00 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.FileOutputStream;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.io.OutputStreamWriter;
  7. import java.io.Writer;
  8. import java.util.Random;
  9.  
  10. import java.util.Scanner;
  11.  
  12. public class Assignment3 {
  13.  
  14. public static void main(String[] args) {
  15. //stensaxpåse program, definerar värdena och de möjliga alternativen för den inladdade slumpmässgeneratorn, startar en loop för omkörning av program
  16. Scanner scanner = new Scanner(System.in);
  17. String inputString = "";
  18. String filePath = "score.txt";
  19. String[] alternatives = {"sten", "sax", "påse"};
  20. String[] methods = {"krossar", "klipper", "fångar"};
  21. int[] score;
  22. int[] totalScore = {0, 0};
  23. boolean quit = false, isWinner;
  24.  
  25. try {
  26. totalScore = readFromFile(filePath); //Här kallar vi på metoden saveToFile och skickar in score för att användas i metoden.
  27. } catch (IOException ex) {
  28. System.out.println("Kunde inte hitta filen."); //Går det inte spara till fil så skriver vi ut att det inte går
  29. }
  30.  
  31. while(!quit) {
  32. //
  33. System.out.println("** VÄLKOMMEN TILL STEN-SAX-PÅSE **");
  34. System.out.println("Spelet där sten krossar sax, sax klipper påse och påse fångar sten. Bäst av fem vinner.");
  35. System.out.println("Avsluta programmet genom att skriva Q.");
  36. System.out.println("De totala poängen är " + totalScore[0] + " till dig och " + totalScore[1] + " till datorn");
  37. isWinner = false;
  38. score = new int[2];
  39. //sätter parametrar för uppstart och nerstägning av program. loopen fortsätter köras tills programmet avslutas
  40. while(!quit && !isWinner) {
  41. System.out.println("Gör ditt val (sten, sax eller påse): ");
  42.  
  43. inputString = scanner.nextLine().trim();
  44. //avslutas programmet med q, ger nerstägningsmeddelande
  45. if(inputString.equalsIgnoreCase("Q")) {
  46. System.out.println("Hej då!");
  47. quit = true;
  48. }
  49.  
  50. else {
  51. //efterfrågar input av definierade alternativ. loopar och presenterar felmeddelande vid fel i inmatning
  52. int input = -1;
  53.  
  54. for(int i = 0; i < alternatives.length; i ++) {
  55. if(alternatives[i].equalsIgnoreCase(inputString)) {
  56. input = i;
  57. }
  58. }
  59.  
  60. if(input == -1) {
  61. System.out.println("Ogiltigt värde. Giltiga värden är sten, sax eller påse.");
  62. }
  63.  
  64. else {
  65. //ges korrekt värde genereras av datorn ett slumpmässigt värde från de tre möjliga
  66. int computerChoice = new Random().nextInt(3);
  67. //skriver ut datorns genererade värde
  68. System.out.println("Datorn väljer " + alternatives[computerChoice] + ".");
  69. //sätter upp alternativ för när datorn vinner, användaren vinner, och det blir lika
  70. if((computerChoice - 1) == input || (computerChoice + 2) == input) {
  71. score[0] ++;
  72. System.out.println("Din " + alternatives[input] + " " + methods[input] + " datorns " +
  73. alternatives[computerChoice] + " (" + score[0] + " - " + score[1] + ").");
  74. }
  75.  
  76. else if(computerChoice == input) {
  77. System.out.println("Samma val, ingen vinner.");
  78. }
  79.  
  80. else {
  81.  
  82. score[1] ++;
  83. System.out.println("Datorns " + alternatives[computerChoice] + " " + methods[computerChoice] +
  84. " din " + alternatives[input] + " (" + score[0] + " - " + score[1] + ").");
  85. }
  86.  
  87.  
  88.  
  89. //utsäger vinnaren beroende på om datorn eller användarens poäng = 3
  90. if(score[0] == 3 || score[1] == 3) {
  91.  
  92. String winner = "Datorn";
  93.  
  94. if(score[0] == 3) {
  95. winner = "Du";
  96. }
  97. //skriver ut vinnaren
  98. System.out.println(winner + " har vunnit (" + score[0] + " - " + score[1] + ")!");
  99. isWinner = true;
  100. }
  101. }
  102. }
  103. }
  104. totalScore[0] += score[0];
  105. totalScore[1] += score[1];
  106.  
  107. }
  108. try {
  109. saveToFile(totalScore, filePath); //Här kallar vi på metoden saveToFile och skickar in score för att användas i metoden.
  110. } catch (IOException ex) {
  111. System.out.println("Kunde inte spara filen."); //Går det inte spara till fil så skriver vi ut att det inte går
  112. }
  113.  
  114. scanner.close();
  115. }
  116.  
  117. //Metoden som sparar till fil, vi kan se att vi får in data (int[] score) i form av int array samt filePath
  118. public static void saveToFile(int[] score, String filePath) throws IOException {
  119. try (Writer writer = new BufferedWriter(new OutputStreamWriter(
  120. new FileOutputStream(filePath), "utf-8"))) { //Skriver ut till score.txt i utf-8 format
  121. writer.write(score[0] + " " + score[1]); // score1, mellanslag och sedan score2
  122. }
  123. }
  124.  
  125. //Metoden som läser in från fil, används också för att konvertera från sträng till int array efter inläsning och returnerar en integer array
  126. public static int[] readFromFile(String filePath) throws IOException {
  127. int[] score = new int[2]; //deklarera och allokerar plats för en integer array som vi returnerar med resultatet de 2 värden som metoden hämtar
  128.  
  129. try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { //Här säger vi vart vi ska läsa nånstans ifrån
  130. StringBuilder sb = new StringBuilder(); // Den här används för att bygga strängar eftersom karaktärer läses en rad i taget
  131.  
  132. String input = reader.readLine(); //Här läser vi en rad i dokumentet
  133. while (input != null) { //Så länge vi inte nått slutet
  134. sb.append(input).append("\n"); // lägg till nuvarande rad längst bak i StringBuilder (sb) och en newline.
  135. input = reader.readLine(); // läs en ny rad
  136. }
  137.  
  138. String finalInput = sb.toString(); // Konverterar och lagrar stringbuilder som en sträng i finalInput
  139. String[] splitInput = finalInput.split(" "); // Splittar upp innehållet baserat på mellanslag
  140.  
  141. splitInput[1] = splitInput[1].replaceAll("\\r\\n|\\r|\\n", ""); //Formaterar bort alla statement terminators ex. linebreaks på den andra strängen
  142.  
  143. for(int i = 0; i<splitInput.length; i++) { // Så länge vi inte nått slutet på splitInput
  144. score[i] = Integer.parseInt(splitInput[i]); // Konverterar input från string array till integer array
  145. }
  146. }
  147.  
  148. return score; // returnerar score arrayen från vart den blev tillkallad
  149. }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement