selfhtml.de - Alles für den Webmaster!

 

Empfehlung:

wix.com

Kostenlose Homepage

Besuchen Sie auch:

Jobs:

Mastermind programmieren

Autor: shrk
Datum: 17.06.2009 09:19:40

Hi,

bin gerade dabei das Spiel Mastermind in Java zu programmieren. Bin soweit eigentlich schon fertig, hab nur das Problem beim Vergleich des generierten Farbcodes mit der Eingabe des Users.
Die "Farbe" wird anhand von Ziffern erstellt. 4 Ziffern im Bereich von 1-6.

1. muss die Anzahl der getroffenen Werte ausgegeben werden
2. die Anzahl der richtigen Farbe, aber an der falschen Position

die Eingabe ist kein integer sondern ein String!!

Bsp:
Code: 3212
Eingabe: 3121
--> direkte Treffer: 1 -- indirekte Treffer: 2

Bei mir gibt diese Eingabe bei indirekten Treffern 3 aus, weil er die "1" 2-mal im generierten Code findet. Wie stell ich den Vergleich da am besten an?

Danke euch



Re: Mastermind programmieren

Autor: xabbuh
Datum: 17.06.2009 15:14:18

> Bei mir gibt diese Eingabe bei indirekten
> Treffern 3 aus, weil er die "1" 2-mal im
> generierten Code findet. Wie stell ich den
> Vergleich da am besten an?

Etwas Beispielcode, an dem man das Problem nachvollziehen kann, wäre schon sinnvoll.



Re: Mastermind programmieren

Autor: shrk
Datum: 17.06.2009 22:17:01

> > Bei mir gibt diese Eingabe bei indirekten
> > Treffern 3 aus, weil er die "1" 2-mal im
> > generierten Code findet. Wie stell ich den
> > Vergleich da am besten an?
>
> Etwas Beispielcode, an dem man das Problem
> nachvollziehen kann, wäre schon sinnvoll.

Geb ich dir recht :) Hier mal meine Methode, die den eingegeben mit dem generierten Code vergleicht.

public static boolean compareColorCodes(String generatedCode, String inputedCode) {
int directHits = 0;
int indirectHits = 0;
boolean gameEnd = false;

int substringEnd = 1;

for(int substringStart = 0; substringStart < generatedCode.length(); substringStart++) {
if(generatedCode.substring(substringStart, substringEnd).equals(inputedCode.substring(substringStart, substringEnd))) {
directHits++;
} else if(inputedCode.contains(generatedCode.substring(substringStart, substringEnd))) {
indirectHits++;
}

substringEnd ++;
}

if(directHits == 4) {
gameEnd = true;
} else {
System.out.println("Direkte Treffer: " + directHits);
System.out.println("Indirekte Treffer: " + indirectHits);
gameEnd = false;
}

return gameEnd;
}



Re: Mastermind programmieren

Autor: xabbuh
Datum: 18.06.2009 15:23:41

Ich habe deinen Code mal etwas geändert:

public static boolean compareColorCodes(String generatedCode, String inputedCode) {
    int directHits = 0;
    HashSet indirectHits = new HashSet();
    boolean gameEnd = false;
    char c;

    for(int i = 0; i < generatedCode.length(); i++) {
        c = inputedCode.charAt(i);
        if(generatedCode.length() > i && generatedCode.charAt(i) == c) {
            directHits++;
        } else if(generatedCode.indexOf(c) >= 0) {
            indirectHits.add(c);
        }
    }

    if(directHits == 4) {
        gameEnd = true;
    } else {
        System.out.println("Direkte Treffer: " + directHits);
        System.out.println("Indirekte Treffer: " + indirectHits.size());
        gameEnd = false;
    }

    return gameEnd;
}

Zum Einen habe ich eine Überprüfung auf die String-Länge eingebaut, um IndexOutOfBoundsExeptions beim Aufruf von charAt() zu vermeiden und merke mir die bereits geprüften Zahlen in einem Set, so dass jede Zahl nur ein Mal für indirekte Treffer getestet wird.



Re: Mastermind programmieren

Autor: reporter
Datum: 18.06.2009 15:30:24

Hallo,

welcher Vorteil hat das "HashSet" gegenüber eine Liste?



Re: Mastermind programmieren

Autor: xabbuh
Datum: 18.06.2009 15:36:02

Hi,


> welcher Vorteil hat das "HashSet" gegenüber eine
> Liste?

ein Set kümmert sich selbst darum, dass Elemente nicht doppelt eingefügt werden.



Re: Mastermind programmieren

Autor: shrk
Datum: 18.06.2009 19:03:35

Hi,

danke dir erstmal für deine Hilfe. Komme leider heute nicht mehr zum testen. Aber vielen Dank vorerst!!!