Danke für die antworten, leider haben wir hier so ein kurs wo man alles nicht so deutlich erklärt bekommt. Ich möchte das Fach java hautsache bestehen gut oder schlecht ist mir nicht so wichtig nur möchte ich nicht durchfallen.
Ich denke mal das alle hier im forum hauptsächlich Männer sind für euch ist es vileicht leichter was zu verstehen, mir fällt es verdammt schwer.
Vileicht fehlt mir auch das logische denken für java, naja hab zurzeit einiges geschrieben werde das bald in das forum posten da ich einige fragen habe.
import java.lang.Thread.*;
import java.lang.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.ImageObserver;
public class schiffeversenken extends Applet {
private static final long serialVersionUID = 1L;
public static Image meer,untergang,zweierX,dreierX1,
dreierX2,viererX,fuenferX;
public static Play nowPlay; // Spielklasse
public static PlayGround playgr; // Spielfeld
public static Button start,stop, help; //Knöpfe zum starten, stoppen, hilfe
public static boolean gestartet;
public static first fi; // startfenster
public void init () {
setLayout(null);
setSize(635,400);
setBackground(Color.yellow);
playgr=new PlayGround(getGraphics(),this);
addMouseListener(playgr);
Action A=new Action();
start=new Button(); // Spiel starten
start.setLabel("Start");
start.setBounds(0,10,70,40);
start.setVisible(true);
start.addActionListener(A);
add(start);
stop=new Button(); // spiel stoppen
stop.setLabel("Stop");
stop.setBounds(20,300,75,40);
stop.setVisible(false);
stop.addActionListener(A);
add(stop);
help=new Button(); // Hilfe tast
help.setLabel("Hilfe");
help.setBounds(550,10,75,40);
help.setVisible(true);
help.addActionListener(A);
add(help);
}
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
}
//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")){
gestartet=false;
System.out.println("stop gedrueckt");
start.setVisible(true);
stop.setVisible(false);
help.setEnabled(true);
playgr.drawStatus2("Drücken Sie auf Start!");
}
if (cmd.equals("Hilfe")){
System.out.println("Help gedrueckt");
help.setEnabled(false);
start.setEnabled(false);
new HelpFrame();
}
}
}
}
class Play extends Thread{
//Klasse zum Spielen
public BattleShip player1,player2; //player1:Spieler player2: Hilal
public Player one, two;
private int xset,yset;
boolean xy;
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(schiffeversenken.fi.getName());
two=new Player("Hilal");
setShips=false;
xset=yset=-1;
abbruch=false;
readyShot=false; //true: bereit zum Schiessen false: nicht
t1isAlive=false;
t2isAlive=false;
}//Konstruktor
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)){
schiffeversenken.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");
schiffeversenken.playgr.drawPlayerShipY(shipsetted+1,xset,yset);
status=true;
}
}
if ((shipsetted==4)&&(status)){
System.out.println("Spieler hat Schiffe gesetzt");
setShips=true;
schiffeversenken.playgr.drawStatus2(one.getName()+" hat alle Schiffe gesetzt");
}
if ((status)&&(shipsetted<4))
schiffeversenken.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
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++;
schiffeversenken.playgr.drawStatus("Computer hat "+shipname[set]+"gesetzt");
}
}
else{ //setzen in Y-Richtung
if (player2.placeY(xset,yset,set+1)){
set++;
schiffeversenken.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");
schiffeversenken.playgr.drawStatus2("Computer hat alle Schiffe gesetzt");
schiffeversenken.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){
schiffeversenken.playgr.drawShotShipComputer(x,y);
two.incHit();
}
if (treffer==0)
schiffeversenken.playgr.drawShotWaterComputer(x,y);
if (player1.sunk(treffer)){
two.incSink();
schiffeversenken.playgr.clearShip(treffer,2);
schiffeversenken.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");
schiffeversenken.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){
schiffeversenken.playgr.drawShotShipPlayer(xset,yset);
one.incHit();
schiffeversenken.playgr.drawStatus(one.getName()+" hat getroffen");
}
if (treffer==0){
schiffeversenken.playgr.drawShotWaterPlayer(xset,yset);
schiffeversenken.playgr.drawStatus(one.getName()+" hat daneben getroffen");
}
if (player2.sunk(treffer)){
one.incSink();
if (player2.isDirectedOnX(treffer)) {
schiffeversenken.playgr.drawComputerShipX(treffer,player2.getStartPosOfShipX(treffer),player2.getStartPosOfShipY(treffer));
}
else {
schiffeversenken.playgr.drawComputerShipY(treffer,player2.getStartPosOfShipX(treffer),player2.getStartPosOfShipY(treffer));
}
schiffeversenken.playgr.clearShip(treffer,1);
schiffeversenken.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!");
schiffeversenken.playgr.drawStatus(one.getName()+" hat hierauf schon geschossen!");
}
schiffeversenken.playgr.drawSpielStand(320,276,one);
}//else
}//tryHit
public void run() {
//run des Threads
System.out.println("Start des Spieles");
schiffeversenken.playgr.drawRest();
schiffeversenken.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");
schiffeversenken.playgr.drawStatus("Computer beginnt Seeschlacht");
//BattleShipApp.playgr.drawStatus2("Computer schiesst");
tryHit(player2);
schiffeversenken.playgr.drawStatus2("Computer hat geschossen! "+one.getName()+" schiessen!");
}
else{
schiffeversenken.playgr.drawStatus(schiffeversenken.fi.getName()+" beginnt Seeschlacht");
schiffeversenken.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");
}
schiffeversenken.playgr.drawStatus2("Computer hat geschossen! "+one.getName()+" schiessen!");
if (abbruch) break;
}//while
if (one.getWin())
schiffeversenken.playgr.drawStatus(one.getName()+" hat gewonnen!");
if (two.getWin())
schiffeversenken.playgr.drawStatus("Computer hat gewonnen");
}//t2
if (abbruch)
schiffeversenken.playgr.drawStatus("Spiel abgebrochen");
schiffeversenken.playgr.drawStatus2("Drücken Sie auf Start!");
System.out.println("run zu Ende");
t1isAlive=false;
t2isAlive=false;
schiffeversenken.gestartet=false;
schiffeversenken.start.setVisible(true);
schiffeversenken.stop.setVisible(false);
schiffeversenken.help.setEnabled(true);
schiffeversenken.playgr.shipsetted=0;
}
}
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<xFelder; index++) {
g.drawLine(startX+index*kaestchenBreiteX, startY, startX+index*kaestchenBreiteX, endeY);
g.drawLine(startX+breiteX/2+10+index*kaestchenBreiteX, startY, startX+breiteX/2+10+index*kaestchenBreiteX, endeY);
}
for (int index=1; index<yFelder; index++) {
g.drawLine(startX, startY+index*kaestchenHoeheY, startX+breiteX/2-10, startY+index*kaestchenHoeheY);
g.drawLine(startX+breiteX/2+10, startY+index*kaestchenHoeheY, endeX, startY+index*kaestchenHoeheY);
}
}//drawPlayGround
public int getX(int posX) {
//bestimmen X-Index
if ((startX<posX)&&(posX<startX+breiteX/2-10)) return (posX-startX)/kaestchenBreiteX;
if ((startX+breiteX/2+10<posX)&&(posX<endeX)) return -(startX+breiteX/2+10-posX)/kaestchenBreiteX;
return -1;
}//getX
public int getY(int posY) {
//bestimmen Y-Index
if ((startY<posY)&&(posY<endeY)) return (posY-startY)/kaestchenHoeheY;
return -1;
}//getY
private void drawFilledOval(int x, int y, boolean player) {
int drawX=startX+x*kaestchenBreiteX+kaestchenBreiteX/4;
int drawY=startY+y*kaestchenHoeheY+kaestchenHoeheY/4;
if (player) {
g.fillOval(drawX,drawY,kaestchenBreiteX/2,kaestchenHoeheY/2);
}
else {
g.fillOval(drawX+breiteX/2+10,drawY,kaestchenBreiteX/2,kaestchenHoeheY/2);
}
g.setColor(Color.white);
if (player) {
g.drawOval(drawX,drawY,kaestchenBreiteX/2,kaestchenHoeheY/2);
}
else {
g.drawOval(drawX+breiteX/2+10,drawY,kaestchenBreiteX/2,kaestchenHoeheY/2);
}
}//drawFilledOval
public void drawShotShipPlayer(int x, int y) {
g.setColor(Color.red);
drawFilledOval(x,y,true);
}//drawShotShipPlayer
public void drawShotWaterPlayer(int x, int y) {
g.setColor(c1);
drawFilledOval(x,y,true);
}//drawShotWaterPlayer
public void drawShotShipComputer(int x, int y) {
g.setColor(Color.red);
drawFilledOval(x,y,false);
}//drawShotShipComputer
public void drawShotWaterComputer(int x, int y) {
g.setColor(c1);
drawFilledOval(x,y,false);
}//drawShotWaterComputer
public void drawPlayerShipX(int typ,int x, int y){ //ueber indexposition
int drawStartX=startX+x*kaestchenBreiteX+kaestchenBreiteX/4;
int drawStartY=startY+y*kaestchenHoeheY+kaestchenHoeheY/4;
int drawBreiteX=kaestchenBreiteX;
int drawHoeheY=kaestchenHoeheY/2;
g.setColor(ships);
System.out.println(" typ: "+typ+" laenge: "+BattleShip.lengthOfShips[typ]);
g.fillRect(drawStartX+breiteX/2+10,drawStartY,( BattleShip.lengthOfShips[typ]-1)*drawBreiteX+drawBreiteX/2+1,drawHoeheY+1);
}//x-ship-zeichnen
public void drawPlayerShipY(int typ,int x, int y){ //Balkenausgabe fuer Schiff anzeigen
int drawStartX=startX+x*kaestchenBreiteX+kaestchenBreiteX/4;
int drawStartY=startY+y*kaestchenHoeheY+kaestchenHoeheY/4;
int drawBreiteX=kaestchenBreiteX/2;
int drawHoeheY=kaestchenHoeheY;
g.setColor(ships);
System.out.println(" typ: "+typ+" laenge: "+BattleShip.lengthOfShips[typ]);
g.fillRect(drawStartX+breiteX/2+10,drawStartY,drawBreiteX+1,(BattleShip.lengthOfShips[typ]-1)*drawHoeheY+drawHoeheY/2+1);
}//drawPlayerShipY
public void drawComputerShipX(int typ,int x, int y){ //ueber indexposition
int drawStartX=startX+x*kaestchenBreiteX+kaestchenBreiteX/4;
int drawStartY=startY+y*kaestchenHoeheY+kaestchenHoeheY/4;
int drawBreiteX=kaestchenBreiteX;
int drawHoeheY=kaestchenHoeheY/2;
g.setColor(Color.red);
g.fillRect(drawStartX,drawStartY,(BattleShip.lengthOfShips[typ]-1)*drawBreiteX+drawBreiteX/2+1,drawHoeheY+1);
}//drawComputerShipX
public void drawComputerShipY(int typ,int x, int y){ //Balkenausgabe fuer Schiff anzeigen
int drawStartX=startX+x*kaestchenBreiteX+kaestchenBreiteX/4;
int drawStartY=startY+y*kaestchenHoeheY+kaestchenHoeheY/4;
int drawBreiteX=kaestchenBreiteX/2;
int drawHoeheY=kaestchenHoeheY;
g.setColor(Color.red);
System.out.println(" typ: "+typ+" laenge: "+BattleShip.lengthOfShips[typ]);
g.fillRect(drawStartX,drawStartY,drawBreiteX+1,(BattleShip.lengthOfShips[typ]-1)*drawHoeheY+drawHoeheY/2+1);
}//drawComputerShipY
public void clearShip(int treffer, int p){
//ueberzeichnen der Schiffe, wenn getroffen
g.setColor(Color.lightGray);
if (p==1){//Spieler
if (treffer==1)
g.fillRect(60,135,40,20);
if (treffer==2)
g.fillRect(1,95,60,20);
if (treffer==3)
g.fillRect(1,135,60,20);
if (treffer==4)
g.fillRect(1,115,80,20);
if (treffer==5)
g.fillRect(1,155,99,20);
}
else{ //Computer
if (treffer==1)
g.fillRect(60,235,40,20);
if (treffer==2)
g.fillRect(1,195,60,20);
if (treffer==3)
g.fillRect(1,235,60,20);
if (treffer==4)
g.fillRect(1,215,80,20);
if (treffer==5)
g.fillRect(1,255,99,20);
}
}//clearShip
public void drawSpielStand(int x, int y, Player p){
g.setColor(Color.white);
g.fillRect(x,y,200,75);
g.setColor(Color.black);
g.drawRect(x,y,200,75);
g.setFont(new Font("Monospaced",Font.PLAIN,12));
g.drawString("Schüsse auf den Gegner "+p.getShot(),x+5,y+13);
g.drawString("Treffer beim Gegner "+p.getHit(),x+5,y+28);
g.drawString("gesunkene Schiffe "+p.getSink(),x+5,y+43);
g.drawString("beim Gegner",x+5,y+58);
g.drawString("Gewonnen "+(p.getWin()?"ja":"nein"),x+5,y+73);
}//drawSpielStand
public void drawStatus(String stri){
//Statuszeile 1
g.setColor(Color.white);
g.fillRect(101,361,418,14);
g.setFont(new Font("SansSerif",Font.PLAIN,12));
g.setColor(Color.blue);
g.drawString(stri,110,373);
}//drawStatus
public void drawStatus2(String stri){
//Statuszeile 2
g.setColor(Color.white);
g.fillRect(101,376,418,13);
g.setFont(new Font("SansSerif",Font.PLAIN,12));
g.setColor(Color.blue);
g.drawString(stri,110,387);
}//drawStatus2
public void drawRest(){
g.setColor(Color.lightGray);
g.fillRect(1,175,90,20);
g.fillRect(320,55,201,20);
g.setColor(Color.black);
g.setFont(new Font("Monospaced",Font.PLAIN,20));
g.drawString(schiffeversenken.fi.getName()+"s Feld",320,70);
g.setColor(Color.blue);
g.setFont(new Font("Serif",Font.PLAIN,12));
g.drawString(schiffeversenken.fi.getName()+"s Flotte",3,190);
}//drawRest
public void oberfläche(){ //des Applets
g.setColor(Color.black);
g.drawRect(0,0,534,399);
g.setColor(Color.blue);
g.setFont(new Font("Serif",Font.BOLD,45));
g.drawString("Schiffe versenken",150,50);
g.setFont(new Font("Serif",Font.PLAIN,12));
g.drawString("Flotte Hilal",3,90);
g.setFont(new Font("Monospaced",Font.PLAIN,20));
g.setColor(Color.black);
g.drawString("Hilal",110,70);
drawPlayGround(100,75,520,275);
g.setColor(Color.white);
g.fillRect(100,276,200,75);
g.setColor(Color.black);
g.drawRect(100,276,200,75);
g.setFont(new Font("Monospaced",Font.PLAIN,12));
g.drawString("Schüsse auf den Gegner ",100+5,276+13);
g.drawString("Treffer beim Gegner ",100+5,276+28);
g.drawString("gesunkene Schiffe ",100+5,276+43);
g.drawString("beim Gegner",100+5,276+58);
g.drawString("Gewonnen ",100+5,276+73);
g.setColor(Color.white);
g.fillRect(320,276,200,75);
g.setColor(Color.black);
g.drawRect(320,276,200,75);
g.setFont(new Font("Monospaced",Font.PLAIN,12));
g.drawString("Schüsse auf den Gegner ",320+5,276+13);
g.drawString("Treffer beim Gegner ",320+5,276+28);
g.drawString("gesunkene Schiffe ",320+5,276+43);
g.drawString("beim Gegner",320+5,276+58);
g.drawString("Gewonnen ",320+5,276+73);
g.setColor(Color.white);
g.fillRect(100,360,420,30);
g.setColor(Color.black);
g.drawRect(100,360,20,29);
drawStatus("Zum Spielen drücke bitte auf Start");
}//oberflaeche
public void mouseClicked(MouseEvent event) {
int indexX=getX(event.getX());
int indexY=getY(event.getY());
if ((startY<event.getY())&&(event.getY()<endeY)&&schiffeversenken.gestartet) {
if ((getX(event.getX())>=0)&&(getX(event.getX())<xFelder)) {
if (event.getX()<startX+breiteX/2) { // Computerfeld
System.out.println("Hilal: "+getX(event.getX())+"/"+getY(event.getY()));
if ((shipsetted>=5)&&schiffeversenken.nowPlay.readyShot){
schiffeversenken.nowPlay.readyShot=false;
schiffeversenken.nowPlay.xSet(indexX);
schiffeversenken.nowPlay.ySet(indexY);
schiffeversenken.nowPlay.tryHit(schiffeversenken.nowPlay.player1);
}
}
else {
System.out.println("PLAYER: "+getX(event.getX())+"/"+getY(event.getY()));
if ((shipsetted<5)){
System.out.println("t1 ist am Laufen und Maus gedrueckt");
schiffeversenken.nowPlay.xSet(indexX);
schiffeversenken.nowPlay.ySet(indexY);
schiffeversenken.nowPlay.xy=event.isMetaDown();
if (schiffeversenken.nowPlay.setoneShip(shipsetted)){
shipsetted++;
}
}
}
}
}
}
}//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<lengthOfShips[typ]; index++) {
if (arrayOfShips[x+index][y]!=0) return false;
}
if (kontrolle) System.out.println("kein Fehler");
}
else {
if (kontrolle) System.out.print("y-Laenge, ");
if (y+lengthOfShips[typ]-1>=defaultSizeY) return false;
if (kontrolle) System.out.print("y-Laenge belegt, ");
for (int index=0; index<lengthOfShips[typ]; index++) {
if (arrayOfShips[x][y+index]!=0) return false;
}
if (kontrolle) System.out.println("kein Fehler");
}
return true;
}
public boolean isDirectedOnX(int typ) {
return !shipOrientationY[typ];
}
public boolean isDirectedOnY(int typ) {
return shipOrientationY[typ];
}
public int getStartPosOfShipX(int typ) {
return startPositionOfShipsX[typ];
}
public int getStartPosOfShipY(int typ) {
return startPositionOfShipsY[typ];
}
public boolean placeX(int x, int y, int typ) { //setzt Schiff auf x-Achse
if (enoughPlace(x, y, typ, true)) {
for (int index=0; index<lengthOfShips[typ]; index++) {
arrayOfShips[x+index][y]=typ;
}
startPositionOfShipsX[typ]=x;
startPositionOfShipsY[typ]=y;
}
else return false;
return true;
}
public boolean placeY(int x, int y, int typ) { //setzt Schiff auf y-Achse
if (enoughPlace(x, y, typ, false)) {
for (int index=0; index<lengthOfShips[typ]; index++) {
arrayOfShips[x][y+index]=typ;
}
startPositionOfShipsX[typ]=x;
startPositionOfShipsY[typ]=y;
shipOrientationY[typ]=true;
}
else return false;
return true;
}
public boolean sunk(int typ) { //gibt zurueck ob Schiff versenkt
if ((typ<1)||(typ>5)) 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; index1<defaultSizeY; index1++) {
for (int index2=0; index2<defaultSizeX; index2++) {
output=output+arrayOfShips[index2][index1]+"\t";
}
output=output+"\n";
}
output=output+"\n";
for (int index1=0; index1<defaultSizeY; index1++) {
for (int index2=0; index2<defaultSizeX; index2++) {
output=output+(alreadyShut[index2][index1]?alreadyShut[index2][index1]+" \t":alreadyShut[index2][index1]+"\t");
}
output=output+"\n";
}
output=output+"\n";
for (int index=1; index<6; index++) {
output=output+"Anzahl Treffer fuer "+index+": "+hitCounterByType[index]+"\n";
}
return output;
}
public static void main (String args[]) { //interner Testrahmen
BattleShip test=new BattleShip(6,3);
System.out.println("Schiff auf x=5,y=0: "+test.placeY(5,0,2));
System.out.println("Schiff auf x=0,y=2: "+test.placeX(0,2,5));
System.out.println("Schiff auf x=0,y=0: "+test.placeX(0,0,4));
int zahl50=test.hit(5,0), zahl02=test.hit(0,2),zahl12=test.hit(1,2);
System.out.println("Schuss auf x=5,y=0: "+zahl50);
System.out.println("Schuss auf x=0,y=2: "+zahl02);
System.out.println("Schuss auf x=1,y=2: "+zahl12);
System.out.println("Versenkt von "+zahl12+": "+test.sunk(zahl12)+"\n");
System.out.println(test);
}
}
class first extends java.awt.Frame implements ActionListener{
private String name;
private Button close;
private TextField text;
private Label label;
/** Creates new form first */
public first() {
initComponents ();
setSize(200,150);
setLayout(new BorderLayout ());
setBackground(Color.lightGray);
name="";
this.setTitle("Herzlich Willkommen");
initComponents ();
text=new TextField();
text.setFont(new Font("SansSerif",Font.PLAIN,20));
text.setText("captn sharky");
add (text, BorderLayout.NORTH);
label=new Label();
label.setForeground(Color.red);
label.setFont(new Font("SansSerif",Font.PLAIN,12));
label.setText(" Namen eingeben und Bestätigen!");
add (label, BorderLayout.CENTER);
close=new Button();
close.setLabel("Bestätigen");
close.addActionListener(this);
add (close, BorderLayout.SOUTH);
schiffeversenken.start.setEnabled(true);
schiffeversenken.help.setEnabled(true);
System.out.println("Fenster geöffnet");
}
public String getName(){
return name;
}
private void initComponents () {
addWindowListener (new java.awt.event.WindowAdapter () {
public void windowClosing (java.awt.event.WindowEvent evt) {
exitForm ();
}
}
);
}
private void exitForm() {
name=text.getText();
if (name.length()>10){
name="";
for (int i=0; i<10; i++)
name+=text.getText().charAt(i);
}
System.out.println(name);
dispose();
schiffeversenken.playgr.drawRest();
schiffeversenken.start.setEnabled(true);
schiffeversenken.help.setEnabled(true);
}
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("Ziel des Spieles"+
" spielbeschreibung \n\n\n"+
"Die Aufgabenstellung\n\n\n"+
"Infos zum Spiel:\n\n"+
" - Dieses Spiel wird normalerweise von zwei Personen mit Papier und Bleistift gespielt.\n"+
" \n"+
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(schiffeversenken.zweierX,20,370,40,20,this);
g.drawImage(schiffeversenken.dreierX1,100,370,60,20,this);
g.drawImage(schiffeversenken.dreierX2,190,370,60,20,this);
g.drawImage(schiffeversenken.viererX,280,370,80,20,this);
g.drawImage(schiffeversenken.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 ();
}
}
);
}
/** Exit the Application */
private void exitForm() {
schiffeversenken.start.setEnabled(true);
schiffeversenken.help.setEnabled(true);
dispose();
}
public static void main (String args[]) {
new HelpFrame();
}
public void actionPerformed(final java.awt.event.ActionEvent p1){
exitForm();
}
}