# Zahlen Ratespiel



## xWerter (1. Nov 2015)

Hallo,

Ich lerne zur zeit noch java und bin noch am anfang. Jedoch konnte ich schon ein Zahlen Ratespiel machen, und würde mich freuen wenn mir jemand Verbesserungsvorschläge für meinen Code geben kann. Falls jemand das Spiel spielen will habe ich noch einen Cheat eingebaut, der euch die richtige zahl anzeigt der Befehl dafür ist INEEDHELP.



Spoiler: Mein Code





```
import java.util.*;
import java.io.*;
import java.nio.file.*;
import java.time.*;

public class Spiel4
{
   
    //Einleitung
    public static void main(String[] args)
    {
        Menü();
    }
   
    private static void Menü()
    {
        System.out.printf("%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n");
        System.out.printf("================================================================================");
        String eingabe;
        char[] Auswahl = {'x'};
        Scanner lesen = new Scanner(System.in);
       
        System.out.printf("Das lustige Zahlenraten:%n%nMenue:%n%n");
        System.out.printf("    [S]tart%n    [H]ighscores%n    [C]redits%n    [B]eenden");
       
        System.out.printf("%n%nWas Willst du tun: ");
        eingabe = lesen.nextLine();
        Auswahl = eingabe.toCharArray();
       
           
       
        switch(Auswahl[0])
        {
            case 'S':
            case 's':
                Schwierigkeit();
                break;
               
            case 'H':
            case 'h':
                Highscores();
                break;
               
            case 'C':
            case 'c':
                Credits();
                break;
               
            case 'B':
            case 'b':
                Ende();
                break;
               
            default:
                System.out.println("Diese Option ist leider nicht verfügbar");
                Schlafen(3);
                Menü();
        }
        lesen.close();
    }
   
    private static void Schwierigkeit() //Schwierigkeit auswählen
    {
        Scanner lesen = new Scanner(System.in);
        String eingabe;
        char[] Auswahl;
       
        System.out.printf("%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n");
        System.out.printf("[L]eicht%n[M]ittel%n[S]chwer%n%n");
        System.out.print("Wähle bitte Deine Schwierigkeit: ");
        eingabe = lesen.nextLine();
        Auswahl = eingabe.toCharArray();
       
        switch(Auswahl[0]) //wähle aus einer List von optionen
        {
            case 'L':
            case 'l':
                Start(1);
                break;
               
            case 'M':
            case 'm':
                Start(2);
                break;
               
            case 's':
            case 'S':
                Start(3);
                break;
               
            default:
                System.out.println("Diese Schwierigkeit gibt es noch nicht.");
                Schlafen(3);
                Schwierigkeit();
        }
        lesen.close();
    }
        private static void Start(int Schwer) //Startet das Spiel mit ausgwählten Schwierigkeitsgrad
        {
            int Zahl = 0;
            int Versuche = 1;
            Random zufall = new Random();
            Scanner lesen = new Scanner(System.in);
            String Eingabe = "";
            int deineZahl = 999999;
            boolean Fehler;
            System.out.print("errate meine Zahl zwischen ");
            switch(Schwer) //generiert die Zahlen
            {
                case 1:
                    Zahl = zufall.nextInt(11);
                    System.out.print(" 0 und 10: ");
                   
                    break;
                   
                case 2:
                    Zahl = zufall.nextInt(26);
                    System.out.print(" 0 und 25: ");
                   
                    break;
                   
                case 3:   
                    Zahl = zufall.nextInt(51);
                    System.out.print(" 0 und 50: ");
                   
                    break;
                   
            }
           
            do //Vorgang solange wiederholen bis deine Zahl richtig ist
            {
                do //Vorgang solange wiederholen bis kein Fehler bei der Eingabe auftritt
                {
                    try
                    {
                        Eingabe = lesen.nextLine();
                        if(Eingabe.equals("INEEDHELP")) //Cheat
                            System.out.println(Zahl);
                        deineZahl = Integer.parseInt(Eingabe);
                        Fehler = false;
                    }
                    catch(Exception ex)
                    {
                        Fehler = true;
                        System.out.println("Da hat sich leider ein kleiner Fehler eingeschlichen: " + ex.getMessage());
                    }
                }while(Fehler);   
               
               
                if(deineZahl != Zahl)
                {
                    System.out.println("Das ist leider nicht die gesuchte Zahl");
                    Versuche++;
                }
            }while(deineZahl != Zahl);
           
            System.out.printf("Super, das ist die richtige Zahl. Benötigte Versuche: %d", Versuche);
           
            Schreiben(Versuche, Schwer);
            Eingabe = lesen.nextLine();
            Menü();
            lesen.close();
        }
   
    private static void Credits() //SpieleEntwickler
    {
        System.out.printf("Dieses Spiel wurde gemacht:%n");
        Schlafen(2);
        System.out.println("von: Timmy");
        Schlafen(2);
        System.out.println("mit: Java");
        Schlafen(4);
        Menü();
    }

    private static void Schlafen(int Zeit) //Funktion zum pausieren
    {
        try
        {
            Zeit = Zeit * 1000;
            Thread.sleep(Zeit);
        }
        catch(Exception ex)
        {
            System.out.println("Fehlercode: " + ex.getMessage());
        }
    }
   
    private static void Ende() //ende
    {
        System.out.printf("Ich wünsche dir noch einen schönen Tag bis zum nächsten Mal%n%n");
        Schlafen(4);
        System.exit(0);
    }
   
    private static void Schreiben(int Anlaeufe, int Schwierigkeitsgrad) //Schreibt den letzten versuch in Datei
    {
        String Home = System.getProperty("user.home"); //ermittelt home pfad
        Path Verzeichnis = Paths.get(Home, "Highscores.csv"); //setzt den zielpfad zusammen
        String beschreibung = "";
        StandardOpenOption option;
       
        if(Files.exists(Verzeichnis))
            option = StandardOpenOption.APPEND;
        else
            option = StandardOpenOption.CREATE;
       
        switch(Schwierigkeitsgrad) //'erstellt' die beschreibung
        {
            case 1:
                beschreibung = "Leicht";
                break;
               
            case 2:
                beschreibung = "Mittel";
                break;
               
            case 3:
                beschreibung = "Schwer";
                break;
        }
       
        try(BufferedWriter schreiben = Files.newBufferedWriter(Verzeichnis, option))
        {
            LocalDateTime zeit = LocalDateTime.now();
            String Datum = String.format("%td.%tm.%tY %tH:%tM:%tS", zeit, zeit, zeit, zeit, zeit, zeit);
            String zeile = String.format("%s;%d;%s", beschreibung, Anlaeufe, Datum);
            schreiben.write(zeile);
            schreiben.newLine();
        }
        catch(Exception ex)
        {
            System.out.println("Fehlercode: " + ex.getMessage());
        }
    }
   
    private static void Highscores()
    {
        System.out.printf("%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n");
        String Home = System.getProperty("user.home");
        Path Verzeichnis = Paths.get(Home, "Highscores.csv");
        Scanner eingaben = new Scanner(System.in);
        String eingabeUser = "";
        try(BufferedReader lesen = Files.newBufferedReader(Verzeichnis))
        {
            String Zeile = lesen.readLine();
            System.out.println("Schwierigkeit    Versuche    Datum");
            while(Zeile != null)
            {
               
                for(int i = 0; i<1; i++)
                {
                    String[] teile = Zeile.split(";");
                    String Schwer = teile[0];
                    String Versuche = teile[1];
                    String Datum = teile[2];
                    System.out.println(Schwer + "        " + Versuche + "        " + Datum);
                   
                }
                Zeile = lesen.readLine();
            }
        }
        catch(Exception ex)
        {
           
        }
        System.out.print("Fertig? ");
        eingabeUser = eingaben.nextLine();
        Menü();
    }
}
```




MFG
xWerter


----------



## Flown (1. Nov 2015)

Verbesserungen:
- Keine Umlaute, am besten alles in Englisch halten.
- Klassen/Interfaces in UpperCamelCase, Variablen/Methoden in lowerCamelCase (außer Konstanten - public static final - mit UPPER_CASE).
- printf nur verwenden, wenn auch was "formatiert" werden soll.
- Einen Scanner definieren und den Methoden übergeben, falls diese ihn benötigen, sonst könnte es zu unvorhergesehenen Ergebnissen kommen.
- Auf System.in sollte niemals ein close() aufgerufen werden.

Sonst sieht das alles nicht schlecht aus. Manches ist eleganter zu lösen, aber das kommt mit der Zeit dann.


----------

