Galgje2.java
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Galgje2 extends Applet implements ActionListener{
static final int DOOD=13; // dodelijk aantal missers
private int missers; // actueel aantal missers
private String meldTekst; // melding fout of victorie
private String toelichting; // toelichting bij melding
private String rwoord; // het te raden woord
private StringBuffer gwoord;// het geraden woord
private Label lblGwoord; // label voor gwoord
private Button bStart; // (her)start het spel!
private Button bGo; // raad de letter!
private TextField tfLetter; // vakje voor letter
private Font fnt; // algemeen lettertype
public void init(){
fnt = new Font( "Monospaced", 0, 12 );
// Maak een tekstvak voor de raadletter.
tfLetter = new TextField();
// Maak buttons en labels.
bStart = new Button("Herstart");
bGo = new Button("Go");
lblGwoord = new Label();
lblGwoord.setFont(fnt);
// Voeg alle grafische elementen aan de applet toe.
add(bStart);
add(new Label("Raad een letter: "));
add(tfLetter);
add(bGo);
add(lblGwoord);
// Meld de buttons aan als bronnen van events.
bStart.addActionListener(this);
bGo.addActionListener(this);
// Start het eerste spel.
initGame();
}
public void initGame(){
missers=0;
// missers=12; // Activeer voor testen
rwoord = new String("bitoperaties");
char posities[] = new char[rwoord.length()];
for (int i=0; i<rwoord.length(); i++) {
posities[i] = '.';
}
String s = new String(posities);
gwoord = new StringBuffer(s);
tfLetter.setText("");
lblGwoord.setText(new String(gwoord));
// Wis de meldingen.
meldTekst="";
toelichting = "";
repaint();
}
public void paint(Graphics g) {
// Teken het galgje.
int baseY = 250;
if (missers > 0){ // grond
g.drawLine(90, baseY,200,baseY);
}
if (missers > 1){ // balk omhoog
g.drawLine(125,baseY,125,baseY-100);
}
if (missers > 2){
g.drawLine(110,baseY,125,baseY-15);
}
if (missers > 3){
g.drawLine(140,baseY,125,baseY-15);
}
if (missers > 4){ // zijbalk
g.drawLine(125,baseY-100,175,baseY-100);
}
if (missers > 5){
g.drawLine(125,baseY-85,140,baseY-100);
}
if (missers > 6){ // het touw
g.drawLine(175,baseY-100,175,baseY-75);
}
if (missers > 7){ // uw lijk
g.drawOval(170,baseY-75,10,12);
}
if (missers > 8){
g.drawOval(170,baseY-65,15,25);
}
if (missers > 9){ // armen
g.drawLine(160,baseY-65,170,baseY-60);
}
if (missers > 10){
g.drawLine(183,baseY-60,193,baseY-65);
}
if (missers > 11){ // benen
g.drawLine(165,baseY-30,170,baseY-45);
}
if (missers > 12){
g.drawLine(183,baseY-45,193,baseY-30);
}
// Toon de meldingen.
g.drawString( meldTekst, 50, baseY+25 );
g.drawString( toelichting, 25, baseY+45 );
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == bStart){
initGame();
}
if (e.getSource() == bGo){
verwerkBeurt();
// Wis het vakje met de letter.
tfLetter.setText("");
repaint();
}
}
private void verwerkBeurt(){
String s, t;
char a;
s = tfLetter.getText();
a = s.charAt(0);
if (!Character.isLetter(a)){
meldTekst="U mag alleen een letter invullen!";
return;
}
if (s.length()>1){
meldTekst="Een letter tegelijk, svp!";
return;
}
// Is letter al geraden?
t = new String(gwoord);
if (t.indexOf(s) != -1){
meldTekst="Letter is al geraden";
return;
}
// Komt letter in rwoord niet voor?
if (rwoord.indexOf(s) == -1){
meldTekst="";
missers++;
if (missers==DOOD){
meldTekst="U hangt!";
toelichting =
"Klik op herstart voor een nieuwe kans";
}
return;
}
// Vervang punten in gwoord door gevonden letter.
for (int i=0; i<rwoord.length(); i++){
if (rwoord.charAt(i) == a){
gwoord.setCharAt(i, a);
}
}
t = new String(gwoord);
lblGwoord.setText(t);
// Als alle punten ingevuld zijn
// heeft de speler gewonnen.
if (t.indexOf('.') == -1){
meldTekst="U wint!";
return;
}
// Wis melding.
meldTekst="";
}
}