Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.FileOutputStream;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.io.Writer;
- import java.util.Random;
- import java.util.Scanner;
- public class Assignment3 {
- public static void main(String[] args) {
- //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
- Scanner scanner = new Scanner(System.in);
- String inputString = "";
- String filePath = "score.txt";
- String[] alternatives = {"sten", "sax", "påse"};
- String[] methods = {"krossar", "klipper", "fångar"};
- int[] score;
- int[] totalScore = {0, 0};
- boolean quit = false, isWinner;
- try {
- totalScore = readFromFile(filePath); //Här kallar vi på metoden saveToFile och skickar in score för att användas i metoden.
- } catch (IOException ex) {
- System.out.println("Kunde inte hitta filen."); //Går det inte spara till fil så skriver vi ut att det inte går
- }
- while(!quit) {
- //
- System.out.println("** VÄLKOMMEN TILL STEN-SAX-PÅSE **");
- System.out.println("Spelet där sten krossar sax, sax klipper påse och påse fångar sten. Bäst av fem vinner.");
- System.out.println("Avsluta programmet genom att skriva Q.");
- System.out.println("De totala poängen är " + totalScore[0] + " till dig och " + totalScore[1] + " till datorn");
- isWinner = false;
- score = new int[2];
- //sätter parametrar för uppstart och nerstägning av program. loopen fortsätter köras tills programmet avslutas
- while(!quit && !isWinner) {
- System.out.println("Gör ditt val (sten, sax eller påse): ");
- inputString = scanner.nextLine().trim();
- //avslutas programmet med q, ger nerstägningsmeddelande
- if(inputString.equalsIgnoreCase("Q")) {
- System.out.println("Hej då!");
- quit = true;
- }
- else {
- //efterfrågar input av definierade alternativ. loopar och presenterar felmeddelande vid fel i inmatning
- int input = -1;
- for(int i = 0; i < alternatives.length; i ++) {
- if(alternatives[i].equalsIgnoreCase(inputString)) {
- input = i;
- }
- }
- if(input == -1) {
- System.out.println("Ogiltigt värde. Giltiga värden är sten, sax eller påse.");
- }
- else {
- //ges korrekt värde genereras av datorn ett slumpmässigt värde från de tre möjliga
- int computerChoice = new Random().nextInt(3);
- //skriver ut datorns genererade värde
- System.out.println("Datorn väljer " + alternatives[computerChoice] + ".");
- //sätter upp alternativ för när datorn vinner, användaren vinner, och det blir lika
- if((computerChoice - 1) == input || (computerChoice + 2) == input) {
- score[0] ++;
- System.out.println("Din " + alternatives[input] + " " + methods[input] + " datorns " +
- alternatives[computerChoice] + " (" + score[0] + " - " + score[1] + ").");
- }
- else if(computerChoice == input) {
- System.out.println("Samma val, ingen vinner.");
- }
- else {
- score[1] ++;
- System.out.println("Datorns " + alternatives[computerChoice] + " " + methods[computerChoice] +
- " din " + alternatives[input] + " (" + score[0] + " - " + score[1] + ").");
- }
- //utsäger vinnaren beroende på om datorn eller användarens poäng = 3
- if(score[0] == 3 || score[1] == 3) {
- String winner = "Datorn";
- if(score[0] == 3) {
- winner = "Du";
- }
- //skriver ut vinnaren
- System.out.println(winner + " har vunnit (" + score[0] + " - " + score[1] + ")!");
- isWinner = true;
- }
- }
- }
- }
- totalScore[0] += score[0];
- totalScore[1] += score[1];
- }
- try {
- saveToFile(totalScore, filePath); //Här kallar vi på metoden saveToFile och skickar in score för att användas i metoden.
- } catch (IOException ex) {
- System.out.println("Kunde inte spara filen."); //Går det inte spara till fil så skriver vi ut att det inte går
- }
- scanner.close();
- }
- //Metoden som sparar till fil, vi kan se att vi får in data (int[] score) i form av int array samt filePath
- public static void saveToFile(int[] score, String filePath) throws IOException {
- try (Writer writer = new BufferedWriter(new OutputStreamWriter(
- new FileOutputStream(filePath), "utf-8"))) { //Skriver ut till score.txt i utf-8 format
- writer.write(score[0] + " " + score[1]); // score1, mellanslag och sedan score2
- }
- }
- //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
- public static int[] readFromFile(String filePath) throws IOException {
- 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
- try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { //Här säger vi vart vi ska läsa nånstans ifrån
- StringBuilder sb = new StringBuilder(); // Den här används för att bygga strängar eftersom karaktärer läses en rad i taget
- String input = reader.readLine(); //Här läser vi en rad i dokumentet
- while (input != null) { //Så länge vi inte nått slutet
- sb.append(input).append("\n"); // lägg till nuvarande rad längst bak i StringBuilder (sb) och en newline.
- input = reader.readLine(); // läs en ny rad
- }
- String finalInput = sb.toString(); // Konverterar och lagrar stringbuilder som en sträng i finalInput
- String[] splitInput = finalInput.split(" "); // Splittar upp innehållet baserat på mellanslag
- splitInput[1] = splitInput[1].replaceAll("\\r\\n|\\r|\\n", ""); //Formaterar bort alla statement terminators ex. linebreaks på den andra strängen
- for(int i = 0; i<splitInput.length; i++) { // Så länge vi inte nått slutet på splitInput
- score[i] = Integer.parseInt(splitInput[i]); // Konverterar input från string array till integer array
- }
- }
- return score; // returnerar score arrayen från vart den blev tillkallad
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement