import java.lang.Thread.*; import java.lang.*; import java.applet.*; import java.awt.*; import java.awt.event.*; import java.awt.image.ImageObserver; public class BattleShipApp extends Applet { /** Initialization method that will be called after the applet is loaded * into the browser. */ public static Image meer,untergang,zweierX,dreierX1, dreierX2,viererX,fuenferX; //bilder zum Darstellen public static Play nowPlay; //Object der Spielklasse public static PlayGround playgr; //Object vom Spielgrund public static Button start,stop, help; //Knöpfe zum starten, stoppen, hilfe public static boolean gestartet; public static ImageObserver observer; public static first fi; //Object vom startfenster public void init () { //Appletgroesse setLayout(null); setSize(535,400); setBackground(Color.lightGray); playgr=new PlayGround(getGraphics(),this); //Listener für Applet Mausklick addMouseListener(playgr); //hinzufuegen Action A=new Action(); start=new Button(); // start-Knopf zum Starten des Spieles start.setLabel("Start"); start.setBounds(20,300,75,40); start.setVisible(true); start.addActionListener(A); add(start); stop=new Button(); //stop-Knopf, stoppen des Spieles stop.setLabel("Stop"); stop.setBounds(20,300,75,40); stop.setVisible(false); stop.addActionListener(A); add(stop); help=new Button(); //Hilfsfunktion (vielleicht Frame) help.setLabel("Hilfe"); help.setBounds(20,350,75,40); help.setVisible(true); help.addActionListener(A); add(help); //Laden der Bilder meer=getImage(getCodeBase(),"water.jpg"); untergang=getImage(getCodeBase(),"untergang3.jpg"); zweierX=getImage(getCodeBase(),"kutterX.jpg"); dreierX1=getImage(getCodeBase(),"dreierX1.jpg"); dreierX2=getImage(getCodeBase(),"dreierX2.jpg"); viererX=getImage(getCodeBase(),"viererX.jpg"); fuenferX=getImage(getCodeBase(),"fuenferX.jpg"); gestartet=false; //fi=new first(); //neues Startfenster }//init public void paint(Graphics g){ //zeichnen der Bilder g.drawImage(untergang,0,0,100,75,this); g.drawImage(meer,100,75,this); g.drawImage(meer,320,75,this); g.drawImage(dreierX1,0,95,60,20,this); g.drawImage(viererX,0,115,80,20,this); g.drawImage(dreierX2,0,135,60,20,this); g.drawImage(zweierX,60,135,40,20,this); g.drawImage(fuenferX,0,155,100,20,this); g.drawImage(dreierX1,0,195,60,20,this); g.drawImage(viererX,0,215,80,20,this); g.drawImage(dreierX2,0,235,60,20,this); g.drawImage(zweierX,60,235,40,20,this); g.drawImage(fuenferX,0,255,100,20,this); playgr.oberfläche();//Oberfläche des Applets }//paint //innere Klasse fuer Button-Aktionen class Action implements ActionListener{ public void actionPerformed(ActionEvent event){ String cmd=event.getActionCommand(); System.out.println(event+"\n"+"actionPerformed ausgelöst"); if (cmd.equals("Start")){ //Start gedrueckt fi=new first(); //neues Startfenster repaint(); gestartet=true; System.out.println("start gedrueckt"); start.setVisible(false); stop.setVisible(true); help.setEnabled(false); nowPlay=new Play(); nowPlay.start(); } if (cmd.equals("Stop")){ //Stopgedrueckt gestartet=false; System.out.println("stop gedrueckt"); start.setVisible(true); stop.setVisible(false); help.setEnabled(true); nowPlay.breakPlay(); playgr.drawStatus2("Drücken Sie auf Start!"); } if (cmd.equals("Hilfe")){ //Hilfe gedrueckt System.out.println("Help gedrueckt"); help.setEnabled(false); start.setEnabled(false); new HelpFrame(); } }//actionperformed }//Action }//BattleShipApp class Play extends Thread{ //Klasse zum Spielen, Objecte dieser Klasse laufen als Thread public BattleShip player1,player2; //player1:Spieler player2: Computer public Player one, two; private int xset,yset; //feldindizes boolean xy;//true: x, false: y Maustaste gedrueckt? boolean setShips,abbruch,readyShot,t1isAlive,t2isAlive; public String[] shipname={"","Kutter","Titanic","U-Boot","Kreuzer","Fregatte"}; /** Creates new Play */ public Play() { player1=new BattleShip(); player2=new BattleShip(); one=new Player(BattleShipApp.fi.getName()); two=new Player("Computer"); setShips=false; xset=yset=-1; abbruch=false; readyShot=false; //true: bereit zum Schiessen false: nicht t1isAlive=false; t2isAlive=false; }//Konstruktor public void breakPlay(){//Aufruf zum abbrechen des Spieles t1isAlive=t2isAlive=false; abbruch=true; setShips=true; readyShot=false; System.out.println("breakPlay:"+abbruch); }//breakPlay public boolean setoneShip(int shipsetted){ //setzen eines Schiffes des Spielers, //aufgerufen bei entsprechender MausAktion System.out.println("Spieler setzt Schiff"); boolean status=false; //Spieler setzt ein Schiff if (xy){ //setzen in x-Richtung if (player1.placeX(xset,yset,shipsetted+1)){ BattleShipApp.playgr.drawPlayerShipX(shipsetted+1,xset,yset); status=true;; } } else{ //setzen in Y-Richtung if (player1.placeY(xset,yset,shipsetted+1)){ System.out.println("Y setzen möglich"); BattleShipApp.playgr.drawPlayerShipY(shipsetted+1,xset,yset); status=true; } } if ((shipsetted==4)&&(status)){ System.out.println("Spieler hat Schiffe gesetzt"); setShips=true; BattleShipApp.playgr.drawStatus2(one.getName()+" hat alle Schiffe gesetzt"); } if ((status)&&(shipsetted<4)) BattleShipApp.playgr.drawStatus(one.getName()+" "+ shipname[shipsetted+2]+ " setzen!"); return status; }//setoneShip private void setShip(){ //computer setzt Schiffe und wartet auf Spieler System.out.println("setzen der Schiffe"); int set=0;//Anzahl der gesetzten Schiffe System.out.println("Computer setzt Schiffe"); while ((set<5)&&(!abbruch)){ xset=(int) Math.round(9*Math.random()); //Auswahl durch Zufall yset=(int) Math.round(9*Math.random()); System.out.println(xset+","+yset); if (Math.round(1*Math.random())==0) xy=false; else xy=true; if (xy){ //setzen in X-Richtung if (player2.placeX(xset,yset,set+1)){ set++; BattleShipApp.playgr.drawStatus("Computer hat "+shipname[set]+"gesetzt"); } } else{ //setzen in Y-Richtung if (player2.placeY(xset,yset,set+1)){ set++; BattleShipApp.playgr.drawStatus("Computer hat "+shipname[set]+"gesetzt"); } } if (abbruch) break; } //Computer hat jetzt Schiffe und muss warten bis Spileer gesetzt System.out.println("Computer hat Schiffe gesetzt"); BattleShipApp.playgr.drawStatus2("Computer hat alle Schiffe gesetzt"); BattleShipApp.playgr.drawStatus(one.getName()+" "+shipname[1]+" setzen!"); System.out.println("Warten auf setzen der Schiffe"); while ((!setShips)&&(!abbruch)){ try{ this.sleep(100); }catch(Exception e){} } System.out.println("Warten beendet"); }//setShip public void xSet(int x){ //bestimmen des X-Indexes im Feld xset=x; } public void ySet(int y){ //bestimmen des Y-Indexes im Feld yset=y; } public void tryHit(BattleShip player){ //Versuch einen Treffer zu erzielen int x,y,treffer; if (player==player2){//Computer System.out.println("Computer versucht zu schiessen"); do{ if (abbruch) break; x=(int) Math.round(9*Math.random()); y=(int) Math.round(9*Math.random()); treffer=player1.hit(x,y);//treffer==typ 1..5 0: Wasser -1: schon geschossen if (treffer>=0){//ein Schiff getroffen two.incShot(); if (treffer>0){ BattleShipApp.playgr.drawShotShipComputer(x,y); two.incHit(); } if (treffer==0) BattleShipApp.playgr.drawShotWaterComputer(x,y); if (player1.sunk(treffer)){ two.incSink(); BattleShipApp.playgr.clearShip(treffer,2); BattleShipApp.playgr.drawStatus("Computer hat "+shipname[treffer]+" versenkt"); try{ wait(40000); } catch(Exception e){} }//if }//if }while(treffer<0); //wiederholen bis Schuss implements Wasser oder Treffer System.out.println("Computer hat geschossen"); BattleShipApp.playgr.drawSpielStand(100,276,two); }//if else{ //spieler versucht Schuss System.out.println("Spieler versucht Treffer"); treffer=player2.hit(xset,yset);//treffer==typ 1..5 0: Wasser -1: schon geschossen if (treffer>=0){//ein Schiff getroffen one.incShot(); if (treffer>0){ BattleShipApp.playgr.drawShotShipPlayer(xset,yset); one.incHit(); BattleShipApp.playgr.drawStatus(one.getName()+" hat getroffen"); } if (treffer==0){ BattleShipApp.playgr.drawShotWaterPlayer(xset,yset); BattleShipApp.playgr.drawStatus(one.getName()+" hat daneben getroffen"); } if (player2.sunk(treffer)){ one.incSink(); ///////////////////////////////////////////////////////////////////////////////////////////////////////// if (player2.isDirectedOnX(treffer)) { BattleShipApp.playgr.drawComputerShipX(treffer,player2.getStartPosOfShipX(treffer),player2.getStartPosOfShipY(treffer)); } else { BattleShipApp.playgr.drawComputerShipY(treffer,player2.getStartPosOfShipX(treffer),player2.getStartPosOfShipY(treffer)); } ///////////////////////////////////////////////////////////////////////////////////////////////////////// BattleShipApp.playgr.clearShip(treffer,1); BattleShipApp.playgr.drawStatus(one.getName()+" hat "+shipname[treffer]+" versenkt"); try{ wait(40000); } catch(Exception e){} } readyShot=false; System.out.println("Spieler hat Treffer"); } else{ readyShot=true; System.out.println("Spieler hat dort schon hingeschossen!"); BattleShipApp.playgr.drawStatus(one.getName()+" hat hierauf schon geschossen!"); } BattleShipApp.playgr.drawSpielStand(320,276,one); }//else }//tryHit public void run() { //run des Threads System.out.println("Start des Spieles"); BattleShipApp.playgr.drawRest(); BattleShipApp.playgr.drawStatus2("Start des Spieles"); t1isAlive=true; System.out.println("run läuft"); if (t1isAlive){ System.out.println("t1 ist angelaufen"); setShip();//Computer setzt Schiffe } t1isAlive=false; System.out.println("t1 beendet!"); if (!abbruch){ t2isAlive=true; } if (t2isAlive){ System.out.println(""); System.out.println("jetzt Beginn des Gefechts"); boolean los; if (Math.round(1*Math.random())==0) los=false; else los=true; //wenn ja Computer zuerst if (los){ System.out.println("Computer setzt ersten Schuss"); BattleShipApp.playgr.drawStatus("Computer beginnt Seeschlacht"); //BattleShipApp.playgr.drawStatus2("Computer schiesst"); tryHit(player2); BattleShipApp.playgr.drawStatus2("Computer hat geschossen! "+one.getName()+" schiessen!"); } else{ BattleShipApp.playgr.drawStatus(BattleShipApp.fi.getName()+" beginnt Seeschlacht"); BattleShipApp.playgr.drawStatus2(one.getName()+" schiessen!"); System.out.println("Spieler setzt ersten Schuss"); } while (!one.getWin()&&!two.getWin()){ //wenn noch keiner gewonnen //Computer und Spiler abwechelnd schiessen //wer zuerst anfängt vorher auslosen readyShot=true;//tryHit(player1); Spieler while (readyShot){ try{ Thread.sleep(100);}catch(Exception e){} if (abbruch) break; } System.out.println("Spieler hat geschossen"); if (!one.getWin()&&(!abbruch)){ tryHit(player2); System.out.println("Computer hat geschossen"); } BattleShipApp.playgr.drawStatus2("Computer hat geschossen! "+one.getName()+" schiessen!"); if (abbruch) break; }//while if (one.getWin()) BattleShipApp.playgr.drawStatus(one.getName()+" hat gewonnen!"); if (two.getWin()) BattleShipApp.playgr.drawStatus("Computer hat gewonnen"); }//t2 if (abbruch) BattleShipApp.playgr.drawStatus("Spiel abgebrochen"); BattleShipApp.playgr.drawStatus2("Drücken Sie auf Start!"); System.out.println("run zu Ende"); t1isAlive=false; t2isAlive=false; BattleShipApp.gestartet=false; BattleShipApp.start.setVisible(true); BattleShipApp.stop.setVisible(false); BattleShipApp.help.setEnabled(true); BattleShipApp.playgr.shipsetted=0; }//run }//Ende Play class PlayGround extends MouseAdapter { private ImageObserver observer; public int xFelder, yFelder; //Elementanzahl int startX, startY, endeX, endeY, breiteX, hoeheY; //Positionen int kaestchenBreiteX, kaestchenHoeheY; public int shipsetted; //fuer mouseClicked private Color ships,c1; private Graphics g; public PlayGround(Graphics g,ImageObserver observer) { this.g=g; this.observer=observer; xFelder=10; yFelder=10; kaestchenBreiteX=10; kaestchenHoeheY=10; shipsetted=0; ships=new Color(0,200,255); c1=new Color(0,128,255); }//Konstruktor //Spielfeld zeichnen: (frei skalier- und platzierbar) public void drawPlayGround(int startX, int startY, int endeX, int endeY) { drawPlayGround(startX, startY, endeX, endeY, xFelder, yFelder); }//drawPlayGround public void drawPlayGround(int startX, int startY, int endeX, int endeY, int xFelder, int yFelder) { this.xFelder=xFelder; this.yFelder=yFelder; this.startX=startX; this.startY=startY; this.endeX=endeX; this.endeY=endeY; breiteX=endeX-startX; hoeheY=endeY-startY; kaestchenBreiteX=(breiteX-20)/(2*xFelder); kaestchenHoeheY=(hoeheY)/yFelder; g.setColor(Color.darkGray); g.drawRect(startX, startY, breiteX/2-10, hoeheY); g.drawRect(startX+breiteX/2+10, startY, breiteX/2-10, hoeheY); for (int index=1; index=0)&&(getX(event.getX())=5)&&(BattleShipApp.nowPlay.readyShot)){ BattleShipApp.nowPlay.readyShot=false; BattleShipApp.nowPlay.xSet(indexX); BattleShipApp.nowPlay.ySet(indexY); BattleShipApp.nowPlay.tryHit(BattleShipApp.nowPlay.player1); } } else { //Spielerfeld System.out.println("PLAYER: "+getX(event.getX())+"/"+getY(event.getY())); if ((shipsetted<5)){ System.out.println("t1 ist am Laufen und Maus gedrueckt"); BattleShipApp.nowPlay.xSet(indexX); BattleShipApp.nowPlay.ySet(indexY); BattleShipApp.nowPlay.xy=event.isMetaDown(); if (BattleShipApp.nowPlay.setoneShip(shipsetted)){ shipsetted++; } } } } } }//mouseClicked }//PlayGround class Player{ //hit: Treffer, die Player gemacht hat //sink: anzahl der Schiffe, die Player versenkt hat //shot: anzahl der Schuesse //win: Praedikat, ob gewonnen. private int hit,sink,shot; private boolean win; private String name; /** Creates new Player */ public Player(String name) { hit=sink=shot=0; win=false; this.name=name; } public String getName() { return name; } public int getHit() { return hit; } public int getSink() { return sink; } public int getShot() { return shot; } public boolean getWin() { return win; } public void incHit() { this.hit++; } public void incShot() { this.shot++; } public void incSink() { this.sink++; if (this.sink==5) this.win=true; } }//Player class BattleShip extends java.lang.Object { public int[] hitCounterByType=new int [6]; public static int[] lengthOfShips={0,2,3,3,4,5}; public int[][] arrayOfShips; public boolean[][] alreadyShut; private int[] startPositionOfShipsX=new int[6]; private int[] startPositionOfShipsY=new int[6]; private boolean[] shipOrientationY=new boolean[6]; private int defaultSizeX=10; private int defaultSizeY=10; private boolean kontrolle=true; public BattleShip() { arrayOfShips=new int[defaultSizeX][defaultSizeY]; alreadyShut=new boolean[defaultSizeX][defaultSizeY]; } public BattleShip(int x, int y) { defaultSizeX=x; defaultSizeY=y; arrayOfShips=new int[x][y]; alreadyShut=new boolean[x][y]; } private boolean enoughPlace(int x, int y, int typ, boolean waagerecht) { if (kontrolle) System.out.print("x-Position, "); if (x>=defaultSizeX) return false; if (kontrolle) System.out.print("y-Position, "); if (y>=defaultSizeY) return false; if (kontrolle) System.out.print("Start, "); if (arrayOfShips[x][y]!=0) return false; if (waagerecht) { if (kontrolle) System.out.print("x-Laenge, "); if (x+lengthOfShips[typ]-1>=defaultSizeX) return false; if (kontrolle) System.out.print("x-Laenge belegt, "); for (int index=0; index=defaultSizeY) return false; if (kontrolle) System.out.print("y-Laenge belegt, "); for (int index=0; index5)) return false; if (hitCounterByType[typ]==lengthOfShips[typ]) return true; return false; } public int hit(int x, int y) { //gibt Typ des Treffers zurueck if ((x>=defaultSizeX)||(y>=defaultSizeY)) { System.out.println("\nIndexueberschreitung des Array in BattleShip.class\n"); return 0; } int temp=arrayOfShips[x][y]; if (alreadyShut[x][y]) return -1; if (!alreadyShut[x][y]) hitCounterByType[temp]++; alreadyShut[x][y]=true; return (temp); } public int getHit(int typ) { //gibt Anzahl der Treffer eines Typs zurueck return hitCounterByType[typ]; } public String toString() { //Textausgabe zur internen Test String output=""; for (int index1=0; index110){ name=""; for (int i=0; i<10; i++) name+=text.getText().charAt(i); } System.out.println(name); dispose(); BattleShipApp.playgr.drawRest(); BattleShipApp.start.setEnabled(true); BattleShipApp.help.setEnabled(true); } public void paint(Graphics g){ } /** * @param args the command line arguments */ public static void main (String args[]) { new first(); } // Variables declaration - do not modify // End of variables declaration public void actionPerformed(final java.awt.event.ActionEvent p1){ exitForm(); } }//first class HelpFrame extends java.awt.Frame implements ActionListener { private Button close; private TextArea text; private Label label,label2,label3; /** Creates new form HelpFrame */ public HelpFrame() { this.setTitle("Hilfe zum Spiel"); initComponents (); setSize(500,450); setLayout(null); setBackground(Color.lightGray); initComponents (); initLabel(); initArea(); close=new Button(); close.setLabel("Beenden"); close.setBounds(160,395,180,30); close.addActionListener(this); add(close); show(); System.out.println("Fenster geöffnet"); }//Konstruktor private void initArea(){ text=new TextArea("Das Spiel Schiffe versenken\n\n",100,1000,TextArea.SCROLLBARS_BOTH); text.setBounds(10,70,480,250); text.setEditable(false); text.append("Für die Vorlesung Algorithmen und Datenstrukturen ist im Zeitraum von 04.05. - 18.06.2001 \neine Belegarbeit anzufertigen."+ "Wir haben uns für die Programmierung des Spieles\nSchiffe versenken entschieden.\n\n"+ "Wir, das sind die Informatikstudenten im 2. Semester: \n"+ " Daniel Hakenjos e-mail: daniel.hakenjos@student.uni-magdeburg.de\n"+ " Seabstian Nusser e-mail: sebastian.nusser@student.uni-magdeburg.de\n\n\n"+ "Die Aufgabenstellung\n\n\n"+ "Visualisieren Sie folgendes Spiel:\n\n"+ " - Dieses Spiel wird normalerweise von zwei Personen mit Papier und Bleistift gespielt.\n"+ " Hier ist jedoch der Computer einer der beiden Spieler. Er hält auch den Spielstand fest und \n"+ " zeigt ihn an. Wenn der Computer an der Reihe ist, spielt er immer absolut zufällig. \n"+ " Das Spiel ist also sehr vereinfacht.\n"+ " - Zwei Gitter 10x10 werden am Bildschirm angezeigt. Das Heimatgitter stellt einen Ozean dar \n"+ " und zeigt die Position Ihre Schlachtschiffe an. Das Feindgitter zeigt, wohin Sie \n"+ " einen Schuss abgefeuert haben, aber Sie können den Feind nicht sehen. Sie wissen nicht, \n"+ " wohin der Computer die Schiffe platziert hat. Und der Computer weiß nicht, \n"+ " wo sich Ihre Schiffe befinden.\n"+ " - Zu Beginn platzieren Sie irgendwo in Ihrem Gitter ein Fünfer-, ein Vierer-, \n"+ " zwei Dreier- und ein Zweier-Schlachtschiff. Das geschieht durch das Anklicken der Quadrate \n"+ " mit der Maus. Der Computer platziert seine zehn Schiffe ebenfalls irgendwo im Zielgitter. \n"+ " Er platziert seine Schiffe zufällig, aber Sie können selbstverständlich strategisch vorgehen.\n"+ " - Der Computer bestimmt zufällig, wer anfängt. Sie und der Computer spielen dann abwechselnd.\n"+ " - Sie feuern einen Schuss auf den Feind (den Computer) ab, indem Sie das entsprechende \n"+ " Quadrat des Zielgitters anklicken. der Computer zeigt die Position auf dem Gitter an, \n"+ " so dass Sie sehen können, wohin Sie Ihre Schüsse abgegeben haben. der Computer zeigt an, \n"+ " ob ein Schiff versenkt wurde oder nicht.\n"+ " - Danach ist der Computer dran. Obwohl er die Positionsdaten Ihrer Schiffe enthält, \n"+ " benutzt er die Daten nicht und entscheidet sich zufällig, wohin er auf Ihrem Gitter feuert. \n"+ " Aber der Computer erinnert sich daran, wohin er bereits gefeuert hat.\n"+ " - Das Spiel wird solange fortgesetzt, bis ein Spieler alle feindlichen Schiffe versenkt hat. \n"+ "\n\n"+ "Um \"Schiffe versenken\" zu spielen:\n\n"+ "Wenn das Applet gestartet wuirde wird ein Fenster geöffnet, in dem Sie Ihren Namen \n"+ "eingeben müssen! Danach können Sie das Spiel sofort beginnen oder sich diese Hilfe hier \n"+ "anschauen. Wie es zu spielen ist, wurde ja schon in der Aufgabenstrellung erklärt. \n"+ "Als erstes setzt der Computer seine Flotte und danach müssen sie Ihre Flotte setzen. \n\n"+ "Eine Flotte besteht aus fuenf Schiffen verschiedener Länge:\n"+ " - Kutter Länge 2 - Titanic Länge 3 - U-Boot Länge 3\n"+ " - Kreuzer Länge 4 - Fregatte Länge 5\n\n"+ "Diese fünf Schiffe setzen Sie in der angegeben Reihenfolge: Kutter, Titanic, U-Boot, \n"+ "Kreuzer, Fregatte, indem Sie mit der Maustaste auf ein entsprechendes Quadrat, \n"+ "welches das Anfangsquadrat des Schiffes darstellt. Wenn Sie die rechte Maustaste drücken, \n"+ "wird das Schiff in horizontaler Richtung und wenn Sie die linke Maustaste drücken, \n"+ "wird es in vertiklaer Ausrichtung positioniert. Nun kann das Spiel begonnen, wer anfängt, \n"+ "wird vom Rechner ausgelost. Das Gefecht wird solange fortgesetzt, bis entweder Sie \n"+ "oder der Computer gewonnen haben. Oder Sie entscheiden sich durch Drücken \n"+ "des Stop-Buttons für einen Abbruch. Sie werden feststellen dieses Spiel wird Sie begeistern , \n"+ "denn Sie werden sehr häufig gewinnen! \n"+ "Ihr Gegner, der Computer, wird rein zufällig einen Schuss abgeben.\n\n"+ "Aus diesem Grunde hoffen wir, daß es Ihnen gefallen wird!\n\n"+ "Viel Vergnügen :-) "); add(text); }//initText private void initLabel(){ label=new Label(); label.setForeground(Color.blue); label.setFont(new Font("SansSerif",Font.PLAIN,25)); label.setText(" Hilfe zum Spiel - Schiffe versenken"); label.setBounds(20,30,500,30); add(label); }//initLabel public void paint(Graphics g){ g.setColor(Color.black); g.setFont(new Font("Monospaced",Font.BOLD,15)); g.drawString("Die Flotte der Spieler",20,340); g.drawString("Kutter",20,360); g.drawString("Titanic",100,360); g.drawString("U-Boot",190,360); g.drawString("Kreuzer",280,360); g.drawString("Fregatte",380,360); g.drawImage(BattleShipApp.zweierX,20,370,40,20,this); g.drawImage(BattleShipApp.dreierX1,100,370,60,20,this); g.drawImage(BattleShipApp.dreierX2,190,370,60,20,this); g.drawImage(BattleShipApp.viererX,280,370,80,20,this); g.drawImage(BattleShipApp.fuenferX,380,370,100,20,this); }//paint private void initComponents () { addWindowListener (new java.awt.event.WindowAdapter () { public void windowClosing (java.awt.event.WindowEvent evt) { exitForm (); } } ); }//initComponents /** Exit the Application */ private void exitForm() { BattleShipApp.start.setEnabled(true); BattleShipApp.help.setEnabled(true); dispose(); }//exitForm public static void main (String args[]) { new HelpFrame(); }//main public void actionPerformed(final java.awt.event.ActionEvent p1){ exitForm(); }//actionPerformed }//HelpFrame