Mindmaster- Hilfe.

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

  • Mindmaster- Hilfe.

    Hmm, nunja
    Hallo erstal an alle,
    Bin neu hier und bin dank Googel auf eure Community gestoßen.
    Ich habe die Bürde auf mich genommen für Informatik das Spiel Mastermind zu erstellen. Das Spiel ist eigentlich recht simpel: man muss einen vom Pc erstellten Code knacken, indem man selber Zahlen eingibt.
    Der Computer gibt dann aus , ob sie im Code drin sind und ob ihre Position auch stimmt, sagt aber nicht welche.
    Leider muss ich feststellen , es ist schwieriger als es sich anhört. Das Spielfeld habe ich soweit erstellt, ohne Syntax errors.
    Jetzt stehe ich einem anderen Problem gegenüber, ich wollte beim überrüfen meiner Zahlen, dass die virtual machine mir noch einen kasten mit der Meldung richtig oder Falsch zeigt.
    Jeodch klappt es nicht so wie ich es mir vorgestellt habe.
    Ich habe bisher nur zum vereinfachen nur eine zahl und eine zum eingeben, dann habe ich versucht mit der Funktion [ If {} else{}) sie zu vergleichen und diese meldung zu kriegen, vergeblich --> es passiert gar nichts.
    Schaut euch die Methode gibAwort() mal an, vielleicht könt ihr mir helfen.

    Hier nun der Quelltext.



    Java-Quellcode

    1. import jtoolbox.*;
    2. import javax.swing.*;
    3. import java.util.*;
    4. public class Zufallszahlen
    5. {
    6. private Random Zahl;
    7. private AusgabePanel Ausgabe1;
    8. private AusgabePanel Ausgabe2;
    9. private AusgabePanel Ausgabe3;
    10. private AusgabePanel Ausgabe4;
    11. private AusgabePanel Ausgabe5;
    12. private AusgabePanel Ausgabe6;
    13. private Eingabefeld Eingabe1;
    14. private Eingabefeld Eingabe2;
    15. private Eingabefeld Eingabe3;
    16. private Eingabefeld Eingabe4;
    17. private int Zahl1;
    18. private int Zahl2;
    19. private int Zahl3;
    20. private int Zahl4;
    21. public Zufallszahlen()
    22. {
    23. Zahl= new Random();
    24. }
    25. public int gibZufallszahl()
    26. {
    27. return Zahl.nextInt(10);
    28. }
    29. public void Ausgabe()
    30. {
    31. int Zahl1= Zahl.nextInt(10);
    32. {
    33. Ausgabe1 = new AusgabePanel(""+Zahl1,50,50);
    34. Ausgabe1.setzePosition(70,20);
    35. Ausgabe1.setzeSchriftgroesse(30);
    36. Ausgabe1.setzeSchriftfarbe("schwarz");
    37. Ausgabe1.setzeHintergrundfarbe("hellgrau");
    38. Ausgabe1.setzeAnzeigetext(""+Zahl1);
    39. }
    40. }
    41. public void gibEingabe()
    42. {
    43. {
    44. Eingabe1 = new Eingabefeld("",50,50);
    45. Eingabe1.setzePosition(320,20);
    46. }
    47. }
    48. public void gibAntwort()
    49. {
    50. if(Eingabe1.leseText()==""+Zahl1 )
    51. {
    52. Ausgabe4 = new AusgabePanel("Richtig",50,50);
    53. Ausgabe4.setzePosition(220,20);
    54. Ausgabe4.setzeSchriftgroesse(30);
    55. Ausgabe4.setzeSchriftfarbe("schwarz");
    56. Ausgabe4.setzeHintergrundfarbe("hellgrau");
    57. }
    58. }
    59. }
    Alles anzeigen
  • Moin :)

    Also.. was sehr unschön aussieht ist:

    Quellcode

    1. if(Eingabe1.leseText()==""+Zahl1 )

    ;)

    Das solltest du ändern.

    Nun zum wirklichen Problem: Bist du mal mit nem Debugger rein, und geschaut ob er überhaupt in den If-Zweig kommt?
    Falls ja, pack nochmal ein

    Quellcode

    1. Ausgabe4.setVisible(true)


    Und wenns immernoch nicht hilft ein

    Quellcode

    1. Ausgabe4.repaint();


    Achso und die Javajaner schreiben den Anfangsbuchstaben von Variablen klein. (Konstanten hingegen komplett groß, der erste Buchstabe einer Klasse groß usw... :) )
  • Quellcode

    1. if(Eingabe1.leseText()==""+Zahl1 )

    was soll ich denn da ändern?
    Habe wirklich wenig ahnung von java =)

    Und im Debugger kann ich auch wenig erkennen.
    Ich sehe mehrere Fenster.
    Im einem steht Threads und darunter "main (at breakpoint)"

    dann weiter unten call sequence
    Zufallszahlen.gibAntowrt

    daneben das Feld Static variables( aber dieses ist ganz leer)

    unter diesem Feld ist ein Fenster namens Instance variables.
    mit folgendem Inhalt

    Random Zahl= <object reference>
    AusgabePanel Ausgabe1= <object reference>
    AusgabePanel Ausgabe2= null
    AusgabePanel Ausgabe3= null
    AusgabePanel Ausgabe4= null
    AusgabePanel Ausgabe5= null
    AusgabePanel Ausgabe6= null

    Eingabefeld EIngabe1= object reference>
    Eingabefeld EIngabe2= <object reference>
    Eingabefeld EIngabe3= <object reference>
    Eingabefeld EIngabe4=<object reference>
    int Zahl1= 0
    int Zahl2= 0
    int Zahl3= 0
    int Zahl4= 0
    und noch local variables, aber das ist gänzlich leer =)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Wasilij50 ()

  • Was F0kus dir sagen will:

    1.

    Quellcode

    1. ""+Zahl1
    ist eine sehr hässliche Typkonvertierung. Mache bitte

    Quellcode

    1. new Integer(Zahl1).toString()
    stattdessen. Du kannst auch deine Klassenvariablen gleich vom Typ Integer antstatt vom Typ int machen.
    2.

    Quellcode

    1. "ichBinEinString" == "ichBinEinString"
    ist kein String-Vergleich sondern ein Objekt-Vergleich. Da das zwei verschiedene Objekte sind (die nur den selben Inhalt haben) ist das Ergebnis hier false. Was du möchtest ist

    Quellcode

    1. "ichBinEinString".equals("ichBinEinString")
    . Das vergleicht dir den Inhalt der Objekte.

    Was mich noch auf Anhieb auffällt:
    3. In Java schreibt man Variablennamen am Anfang immer mit einen Kleinbuchstaben. Halte dich besser daran, auch wenn es keine Plicht ist. Dadurch ist es für Andere leichter deinen Code zu lesen und du bekommst vielleicht auch mehr Antworten. :)
    4. Wo ist deine main-Methode? Diese Methode wird benötigt um eine Java-Application zu starten.
  • Ich hätte es vorher erwähnen sollen, dass ich dieses Programm mithilfe von Bluej erstelle =)

    Bin noch neu im bereich der Informatik, freue mich also über eure Vorschläge wie man's macht.

    Habe das jetzt mal überarbeitet, trotzdem hat sich nichts verändert.

    Quellcode

    1. }
    2. import jtoolbox.*;
    3. import javax.swing.*;
    4. import java.util.*;
    5. public class Zufallszahlen
    6. {
    7. private Random Zahl;
    8. private AusgabePanel Ausgabe1;
    9. private AusgabePanel Ausgabe2;
    10. private AusgabePanel Ausgabe3;
    11. private AusgabePanel Ausgabe4;
    12. private AusgabePanel Ausgabe5;
    13. private AusgabePanel Ausgabe6;
    14. private Eingabefeld Eingabe1;
    15. private Eingabefeld Eingabe2;
    16. private Eingabefeld Eingabe3;
    17. private Eingabefeld Eingabe4;
    18. private int Zahl1;
    19. private int Zahl2;
    20. private int Zahl3;
    21. private int Zahl4;
    22. public Zufallszahlen()
    23. {
    24. Zahl= new Random();
    25. }
    26. public int gibZufallszahl()
    27. {
    28. return Zahl.nextInt(10);
    29. }
    30. public void Ausgabe()
    31. {
    32. int Zahl1= Zahl.nextInt(10);
    33. new Integer(Zahl1).toString();
    34. {
    35. Ausgabe1 = new AusgabePanel(""+Zahl1,50,50);
    36. Ausgabe1.setzePosition(70,20);
    37. Ausgabe1.setzeSchriftgroesse(30);
    38. Ausgabe1.setzeSchriftfarbe("schwarz");
    39. Ausgabe1.setzeHintergrundfarbe("hellgrau");
    40. Ausgabe1.setzeAnzeigetext(""+Zahl1);
    41. }
    42. }
    43. public void gibEingabe()
    44. {
    45. {
    46. Eingabe1 = new Eingabefeld("",50,50);
    47. Eingabe1.setzePosition(320,20);
    48. Eingabe2 = new Eingabefeld("",50,50);
    49. Eingabe2.setzePosition(370,20);
    50. Eingabe3 = new Eingabefeld("",50,50);
    51. Eingabe3.setzePosition(420,20);
    52. Eingabe4 = new Eingabefeld("",50,50);
    53. Eingabe4.setzePosition(470,20);
    54. }
    55. }
    56. public void gibEingabe2()
    57. {
    58. {
    59. Ausgabe6 = new AusgabePanel(""+Eingabe1.leseText(),50,50);
    60. Ausgabe6.setzePosition(320,70);
    61. Ausgabe6.setzeSchriftgroesse(30);
    62. Ausgabe6.setzeSchriftfarbe("schwarz");
    63. Ausgabe6.setzeHintergrundfarbe("hellgrau");
    64. }
    65. }
    66. public void gibAntwort()
    67. {
    68. if(Eingabe1.leseText().equals(Zahl1) )
    69. {
    70. Ausgabe4 = new AusgabePanel("Richtig",50,50);
    71. Ausgabe4.setzePosition(220,20);
    72. Ausgabe4.setzeSchriftgroesse(30);
    73. Ausgabe4.setzeSchriftfarbe("schwarz");
    74. Ausgabe4.setzeHintergrundfarbe("hellgrau");
    75. }
    76. }
    77. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Wasilij50 ()

  • Ich kenne Bluej nicht, aber wo ist wie geschrieben die main Klasse?

    Und warum startet dein part mit einer geschweiften Klammer?
    In deinem Script werden auch 3 geschweifte Klammern mehr geschlossen als geöffnet.

    Kann es sein, dass du eine Datei übersehen hast ?
    Guck nochmal im Projektmappenexplorer (falls es so etwas gibt).
  • So, die Klammer oben ist aus versehen rein gekommen.
    So sieht es dann bei mir aus.

    Wo hast du den die überflüssigen klammer entdeckt?


    Quellcode

    1. import jtoolbox.*;
    2. import javax.swing.*;
    3. import java.util.*;
    4. public class Zufallszahlen
    5. {
    6. private Random Zahl;
    7. private AusgabePanel Ausgabe1;
    8. private AusgabePanel Ausgabe2;
    9. private AusgabePanel Ausgabe3;
    10. private AusgabePanel Ausgabe4;
    11. private AusgabePanel Ausgabe5;
    12. private AusgabePanel Ausgabe6;
    13. private Eingabefeld Eingabe1;
    14. private Eingabefeld Eingabe2;
    15. private Eingabefeld Eingabe3;
    16. private Eingabefeld Eingabe4;
    17. private int Zahl1;
    18. private int Zahl2;
    19. private int Zahl3;
    20. private int Zahl4;
    21. public Zufallszahlen()
    22. {
    23. Zahl= new Random();
    24. }
    25. public int gibZufallszahl()
    26. {
    27. return Zahl.nextInt(10);
    28. }
    29. public void Ausgabe()
    30. {
    31. int Zahl1= Zahl.nextInt(10);
    32. new Integer(Zahl1).toString();
    33. {
    34. Ausgabe1 = new AusgabePanel(""+Zahl1,50,50);
    35. Ausgabe1.setzePosition(70,20);
    36. Ausgabe1.setzeSchriftgroesse(30);
    37. Ausgabe1.setzeSchriftfarbe("schwarz");
    38. Ausgabe1.setzeHintergrundfarbe("hellgrau");
    39. Ausgabe1.setzeAnzeigetext(""+Zahl1);
    40. }
    41. }
    42. public void gibEingabe()
    43. {
    44. Eingabe1 = new Eingabefeld("",50,50);
    45. Eingabe1.setzePosition(320,20);
    46. Eingabe2 = new Eingabefeld("",50,50);
    47. Eingabe2.setzePosition(370,20);
    48. Eingabe3 = new Eingabefeld("",50,50);
    49. Eingabe3.setzePosition(420,20);
    50. Eingabe4 = new Eingabefeld("",50,50);
    51. Eingabe4.setzePosition(470,20);
    52. }
    53. public void gibEingabe2()
    54. {
    55. Ausgabe6 = new AusgabePanel(""+Eingabe1.leseText(),50,50);
    56. Ausgabe6.setzePosition(320,70);
    57. Ausgabe6.setzeSchriftgroesse(30);
    58. Ausgabe6.setzeSchriftfarbe("schwarz");
    59. Ausgabe6.setzeHintergrundfarbe("hellgrau");
    60. }
    61. public void gibAntwort()
    62. {
    63. if(Eingabe1.leseText().equals(Zahl1) )
    64. {
    65. Ausgabe4 = new AusgabePanel("Richtig",50,50);
    66. Ausgabe4.setzePosition(220,20);
    67. Ausgabe4.setzeSchriftgroesse(30);
    68. Ausgabe4.setzeSchriftfarbe("schwarz");
    69. Ausgabe4.setzeHintergrundfarbe("hellgrau");
    70. }
    71. }
    72. }
    Alles anzeigen
  • Naja,
    ich hab am Anfang meines Studiums mit BlueJ arbeiten müssen. Man kann dort ohne main-Methode arbeiten. Man sieht dann all seine Klassen in einer grafischen Oberfläche und kann mit der rechten Maustaste einzelne Methoden starten.
    Einerseits gut, andererseits schwierig für Java-Anfänger.

    Ich denke mal, dass du so dein "Programm" startest, Wasilij50?
    Ich persönlich bin schnell auf andere Editoren gewechselt (JavaEditor, Eclipse, Netbeans) und habe Java dadurch besser verstanden. Falls du länger Java machen willst, empfehle ich dir das auch, vielleicht aber erst nach deinem Projekt hier.
  • mad, genauso ist es.
    Jedoch lerne ich das noch in der Schule und habe somit keine große Wahl zwischen Editorn.
    Nunja , zurueck zum Problem. ALso die Ausgabenerstellung funktioniert einwandfrei mitsamt den Zufallszahlen.
    Nur dieses Durchchecken von den Pc will einfach ned gehen.
    Ich habe wirklich schon alles mögliche versucht, nichts hat geklappt. In einer Woche muss ich das Projekt abegeben, bin jedoch zurzeit am Null-Punkt.
    Der Lehrer weis auch nicht woran das liegen könnte.

    Ihr seid meine letzte Hoffnung.
  • Also ersteinmal fehlen ja da anscheinend Klassen, wo ist denn z.B. die Klasse Eingabefeld definiert?
    Habt ihr die vielleicht vom Lehrer bekommen?

    In dieser Klasse steckt deine Variable "anzeigeText". Für diese Musst du eine getMethode schreiben, wenn du die Klasse (Eingabefeld) überhaupt verändern darfst.

    Gib uns mal ein paar mehr Hinweise. Falls gar nix geht, mach mal einen Screenshot von deiner BlueJ Oberfläche und poste den hier, da kann man die Klassen meist recht gut erkennen.
  • Ich habe nur eine Klasse Zufallszahlen erstellt und da alles reingepackt.
    wir haben auch eine Vorlage mit einer JGUIToolbox bekommen.
    Dort sind alle Klassen, die wir brauchen bereits vordefiniert.
    Als Grafik sind die aber nicht dargestellt.
    Um auf sie zugreifen zu können habe ich am anfang diese toolbox in meine Klasse importiert

    Quellcode

    1. import jtoolbox.*;
    2. import javax.swing.*;
    3. import java.util.*;


    Der Lehrer gab uns auch eine PDF Datei , wo alle Klassen erklärt und aufgelistet sind.
    Z.B. :

    Eingabefeld

    - obj: CEingabefeld
    - breite: int
    - hoehe: int
    - xPos: int
    - yPos: int
    - anzeigeText: String
    - fontGroesse: int
    - schriftFarbe: String
    - hintergrundFarbe: String

    c Eingabefeld()
    c Eingabefeld(String, int, int)
    + setzeLink(ITuWas, int): void
    + setzeSchriftgroesse(int): void
    + setzeSchriftfarbe(String): void
    + setzeHintergrundfarbe(String): void
    + setzeGroesse(int, int): void
    + setzePosition(int, int): void
    + setzeAusgabetext(String): void
    + leseText(): String
    + zentrieren(): void
    + setzeInteger(int): void
    + leseInteger(int): int
    + setzeDouble(double): void
    +leseDouble(double): double

    Soweit ich es erfahren konnte bedeutet das - als Vorzeichen , dass es protected ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Wasilij50 ()

  • OK!
    dann vergleichst du also den Wert der Methode leseText() der Klasse Eingabefeld mit dem Wert der get-Methode für die Textvariable in der Ausgabefeldklasse. Wie die Methode heißt, steht ja anscheinend in der pdf-Datei. Wenn du sie nicht selbst findest, zeig uns doch mal die pdf-Datei.

    Achso: mit dem Vorzeichen hast du Recht, halte dich an die Methoden mit dem Plus...
  • zeig uns doch mal die pdf-Datei

    wie?
    soll ich es irgendwie hochladen?

    ergleichst du also den Wert der Methode leseText() der Klasse Eingabefeld mit dem Wert der get-Methode für die Textvariable in der Ausgabefeldklasse


    Eben nicht, die Ausgabepanel hat keine solche methode, anzeigeText ist der Attribut dieser Klasse, eben diese Zahl.

    AusgabePanel
    - obj: CAusgabePanel
    - breite: int
    - hoehe: int
    - xPos: int
    - yPos: int
    - anzeigeText: String
    - fontGroesse: int
    - hintergrundFarbe: String
    - schriftFarbe: String
    - ausrichtung: int
    + AusgabePanel()
    + AusgabePanel(String, int, int)
    + setzeAnzeigetext(String): void
    + setzeSchriftgroesse(int): void
    + setzeAusrichtung(int): void
    + setzeSchriftfarbe(String): void
    + setzeHintergrundfarbe(String): void
    + setzeGroesse(int, int): void
    + setzePosition(int, int): void

    Das ist alles was unter dieser klasse zu finden ist.
  • Das Spiel läuft nicht, ich habe bisher nur das Spielfeld erstellt.
    Das Prüfen ist das Problem, dass der PC herausgibt welche zahlen sich mit dem Code übereinstimmen.

    Mein Ziel ist derzeit, zu verhindern , dass im Code gleiche Zahlen auftreten.

    Ich habe jetzt folgendes versucht und siehe an , das klappt hervorragend.
    Ich habe einfach statt den Ausgabepanels neue Eingabefelder erstellt und da diese Zufallszahlen reingepackt, und diese anschließend , mit den von mir eingegeben, verglichen
    Hier der Code:

    Quellcode

    1. import jtoolbox.*;
    2. import javax.swing.*;
    3. import java.util.*;
    4. public class Zufallszahlen
    5. {
    6. private Random Zahl;
    7. private Eingabefeld Eingabe5;
    8. private Eingabefeld Eingabe6;
    9. private Eingabefeld Eingabe7;
    10. private Eingabefeld Eingabe8;
    11. private Eingabefeld Eingabe1;
    12. private Eingabefeld Eingabe2;
    13. private Eingabefeld Eingabe3;
    14. private Eingabefeld Eingabe4;
    15. private int Zahl1;
    16. private int Zahl2;
    17. private int Zahl3;
    18. private int Zahl4;
    19. private AusgabePanel Ausgabe1;
    20. public Zufallszahlen()
    21. {
    22. Zahl= new Random();
    23. }
    24. public int gibZufallszahl()
    25. {
    26. return Zahl.nextInt(10);
    27. }
    28. public void Ausgabe()
    29. {
    30. int Zahl1 = Zahl.nextInt(6);
    31. int Zahl2 = Zahl.nextInt(6);
    32. int Zahl3 = Zahl.nextInt(6);
    33. int Zahl4 = Zahl.nextInt(6);
    34. {
    35. Eingabe5 = new Eingabefeld(""+Zahl1,50,50);
    36. Eingabe5.setzePosition(20,20);
    37. Eingabe6 = new Eingabefeld(""+Zahl2,50,50);
    38. Eingabe6.setzePosition(70,20);
    39. Eingabe7 = new Eingabefeld(""+Zahl3,50,50);
    40. Eingabe7.setzePosition(120,20);
    41. Eingabe8 = new Eingabefeld(""+Zahl4,50,50);
    42. Eingabe8.setzePosition(170,20);
    43. }
    44. if (Eingabe5.leseText().equals(Eingabe6.leseText()))
    45. {
    46. Ausgabe();
    47. }
    48. }
    49. public void gibEingabe()
    50. {
    51. {
    52. Eingabe1 = new Eingabefeld("",50,50);
    53. Eingabe1.setzePosition(320,20);
    54. Eingabe1.leseText();
    55. Eingabe2 = new Eingabefeld("",50,50);
    56. Eingabe2.setzePosition(370,20);
    57. Eingabe3 = new Eingabefeld("",50,50);
    58. Eingabe3.setzePosition(420,20);
    59. Eingabe4 = new Eingabefeld("",50,50);
    60. Eingabe4.setzePosition(470,20);
    61. }
    62. }
    63. public void gibAntwort()
    64. {
    65. if(Eingabe1.leseText().equals(Eingabe5.leseText()) )
    66. {
    67. Ausgabe1 = new AusgabePanel("Richtig",50,50);
    68. Ausgabe1.setzePosition(220,20);
    69. Ausgabe1.setzeSchriftgroesse(30);
    70. Ausgabe1.setzeSchriftfarbe("schwarz");
    71. Ausgabe1.setzeHintergrundfarbe("hellgrau");
    72. }
    73. }
    74. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Wasilij50 ()