Mastermind Hilfe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mastermind Hilfe

    Ich bin noch anfänger in java und hab versucht das spiel "mastermind" zu schreiben, saß echt lange dran doch nun komm ich an 2 stellen nicht mehr weiter.
    ich will das programm so erweitern das ich am ende eines erfolgreichen versuchs gefragt werde, ob ich einen weiteren durchlauf spielen möchte.
    ausserdem soll nach jedem durchlauf folgende information erscheinen:
    - letztes spiel: x Versuche
    - anzahl der spiele: y Spiele
    - Durchschnittliche Versuche: z
    Dabei soll ein Spiel, bei dem nicht die richtige kombination gefunden wurde, mit 12 versuchen gewertet werden.

    ich hoffe jemand kann mir weiterhelfen :)

    Quellcode

    1. /** Wandle die Ziffern einer Zahl in einen String um */
    2. public static String zahl(int[] z) {
    3. String res=""; // Hier steht das Ergebnis
    4. for (int i=0;i<4;i++) // Reihe die Zahlen aneinander
    5. res=z[i]+res;
    6. return res;
    7. }
    8. /** Zerteilt eine ganze positive Zahl 0<=z<=9999 in
    9. ihre vier Ziffern */
    10. public static int[] ziffern(int z) {
    11. int[] res=new int[4];
    12. for (int i=0;i<4;i++) {
    13. res[i]=z%10; // Berechne die rechte Ziffer
    14. z=z/10; // Schiebe nach rechts
    15. }
    16. return res;
    17. }
    18. /** Zerteilt eine ganze positive Zahl 0<=z<=9999 in
    19. vier Ziffern. Wenn die Zahl die Voraussetzungen fuer
    20. die Mastermind-Spielregeln nicht erfuellt (keine
    21. zwei Ziffern sind gleich), wird null zurueckgegeben */
    22. public static int[] bereiteAuf(int z) {
    23. // Teste zuerst, ob die Zahl im richtigen
    24. // Groessenbereich liegt
    25. if (z<0 || z>9999)
    26. return null;
    27. // Nun teile die Zahl auf
    28. int[] res=ziffern(z);
    29. // Nun teste, ob sich zwei Ziffern gleichen
    30. for (int i=0;i<4;i++)
    31. for (int j=i+1;j<4;j++)
    32. if (res[i]==res[j])
    33. return null;
    34. // Andernfalls gib das Ergebnis zurueck
    35. return res;
    36. }
    37. /** Finde eine Zahl zwischen 0 und 9999, die die
    38. Voraussetzungen fuer das Spiel erfuellt. */
    39. public static int[] findeZahl() {
    40. int[] res=null; // hier steht das Ergebnis
    41. while(res==null) {
    42. int zahl=(int)(9999*Math.random());
    43. res=bereiteAuf(zahl);
    44. }
    45. // Wenn die Schleife verlassen wurde, ist eine passende
    46. // Zahlenkombination gefunden
    47. return res;
    48. }
    49. /** Finde heraus, ob alle Ziffern uebereinstimmen */
    50. public static boolean treffer(int[] original,int[] versuch) {
    51. for (int i=0;i<4;i++)
    52. if (original[i]!=versuch[i])
    53. return false;
    54. return true;
    55. }
    56. /** Finde heraus, wie viele direkte und indirekte Treffer
    57. es gibt */
    58. public static String auswerten(int[] original,int[] versuch) {
    59. int direkt=0; // Zahl der direkten Treffer
    60. int indirekt=0; // Zahl der indirekten Treffer
    61. for (int i=0;i<4;i++)
    62. for (int j=0;j<4;j++)
    63. if (original[i]==versuch[j]) {
    64. if (i==j)
    65. direkt++;
    66. else
    67. indirekt++;
    68. }
    69. return
    70. "Direkte Treffer: "+direkt+" "+
    71. "Indirekte Treffer: "+indirekt;
    72. }
    73. /** Lies eine gueltige Zahl von der Tastatur ein */
    74. public static int[] liesZahl(int versuch) {
    75. int n=IOTools.readInteger("Versuch Nr. "+versuch+": ");
    76. int[] res=bereiteAuf(n);
    77. while (res==null) {
    78. System.out.println("KEINE GUELTIGE ZAHL!");
    79. n=IOTools.readInteger("Versuch Nr. "+versuch+": ");
    80. res=bereiteAuf(n);
    81. }
    82. return res;
    83. }
    84. /** Hauptprogramm */
    85. public static void main(String[] args) {
    86. int[] original=findeZahl();
    87. boolean erraten=false;
    88. System.out.println("MASTERMIND\n");
    89. for (int i=1;i<=10;i++) { // Schleifenbeginn
    90. if (i <10)
    91. System.out.println("\nSie haben noch "+(10-i+1)+
    92. " Versuch(e).");
    93. else {
    94. System.out.println("\nSie haben noch einen Versuch");
    95. }
    96. int[] versuch=liesZahl(i);
    97. if (treffer(original,versuch)) { // Erraten
    98. System.out.println("Hervorragend! Sie haben die Zahl im "
    99. +i+". Versuch erraten.");
    100. erraten=true;
    101. break;
    102. }
    103. System.out.println("Leider falsch geraten.\n"+
    104. auswerten(original,versuch));
    105. } // Schleifenende
    106. if (!erraten) {
    107. System.out.println("\nViel Glueck beim naechsten Mal!");
    108. System.out.println("Die richtige Zahl waere "+
    109. zahl(original)+" gewesen.");
    110. }
    111. }
    112. }
    Alles anzeigen
  • Das einfachste wäre, du setzt den jetzigen Inhalt der main Methode in eine andere Methode (meinetwegen spielStart() oder ähnliches) und rufst diese von der main Methode aus auf. Dann kannst du in der main methode eine Simple Textabfrage einbauen: "Nochmal spielen? j/n" (wie man von der Tastatur einliest weißt du ja schon) und dementsprechend ein weiteres Spiel starten, oder eben nicht.
    Ein simpler Zähler (anzahlSpiele++;) zählt wie viele Spiele gemacht wurden.
    Zudem könntest du die Methode spielStart() zurückgeben lassen wieviele Versuche gebraucht wurden (das ermittelst du ja eh schon) und dies in die durchschnittliche Anzahl der Versuche umrechnen.

    Oder brauchst du bei einem bestimmten Punkt genauere Hilfe?