Ich erstelle ein Spiel wie ZTYPE -- Wörter werden durch ein BufferedReader eingelesen und in einer gewissen Zeit müssen diese Wörter abgetippt werden. Das Funktioniert soweit. Wenn ich allerdings ein Wort mit einem Leerzeichen zwischendrin habe wird das Leerzeichen nicht abgearbeitet.
Als Beispiel das Wort: 1 + 1 = 2
Die CodeZeilen für die Abarbeitung sowie den Bufferreader werde ich hier zeigen:
BufferReader:
private ArrayList<String> liste;
public Wörterbuch() {
this.liste = new ArrayList<String>();
}
public void einlesen(String dateiname) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(dateiname));
String line;
while((line=reader.readLine())!=null){
this.liste.add(line);
System.out.println(liste);
}
reader.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally{
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Registrieren der Tasteneingabe:
this.setOnKeyTyped(e -> {
System.out.println("Eingabe registriert: "+e.getCharacter());
this.controller.registriereTasteneingabe(e.getCharacter());
});
Methode RegistriereTasteneingabe (noch nicht fertig, aber umrelevant für meine Frage)
public void registriereTasteneingabe(String eingabe) {
boolean erfolgreich = this.derzeitigesSpiel.registriereTastatureingabe(eingabe);
if (!erfolgreich) {
// Falschen Buchstaben getippt
}
}
Methode registriereTastatureingabe
public boolean registriereTastatureingabe(String eingabe) {
/**
* Fälle:
* 1) Kein Wort wurde bisher "angefangen" hallo, baum, auto
* 2) Ein Wort wurde angefangen HAllo, baum, auto
* 3) Mehrere Worte haben den gleichen Anfang SPiegel, SPass
*/
// Finde die Worte, bei denen bisher am meisten eingetippt wurde
int maximalerFortschritt = 0;
for (int i = 0; i < this.aktiveWorte.size(); i++) {
maximalerFortschritt = Math.max(maximalerFortschritt, this.aktiveWorte.get(i).schonEingetippteZeichen());
}
// Bei den Worten, wo bisher am meisten eingetippt wurde: Tippe weiter
boolean richtigeTasteGetroffen = false;
for (int i = 0; i < this.aktiveWorte.size(); i++) {
if (this.aktiveWorte.get(i).schonEingetippteZeichen() == maximalerFortschritt) {
richtigeTasteGetroffen = richtigeTasteGetroffen | this.aktiveWorte.get(i).buchstabeEintippen(eingabe.charAt(0));
}
}
// Setze alle Worte zurück, die nicht dem neuen maximalen Fortschritt entsprechen
for (int i = 0; i < this.aktiveWorte.size(); i++) {
// Hat ein Wort noch den "alten" Fortschritt?
if (richtigeTasteGetroffen && this.aktiveWorte.get(i).schonEingetippteZeichen() == maximalerFortschritt) this.aktiveWorte.get(i).resetWord();
}
//return this.aktivesWort.buchstabeEintippen(eingabe.charAt(0));
return richtigeTasteGetroffen;
}
}
und die letzte Methode buchstabeEintippen:
public boolean buchstabeEintippen(char zeichen) { // character := zahl für buchstabe (ascii-codierung)
// ganzeswort; Hallo
// zND: 5
// zeichen: E
// => kontrollieren, ob H.equals(E)?
char einzutippendesZeichen = ganzeswort.charAt(ganzeswort.length()-zeichenNochDa.get());
if (einzutippendesZeichen == zeichen) {
this.zeichenNochDa.set(this.zeichenNochDa.get()-1);
return true;
}
else {
return false;
}
}`
Als Beispiel das Wort: 1 + 1 = 2
Die CodeZeilen für die Abarbeitung sowie den Bufferreader werde ich hier zeigen:
BufferReader:
private ArrayList<String> liste;
public Wörterbuch() {
this.liste = new ArrayList<String>();
}
public void einlesen(String dateiname) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(dateiname));
String line;
while((line=reader.readLine())!=null){
this.liste.add(line);
System.out.println(liste);
}
reader.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
finally{
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Registrieren der Tasteneingabe:
this.setOnKeyTyped(e -> {
System.out.println("Eingabe registriert: "+e.getCharacter());
this.controller.registriereTasteneingabe(e.getCharacter());
});
Methode RegistriereTasteneingabe (noch nicht fertig, aber umrelevant für meine Frage)
public void registriereTasteneingabe(String eingabe) {
boolean erfolgreich = this.derzeitigesSpiel.registriereTastatureingabe(eingabe);
if (!erfolgreich) {
// Falschen Buchstaben getippt
}
}
Methode registriereTastatureingabe
public boolean registriereTastatureingabe(String eingabe) {
/**
* Fälle:
* 1) Kein Wort wurde bisher "angefangen" hallo, baum, auto
* 2) Ein Wort wurde angefangen HAllo, baum, auto
* 3) Mehrere Worte haben den gleichen Anfang SPiegel, SPass
*/
// Finde die Worte, bei denen bisher am meisten eingetippt wurde
int maximalerFortschritt = 0;
for (int i = 0; i < this.aktiveWorte.size(); i++) {
maximalerFortschritt = Math.max(maximalerFortschritt, this.aktiveWorte.get(i).schonEingetippteZeichen());
}
// Bei den Worten, wo bisher am meisten eingetippt wurde: Tippe weiter
boolean richtigeTasteGetroffen = false;
for (int i = 0; i < this.aktiveWorte.size(); i++) {
if (this.aktiveWorte.get(i).schonEingetippteZeichen() == maximalerFortschritt) {
richtigeTasteGetroffen = richtigeTasteGetroffen | this.aktiveWorte.get(i).buchstabeEintippen(eingabe.charAt(0));
}
}
// Setze alle Worte zurück, die nicht dem neuen maximalen Fortschritt entsprechen
for (int i = 0; i < this.aktiveWorte.size(); i++) {
// Hat ein Wort noch den "alten" Fortschritt?
if (richtigeTasteGetroffen && this.aktiveWorte.get(i).schonEingetippteZeichen() == maximalerFortschritt) this.aktiveWorte.get(i).resetWord();
}
//return this.aktivesWort.buchstabeEintippen(eingabe.charAt(0));
return richtigeTasteGetroffen;
}
}
und die letzte Methode buchstabeEintippen:
public boolean buchstabeEintippen(char zeichen) { // character := zahl für buchstabe (ascii-codierung)
// ganzeswort; Hallo
// zND: 5
// zeichen: E
// => kontrollieren, ob H.equals(E)?
char einzutippendesZeichen = ganzeswort.charAt(ganzeswort.length()-zeichenNochDa.get());
if (einzutippendesZeichen == zeichen) {
this.zeichenNochDa.set(this.zeichenNochDa.get()-1);
return true;
}
else {
return false;
}
}`