Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
import java.awt.*;
import java.awt.event.*;
import java.io.*; // für Dateioperationen
import javax.swing.JFrame;
public class Hangman extends Panel {
private static final long serialVersionUID = 1L;
// Globale Variablen
final static int WND_B=425, WND_H=350;
final int SX=50, SY=50;
RandomAccessFile file;
String myword=null; // das zu erratene wort
char xyword[]; // das ungelöste Wort
char probed[];
char notprobed[];
char alphab[]={'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',
'Ä','Ö','Ü','ß'};
int mistakes=0; // Anzahl der Fehler
int tries=0; // Anzahl der Versuche
KL CONTROL;
char c;
public Hangman() { // Hauptroutine
String stmp=new String();
try {
int wordcount=0; // neuer Integer für Wörterzahl
int wordseek=0; // ~ für Zielwort-Position
RandomAccessFile f=new RandomAccessFile("hangman.dat","r");
while ((stmp=f.readLine())!=null) { // solange das, was wir lesen, noch sichtbar ist
if (stmp.charAt(0) != '#') { // und wenn kein '#' am anfang steht
wordcount++; // zähle es als Wort
}
}
if (wordcount==0) {
System.out.println("ACHTUNG! In der Datendatei sind keine gültigen Wörter zu finden.");
System.exit(0);
}
System.out.println("Woerter in Datendatei: "+wordcount); // Statusbericht
while (wordseek==0) { // Solange wordseek noch 0 ist, tue ...
wordseek=(int)(Math.random()*wordcount)+1; // hol' Dir einen Integer-Wert
}
System.out.print("Ausgewaehltes Wort: #"+wordseek); // Statusbericht
f.seek(0); // Position auf Dateianfang setzen
wordcount=0; // Wieder auf NULL
while ((stmp=f.readLine())!=null) { // und das ganze von vorne
if (stmp.charAt(0) != '#') {
wordcount++;
if (wordcount==wordseek) { // wenn an der Position, die wir suchen ...
myword=stmp; // setze myword auf gerade gelesenen String
break;
}
}
}
f.close(); // Datei wieder schließen
}
catch(IOException ioe) { // Falls ein Fehler auftreten sollte Fehlermeldung ausgeben
System.out.println("IOException: "+ioe.toString()); // Fehlermeldung
System.out.println("\n\nFehler beim Bearbeiten der Datendatei. Stellen Sie sicher, daß die Datei HANGMAN.DAT auch existiert und lesbar ist.");
System.exit(0);
}
CONTROL=new KL(); // neuer KeyListener: CONTROL
addKeyListener(CONTROL); // hinzufügen
xyword=new char[myword.length()]; // array erstellen
for (int i=0;i<myword.length();i++) { // array initialisieren
xyword[i]='_';
}
probed=new char[alphab.length]; // array erstellen
notprobed=new char[alphab.length];
for (int i=0;i<alphab.length;i++) { // array initialisieren
probed[i]='-';
notprobed[i]=alphab[i];
}
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g) { // die Grafiken
Toolkit tk=Toolkit.getDefaultToolkit();
// g.drawString("Datensaetze: "+maxdat,40,350);
// g.drawString("Wort: "+myword,40,200);
// g.drawString("Zeichen: "+c,40,230);
g.setColor(Color.white); // Farbe auf Weiß
g.fillRect(0,0,WND_B,WND_H); // Fenster Weiß machen
g.setColor(Color.black); // Farbe auf Schwaz setzen
g.drawImage(tk.getImage("images/bg.gif"),1,1,this);
g.drawString("Wort: "+new String(xyword),40,215);
if (mistakes!=-1) {
g.drawString("Buchstaben: ",40,260);
for (int i=0;i<alphab.length;i++) {
g.drawChars(probed,i,1,118+i*8,260);
g.drawChars(notprobed,i,1,118+i*8,275);
}
g.drawString("Fehler: "+mistakes,40,230);
}
UpdateHangMan(g); // Hangman updaten
}
public void UpdateHangMan(Graphics g) {
Toolkit tk=Toolkit.getDefaultToolkit(); // Toolkit (für Grafikdatei-Support) zuweisen
switch(mistakes) { // CASE mistakes of ...
case 6:
g.drawImage(tk.getImage("images/hm6.gif"),SX,SY,this);
g.setColor(Color.red);
g.drawString(">>> VERLOREN <<<",WND_B/2-70,WND_H/2+10);
g.setColor(Color.white);
g.drawString("Das gesuchte Wort war '"+myword+"'!",WND_B/4-100,WND_H/2-10);
removeKeyListener(CONTROL); // Tastenkontrolle abschalten
break;
case 5:
g.drawImage(tk.getImage("images/hm5.gif"),SX,SY,this);
break;
case 4:
g.drawImage(tk.getImage("images/hm4.gif"),SX,SY,this);
break;
case 3:
g.drawImage(tk.getImage("images/hm3.gif"),SX,SY,this);
break;
case 2:
g.drawImage(tk.getImage("images/hm2.gif"),SX,SY,this);
break;
case 1:
g.drawImage(tk.getImage("images/hm1.gif"),SX,SY,this);
break;
case 0:
g.drawImage(tk.getImage("images/hm0.gif"),SX,SY,this);
break;
case -1:
g.drawImage(tk.getImage("images/hm.gif"),SX,SY,this);
g.setColor(Color.green);
g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
g.drawString(">>> GEWONNEN <<<",WND_B/2-70,WND_H/2+10);
removeKeyListener(CONTROL);
break;
}
}
class KL implements KeyListener {
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) { }
public void keyTyped(KeyEvent e) {
c=e.getKeyChar(); // Taste holen
c=Character.toUpperCase(c); // Buchstabe(?) evtl. GROß machen
int i;
boolean status=false; // Booleans
boolean check=false; // für versch. Status-Werte
for (i=0;i<alphab.length;i++) {
if (c==alphab[i]) { // wenn c = einer der Buchstaben des Alphabets ist ...
if (probed[i]!=c) probed[i]=c; else check=true; // und der noch nicht vorher getippt wurde, dann ... u.s.w.
if (notprobed[i]==c) notprobed[i]='-';
}
}
int underscores=0; // Integer für Anzahl der "_" im bisherigen Wort
for (i=0;i<myword.length();i++) {
if (c==Character.toUpperCase(myword.charAt(i))) {
xyword[i]=myword.charAt(i);
status=true;
}
if (xyword[i]=='_') underscores++;
}
if (!status && !check) mistakes++; // wenn der Buchstabe Falsch ist und nicht schon einmal getippt wurde mistakes+1
if (!check) tries++; // solange kein doppelter Tip: tries+1;
if (underscores==0 || mistakes>=6) {
System.out.println(" ("+myword+")");
System.out.println("Anzahl Versuche: "+tries+" davon falsch: "+mistakes);
System.out.println("Getippte Buchstaben: "+new String(probed));
System.out.println("Anzahl versch. Buchstaben im Wort: "+(tries-mistakes));
System.out.println("Trefferquote: "+(((tries-mistakes)*100)/tries)+"%");
}
if (underscores==0) mistakes=-1; // wenn keine fehlenden Zeichen im Lösungswort ...
if (mistakes>=6) mistakes=6; // wenn mehr als 5 Fehler gemacht wurden
repaint(); // Grafikfenster neuzeichnen
}
}
private static void initializeNewWindow(){
JFrame frame= new JFrame(); // neues Fenster
frame.addWindowListener(new WindowAdapter() { // WindowListener hinzufügen
public void windowClosing(WindowEvent e) { // wenn auf X geklickt:
System.out.println();
System.exit(0); // Programm beenden.
}
});
frame.setLayout(new BorderLayout());
Panel buttonPanel = new Panel();
buttonPanel.setLayout(new FlowLayout());
final JFrame f = frame;
Button button1 = new Button("Nochmal");
button1.setPreferredSize(new Dimension(80,20));
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.print("Nochmal...");
f.dispose();
initializeNewWindow();
}
});
Button button2 = new Button("Beenden");
button2.setPreferredSize(new Dimension(80,20));
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.print("Bis zum nächsten mal...");
System.exit(0);
}
});
buttonPanel.add(button1);
buttonPanel.add(button2);
frame.add(buttonPanel,BorderLayout.SOUTH);
Hangman panel = new Hangman();
frame.add(panel,BorderLayout.CENTER);
frame.setTitle(".:Hangman:."); // Titel setzen
frame.setSize(WND_B, WND_H); // Größe setzen
frame.setVisible(true); // auf den Bildschirm
panel.requestFocusInWindow();
}
public static void main(String args[]) {
initializeNewWindow();
}
}
JFrame frame= new JFrame(); // neues Fenster
frame.addWindowListener(new WindowAdapter() { // WindowListener hinzufügen
public void windowClosing(WindowEvent e) { // wenn auf X geklickt:
System.out.println();
System.exit(0); // Programm beenden.
}
});
frame.setLayout(new BorderLayout());
Panel buttonPanel = new Panel();
buttonPanel.setLayout(new FlowLayout());
buttonpanel.setBackground(color.black);
final JFrame f = frame;
Button button1 = new Button("Nochmal");
button1.setPreferredSize(new Dimension(80,20));
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.print("Nochmal...");
f.dispose();
initializeNewWindow();
}
});