tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
609
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    desperade desperade ist offline Grünschnabel
    Registriert seit
    Jul 2004
    Ort
    Bielefeld
    Beiträge
    4
    Hi,
    ich bin dabei Mastermind zu programmieren und bis auf eine Sache läuft es. Das wichtigste, die Treffer abfrage läuft noch nicht wie gewünscht.

    Einen absoluten Treffer bekomme ich ohne Probleme, doch wenn das siegMuster z.B. "gelb" "gelb" "gruen" "gruen" ist un der Spieler "gelb" und 3-mal "rot" eingibt, bekomme ich einen absoluten (schwarzes pinnchen) Treffer (ist ja auch klar, weil an der Stelle [0] beides "gelb" ist), aber auserdem bekomme ich einen halben (weisses pinnchen) Treffer.

    Hier die Methode dazu:
    ! siegMuster ist das random Muster, welches man erraten muss, !
    ! spielFeldString ist das vom Spieler eingegebene Muster. !
    PHP-Code:
    private void treffer() {
            
    genaueTreffer 0;
            
    halbeTreffer 0;
            for (
    int i 0siegMuster.lengthi++) {
                if (
    siegMuster[i].equals(spielfeldString[i][spielRunden])) {
                    
    genaueTreffer++;
                } else
                    for (
    int j 0siegMuster.lengthj++) {
                        if (
    == i) {
                            continue;
                        }
                        if (
    siegMuster[i].equals(spielfeldString[j][spielRunden])) {
                            
    halbeTreffer++;
                        }
                    }
            }
            if (
    genaueTreffer == 4) {
                
    getSiegDialog();
            }
        } 
    Bedanke mich schon mal,
    Lenny!

    EDIT:
    Habe es hinbekommen
    PHP-Code:
    private void treffer() {
            
    genaueTreffer 0;
            
    halbeTreffer 0;
            for (
    int i 0siegMuster.lengthi++) {
                if (
    siegMuster[i].equals(spielfeldString[i][spielRunden])) {
                    
    genaueTreffer++;
                    
    siegMuster[i]=siegMuster[i]+"a";
                    
    spielfeldString[i][spielRunden]=spielfeldString[i][spielRunden]+"z";
                } else
                    for (
    int j 0siegMuster.lengthj++) {
                        if (
    == i) {
                            continue;
                        }
                        if (
    siegMuster[i].equals(spielfeldString[j][spielRunden])) {
                            
    halbeTreffer++;
                        }
                    }
                if (
    siegMuster[i].charAt(siegMuster[i].length()-1) == 'a'){
                    
    siegMuster[i] = siegMuster[i].substring(0siegMuster[i].length()-1);
                }
            }
            
            if (
    genaueTreffer == 4) {
                
    getSiegDialog();
            }
        } 
    Geändert von desperade (05.07.07 um 14:50 Uhr)
     

  2. #2
    desperade desperade ist offline Grünschnabel
    Registriert seit
    Jul 2004
    Ort
    Bielefeld
    Beiträge
    4
    Leider ist es so noch nicht wirklich korrekt.

    mit den genauenTreffer klappt jetzt alles, aber ich bekomme ein Problem mit den halbenTreffern. Wenn ich z.B. "gelb" "gelb" "rot" "rot" habe und "blau" "rot" "blau" "blau" eingebe, bekomme ich nicht einen halbenTreffer, sondern 2.

    Jemand ne Idee?
    Geändert von desperade (06.07.07 um 13:05 Uhr)
     

  3. #3
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    jetzt hab ich erstmal ne Frage zu Mastermind. Ich kenne das so, dass wenn die Farbe stimmt aber nicht die Position ein "halber" Treffer ist und wenn die Position auch noch stimmt ein ganzer Treffer ist, aber in deinen Beispielen erkenne ich dass irgendwie nicht.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  4. #4
    desperade desperade ist offline Grünschnabel
    Registriert seit
    Jul 2004
    Ort
    Bielefeld
    Beiträge
    4
    Ja, genauso ist das.

    und mit dem Vergleich
    PHP-Code:
    if (siegMuster[i].equals(spielfeldString[i][spielRunden])) {
                    
    genaueTreffer++;
                } 
    wird der genaueTreffer auch abgefragt und dazu addiert.
    ist der Inhalt von siegMuster[1] gleich "gelb" und spielFeldString[1][spielRunde] auch gleich "gelb", wird genaueTreffer um eins erhöht.
    Mit
    PHP-Code:
    siegMuster[i]=siegMuster[i]+"a";
    spielfeldString[i][spielRunden]=spielfeldString[i][spielRunden]+"z"
    wird bei einem Treffer (in diesem Beispiel) bei siegMuster[1] "gelb" zu "gelba" und bei spielFeldString[1][spielRunde] "gelb" zu "gelbz". Somit ist siegMuster[1] im Durchlauf bei den halbenTreffern nicht mehr vergleichbar und dadurch wird das Anfangsproblem
    Einen absoluten Treffer bekomme ich ohne Probleme, doch wenn das siegMuster z.B. "gelb" "gelb" "gruen" "gruen" ist un der Spieler "gelb" und 3-mal "rot" eingibt, bekomme ich einen absoluten (schwarzes pinnchen) Treffer (ist ja auch klar, weil an der Stelle [0] beides "gelb" ist), aber auserdem bekomme ich einen halben (weisses pinnchen) Treffer.
    umgangen.

    Aber nun gibt es halt noch das Problem :
    ich bekomme ein Problem mit den halbenTreffern. Wenn ich z.B. "gelb" "gelb" "rot" "rot" habe und "blau" "blau" "rot" "blau" eingebe, bekomme ich nicht einen halbenTreffer, sondern 3.
    Geändert von desperade (06.07.07 um 12:55 Uhr)
     

  5. #5
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Aber nun gibt es halt noch das Problem :
    Zitat:
    ich bekomme ein Problem mit den halbenTreffern. Wenn ich z.B. "gelb" "gelb" "rot" "rot" habe und "blau" "blau" "rot" "blau" eingebe, bekomme ich nicht einen halbenTreffer, sondern 3.
    Das ist genau das was ich nicht vestehe. Das Beispiel ist für mich aber nicht ein halber Treffer sondern ein ganzer. Da "rot" an der richtigen Stelle steht. Damit wäre es für mich ein ganzer und 0 halbe Treffer.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  6. #6
    desperade desperade ist offline Grünschnabel
    Registriert seit
    Jul 2004
    Ort
    Bielefeld
    Beiträge
    4
    ups, sorry meinte natürlich "gelb" "gelb" "rot" "rot" und "blau" "rot" "blau" "blau".
    Ausserdem habe ich mich mit der Anzahl der halbenTreffer auch vertan. Bekomme in diesem Beispiel natürlich nicht 3, sonder 2 halbeTreffer.
    Werde langsam Wahnsinnig, weil heute ja Abgabetermin ist.

    Änder ich oben auch!
    Geändert von desperade (06.07.07 um 13:00 Uhr)
     

  7. #7
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Mein Vorschlag wäre, dass du jedes Array in eine eigene ArrayList packst und alles was "getroffen" hat aus der liste entfernst.

    Also Beispiel: Gefordert "rot" "rot" "gelb" "rot"
    eingegeben "gelb" "blau" "grün" "rot"

    Wenn du jetzt die halben Treffer überprüfst, entfernst du nachher das gelb aus der Gefordert liste und brichst die überprüfung für das erste der eingegebenen ab.
    ich hoffe das war halbwegs verständlich.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  8. #8
    Avatar von fluessig
    fluessig fluessig ist offline Royal Blue
    Registriert seit
    Sep 2002
    Ort
    München
    Beiträge
    1.561
    Blog-Einträge
    7
    Ich finde das mit den Strings verändern viel zu kompliziert. Ich würde mir einen weiteren Array (trefferarray) nehmen, indem ich mir Treffer an Stellen merke und dann 3 Schleifen bauen.

    1. Schleife: Genaue Treffer
    Du vergleichst Eingabe und Zielmuster auf exakte Treffer. Erfolgte ein Treffer, so ist trefferarray[i]=1 sonst 0;

    2. (Doppel)Schleife: Ungenaue Treffer
    Du nimmst den ersten Wert aus der Eingabe und vergleichst ihn mit allen Werten im Zielmuster, an den Stellen, die noch nicht mit 1 oder 2 markiert wurden. Kommt er vor, so wird die Stelle mit 2 markiert. Das machst du für alle Stellen der Eingabe, an denen noch nicht 1 oder 2 in trefferarray steht.

    3. Schleife: Auswertung von trefferarray
    Du zählst die Einsen und Zweien und hast die Zahl genauer und ungenauer Treffer.
     
    Bitte gelöste Threads als erledigt kennzeichnen. Über ein Danke freut sich ein jeder Helfer.

Ähnliche Themen

  1. Mysql Abfrage, ich bin am verzweifeln
    Von samira_1986 im Forum PHP
    Antworten: 5
    Letzter Beitrag: 05.11.08, 22:59
  2. Abfrage über 2 Tabellen / Ausgabe von Zeilen ohne Treffer
    Von ukyo184 im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 09.01.08, 17:07
  3. SQL zeigt nur einen Treffer statt 2 Treffer
    Von AlexD1979 im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 18.12.05, 13:15
  4. Abfrage und Ausgabe bin am verzweifeln!
    Von kcyberbob im Forum PHP
    Antworten: 3
    Letzter Beitrag: 10.05.05, 22:36
  5. Antworten: 6
    Letzter Beitrag: 14.05.03, 10:24