# Galgenmännchenspiel



## Zoda² (24. Nov 2004)

Hi, ich bin noch ziemlich neu in Java   und habe zwei Fragen zu einem Galgenmännchenspiel (das Spiel bei dem man ein Wort eingibt und der andere muss es erraten). Bis jetzt kann ein Spieler ein Wort eingeben und ein anderer über eine JComboBox einen Buchstaben auswählen. Ist der Buchstabe in Wort erhalten, kommt ein Fenster mit der Meldung das der Buchstabe im Wort befindet. Zusätzlich wird noch die Stelle angegeben. Jetzt würde ich gerne die Buchstaben in der richtigen Reihenfolge aufzeigen lassen. Bsp.: Spieler 1 gibt das Wort HALLO ein. Spieler 2 wählt den Buchstaben O aus. Jetzt soll der Buchstabe O angezeigt werden. Als nächstes wählt Spieler 2 den Buchstaben A aus und das ist jetzt mein Problem, weil ich nicht weiß, wie ich es programmier, dass das A vor dem O angezeigt wird und dazwischen noch zwei Leerzeichen für die zwei L's sind. Außerdem wird bei der aktuellen Version komischerweiße der letzte richtige Buchstabe nochmal angezeigt, wenn man einen anderen auswählt und ich habe keine Ahnung warum  :bahnhof: . Währe net, wenn mir jemand helfen könnte. Hier ist der aktuelle Code:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class galgenmaennchen extends JFrame implements ActionListener, ItemListener {
	
	String Buchstaben1[] = { " ", "A", "B", "C", "D", "E", "F", "G", 
							 "H", "I", "J", "K", "L", "M", "N", "O", 
							 "P", "Q", "R", "S", "T", "U", "V", "W", 
							 "X", "Y", "Z", "Ä", "Ö", "Ü" };
	char[] buchstaben;
	char d;
	int Buchstabenzähler = 0;
	int a = 0;
	int b = 0;
	int e = 0;
	String c = "";
	JPanel pane = new JPanel();
	JComboBox Buchstaben2 = new JComboBox();
	JButton neustart = new JButton("Start/Neustart");
	JLabel länge = new JLabel("Das Wort besteht aus insgesamt " + a + " Buchstaben");
	
	public galgenmaennchen() {		
	
		super("Galgenmännchen");
		setSize(500, 100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		while (Buchstabenzähler < 30) {
			Buchstaben2.addItem(Buchstaben1[Buchstabenzähler]);
			Buchstabenzähler++;
		}
		Buchstaben2.addItemListener(this);
		neustart.addActionListener(this);
		pane.add(neustart);
		pane.add(Buchstaben2);
		pane.add(länge);
		setContentPane(pane);
	}
	
	void start() {
		
		a = 0;
		pane.remove(länge);
		String wort = JOptionPane.showInputDialog(null,
					  "Bitte das zu erratende Wort in GROSSBUCHSTABEN eingeben",
					  "Start",
					  JOptionPane.QUESTION_MESSAGE);
		try {
			while (true) {
				char Buchstaben3 = wort.charAt(a);
				a++;
			}
		}
		catch (Exception e) {
		}
		b = a - 1;
		buchstaben = new char[a];
		while (b > 0) {
			buchstaben[b] = wort.charAt(b);
			b--;
		}
		buchstaben[0] = wort.charAt(0);
		länge = new JLabel("Das Wort besteht aus insgesamt " + a + " Buchstaben");
		pane.add(länge);
		setContentPane(pane);
	}
	
	void auswertung() {
		
		while (b < a) {
			if (d == buchstaben[b]) {
				e = b + 1;
				JOptionPane.showMessageDialog(null,
				"Der Buchstabe " + buchstaben[b] + " steht an " + e + ". Stelle");
			}
			b++;
		}
		b = 0;
	}
	
	public static void main(String[] args) {
		
		galgenmaennchen spiel = new galgenmaennchen();
		spiel.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent evt1) {
		
		Object source1 = evt1.getSource();
		if (source1 == neustart) {
			start();
		}
	}
	
	public void itemStateChanged(ItemEvent evt2) {
		
		Object source2 = evt2.getSource();
		if (source2 == Buchstaben2) {
			Object Buchstabe = evt2.getItem();
			c = Buchstabe.toString();
			d = c.charAt(0);
			auswertung();
		}
	}
}
```


----------



## abollm (26. Nov 2004)

Ehrlich gesagt habe ich keine Lust mich in deinen Code einzuarbeiten.

Wenn du aber Interesse an einer Konsolenversion des "Galgenmännchen"-Spiels hast, dann melde dich hier und ich poste den Code. Diese Version zeigt die Buchstaben in der richtigen Reihenfolge und mit einem einstellbaren Platzhalter an. Damit könntest du vielleicht deine Fragen beantworten oder lösen.


----------



## Sky (26. Nov 2004)

abollm hat gesagt.:
			
		

> Ehrlich gesagt habe ich keine Lust mich in deinen Code einzuarbeiten.
> 
> Wenn du aber Interesse an einer Konsolenversion des "Galgenmännchen"-Spiels hast, dann melde dich hier und ich poste den Code. Diese Version zeigt die Buchstaben in der richtigen Reihenfolge und mit einem einstellbaren Platzhalter an. Damit könntest du vielleicht deine Fragen beantworten oder lösen.



Also, ich habe interesse! Bitte posten (oder mir schicken)


----------



## abollm (26. Nov 2004)

sky80 hat gesagt.:
			
		

> ...
> Also, ich habe interesse! Bitte posten (oder mir schicken)



Bitte sehr, hier also zunächst die Klasse "GalgenMännchen":


```
/*
 * Created on 24.11.2004
 *
 * @author ABollm
 * 
 *
 */

//import java.awt.event.*;
//import javax.swing.*;
//import java.io.*;

public class GalgenMännchen {
	private static final String PLATZHALTER = "-"; 
	{
		String laufendesWort = "";
		String striche = "";
		int versuche;
		versuche = 0;
		int j;
		int a;
		int counter;
		counter = 0;
		String curChar = "";
		String curCharDash = "";
		String rateVersuch;
		// Zehn Vorgabe-Wörter - muss angepasst werden, wenn andere Wörter gewünscht werden
		// außerdem wird das jeweils zu erratende Wort im Klartext angezeigt, s. auch unten
		String words[] = { "Ratespiel", "Rentenreform", "Kanzler", "Autofahrt",
				          "Grimmasse", "Habenichts", "Luftzug", "Bande", "Vorschlag", "Sport" };

		a = (int) (Math.random() * 10);
		laufendesWort = words[a];
		String aktuellesWort = laufendesWort.toUpperCase();	//alternativ (s. aber auch unten): toLowerCase(); 
		striche = "";
		for (int i = 1; i <= laufendesWort.length(); i++)
			striche += PLATZHALTER;
		//System.out.println(laufendesWort);
		System.out
				.println("Willkommen zu Galgenmmännchen! Geben Sie einen \n" +
						"Buchstaben ein und drücken Sie die Eingabe-Taste oder OK\n");
		System.out.println(striche);
		for (int c = 0; c <= 10; c++) {
			rateVersuch = "";
			rateVersuch = EasyIn.getString1().toUpperCase();
			while (aktuellesWort.indexOf(rateVersuch) > -1) {
				int start = aktuellesWort.indexOf(rateVersuch); // Index
				// Platzhalter-Strich(e)"  ersetzen 
				striche = striche.substring(0, start) + rateVersuch
                          + striche.substring(start + 1);
				aktuellesWort = aktuellesWort.substring(0, start) + PLATZHALTER
						+ aktuellesWort.substring(start + 1);
			}
			System.out.println(striche);

			if (c == 10) {
				System.out.println("\nLeider Verloren!");
				System.out.println("Das zu erratende Wort lautet "
						+ laufendesWort);
				counter = 0;
				break;
			} else if (striche.equalsIgnoreCase(laufendesWort)) {
				System.out.println("\nGewonnen!");
				counter = 0;
				break;
			}
		}

	}
}
```

Und hier die Klasse zum Starten des Teils:


```
/**
 * @author ABollm
 *
 *
 */
public class StarteGalgenmann {

	public static void main(String args[])
	{
	GalgenMännchen a = new GalgenMännchen();
	}

}
```

Das Ding ist natürlich nicht perfekt, aber man kann das Spiel damit spielen. Vielleicht hat ja jemand Lust auf dieser Basis eine grafische Variante zu erstellen (mit einem richtig schönen Galgen)?


----------



## Zoda² (29. Nov 2004)

Ich habs mittlerweile auch schon alleine auf die Reihe bekommen


----------



## Stefan1200 (30. Nov 2004)

abollm hat gesagt.:
			
		

> Vielleicht hat ja jemand Lust auf dieser Basis eine grafische Variante zu erstellen (mit einem richtig schönen Galgen)?



Zwar nicht auf basis deines Sources, aber vor einiger Zeit habe ich bereits so ein Spiel programmiert:
http://home.arcor.de/stefan-1983/projects/jhangman.html


----------

