Grafikeinsteiger sucht/braucht Hilfe. Wäre Nett !

Status
Nicht offen für weitere Antworten.

Dagobert

Bekanntes Mitglied
Einen wunder schönen guten Morgen.

Erstmal möchte ich mich entschuldigen falls ich hier falsch bin, denn ich weis nicht so ganz, ob das in dieses Forum noch passt.

So dann fange ich mal mit meinem Problem(en).
Ich hab jetzt seit ca. 1.5 Jahren Java in der Schule. Nur leider machen wir immer nur diese Grundlagen in der Konsole. Und da nicht einmal alle wichtigen wie ich finde. (von behanldung von Strings haben wir bis jetzt immer nocht nichts in der Schule gelernt XD).
Da jetzt entlich wieder Ferien sind habe ich ein bisschen Zeit neben der Schule und wollte mal mit dem Grafikteil in Java weiter machen. Ich habe ein par Erfahrungen von Swing & AWT. Aber nur das nötigste: Fenster erstellen, Butten, Layout, Eventmanager, usw.. Jetzt habe ich mir geradcht ich fange mal an Java2D mit hinein zu bringen. Ich habe mir überlegt was man das mehr oder weniger sinvolles machen kann, und da kam mir die Iddee eine Schiffeversenken oberfläche zu basteln.
Das Layout soll erstmal recht einfach werden. An der Rechten Seite befinden sich zwei Buttons. Diese stehen für zwei unterschiedliche Schiffgrößen (2/3). In dem Rest soll dann das eigentliche geschehen statt finden.
Ich habe bis jetzt 4 Klassen.
1. Klasse Mausfenster --> Das Fenster wo alles zusammentrifft
2. Spieler --> Dort werden eigentlicht nur die Schiffe ein einem Arry gespeichert.
3. Spielfeld --> Dort soll die Grafik geschichte statt finden (Galube ich zumindest^^)
4. Schiff --> Klasse eines Schiffs (Größe/Position)

Ohne Grafik funktioniert das ganze bis jetzt ganz schön (finde ich).

Zu meiner Theorie:

Ich hab ein Fenster wo alle Fäden zusammen laufen. (?Sinvoll?)
Ich habe eine einfach Klasse "Schiff" wo einfach länge/xpos/ypos des Schiffes sind. Ich kann auf die Buttons klicken um die Aktuelle Schiffgröße zu verändern. Nun kann ich die Maus über die Fläche ziehen. Dabei wird die X/Y-Koord ausgelesen und in eine Neue instanz gesteckt (?Sinvoll? Wie kann man das besser machen das nicht jedes mal eine neue Instanz gebildet werden muss?). Dies soll später dafür sein das das Schiff dem Mauszeiger folgt.
Sobald ich dann klicke wird das Schiff in einem Array beim Spieler gespeichert.
Nun möchte ich gerne auch die Schiffe Grafisch darstellen. Erstmal nur als einfachen String.
Ich habe mich nun angefangen mit dieser Tut im Forum zu beschäftigen
HIER. Leider nur mit Mittelmäßigen erfolg.
Zum Verständnis ist lediglich Java Grundwissen und erste Erfahrungen mit den Swing Komponenten (JFrame, JPanel,...) nötig.
Finde ich trifft nicht so ganz zu. Leider !
Mir sind da noch ein par Sachen völlig fremd!
Ich hab jetzt versucht jedes mal einen String zu zeichnen wenn ein Schiff gesetzt wird. Leider mit keinem Erfolg.
Ich Poste mal die benötigten Klassen dazu:
Einmal mein Hauptfenster:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Maustestfenster extends JFrame {
	public static void main(String[] args) {
		Maustestfenster Fenster = new Maustestfenster();
	}
	//Buttons die erstellt werden für die Größe der Schiffe
	private JButton zweier = new JButton("2er");
	private JButton dreier = new JButton("3er");
	//Das Pannel worauf die Schiff-Buttons angebracht werden
	private JPanel schiffe = new JPanel();
	// Ein Arry mit den möglichen Größen der Schiffe
	private static final int groesse[] = {2,3,4,5};
	// Die aktuelle Größe die gerade verwendet wird
	private int aktuellegroesse = 0;
	// Das Spielfeld worauf die Schiffe gezeichnet werden
	private Spielfeld sf = new Spielfeld();
	// Ein Spieler (Zum Schiffe Speichern)
	private Spieler sp1 = new Spieler("Test1");
	//Das eigentliche Fenster
	public Maustestfenster() {
		//Allgemeine Fenstereigenschaften
		//Titel
		this.setTitle("Maustest");
		//Größe
		this.setSize(500, 500);
		// Position
		this.setLocation(200, 100);
		//Größe nicht änderbar
		this.setResizable(false);
		//Borderlayout für das Fenster
		this.setLayout(new BorderLayout());
		//Fenster sichtbar machen
		this.setVisible(true);
		//Programm beenden wenn Fenster geschlossen wird
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		//Hinzufügen der Buttons
		schiffe.add(zweier);
		schiffe.add(dreier);
		//Layout für die Buttons
		schiffe.setLayout(new GridLayout(2,1));
		//Hinzufügen ins Fenster
		this.add(this.schiffe, BorderLayout.EAST);
		//Hinzufügen der Zeichenfläche
		this.add(this.sf, BorderLayout.CENTER);
		//Mouslistener für Schiffe setzen
		this.addMouseListener(new setzeSchiff());
		this.addMouseMotionListener(new bewegeSchiff());
		//Hinzufügen der Actionlistener für die Buttons
		zweier.addActionListener(new schiffButton());
		dreier.addActionListener(new schiffButton());
		
	}
	
	class setzeSchiff extends MouseAdapter{
		public void mouseClicked(MouseEvent klick){
			int x = klick.getX();
			int y = klick.getY();
			sp1.setSchiff(new Schiff(x, y, aktuellegroesse));
			sp1.druckSchiff();
		}
	}
	
	class bewegeSchiff extends MouseMotionAdapter {
		public void mouseMoved(MouseEvent move) {
			int x = move.getX();
			int y = move.getY();
			Schiff schiff = new Schiff(x, y, aktuellegroesse);
		}
	}
	
	class schiffButton implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			if(e.getActionCommand() == "2er"){
				aktuellegroesse = groesse[0];
			} else if(e.getActionCommand() == "3er"){
				aktuellegroesse = groesse[1];
			}
		}
	}
}
und einmal mein Spielfeld:
Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;

public class Spielfeld extends JComponent {
	private Color c = Color.RED;
	private int faktor = 10;

	protected void paintComponent(Graphics g) { 
      super.paintComponent(g);  
         Graphics2D g2d = (Graphics2D)g; 
         g2d.setColor(c);
         g2d.drawString("test", 100, 100);
   } 

	public void setColor(Color c) {
		this.c = c;
	}
}
Dann noch der Spieler:
Code:
public class Spieler {

	private Schiff[] schiffe = new Schiff[5];

	private String name;

	public Spieler(String name) {
		this.name = name;
	}

	public Schiff getSchiff(int nr) {
		return schiffe[nr];
	}

	public void druckSchiff(int nr) {
		System.out.println("Schiff Platz:" + nr + " Länge: "
				+ schiffe[nr].getLaenge() + " Position: "
				+ schiffe[nr].getPos()[0] + " | " + schiffe[nr].getPos()[1]);
	}

	public void druckSchiff() {
		for (int i = 0; i < 5; i++) {
			if (schiffe[i] != null) {
				System.out.println("Schiff Platz:" + i + " Länge: "
						+ schiffe[i].getLaenge() + " Position: "
						+ schiffe[i].getPos()[0] + " | "
						+ schiffe[i].getPos()[1]);
			}
		}
	}

	public boolean setSchiff(Schiff schiff) {
		boolean gesetzt = false;
		for (int i = 0; i < 5; i++) {
			if (this.schiffe[i] == null && gesetzt == false) {
				this.schiffe[i] = schiff;
				gesetzt = true;
			}
		}
		return gesetzt;
	}

	public Spieler getSpieler() {
		return this;
	}
}
und das Schiff:
Code:
public class Schiff {

	public static final int EAST = 90;

	public static final int NORDEN = 0;

	private int x;

	private int x_ram;

	private int y;

	private int y_ram;

	private int laenge;

	private int richtung;

	private int schaden;

	public Schiff(int xpos, int ypos, int laenge) {
		this.x = xpos;
		this.y = ypos;
		this.laenge = laenge;
		this.x_ram = 0;
		this.y_ram = 0;
		this.richtung = NORDEN;
		this.schaden = 0;
		System.out.println("Länge: " + this.laenge + " (" + this.x + "|" + this.y + ")" );
	}
	public int getLaenge(){
		return this.laenge;
	}
	
	public int[] getPos(){
		int[] pos = {this.x, this.y};
		return pos;
	}
}
Jetzt ist es leider so, das der String sofort zu beginn gezichnet wird, und nicht erst wenn ich ein Schiff setze, da soweit ich die Methode verstanden habe Java diese selbstständig Zeichnet wenn es für Nötig erachtet wird. Also logischer weise auch beim Erstellen. Desweiteren kann mir mal bitte jemand diese Methode erklären?
Code:
protected void paintComponent(Graphics g) { 
      super.paintComponent(g);  
         Graphics2D g2d = (Graphics2D)g; 
   }
Das wäre sehr nett.

Wie kann ich das denn jetzt anstellen das bei jedem Klick der String gezichnet wird, ambesten an der X/Y Pos der Maus.

Trente man Garfik und Logik oder mischt man dies zusammen?

mfg.
Dagobert
 

Marco13

Top Contributor
Dagobert hat gesagt.:
Trente man Garfik und Logik oder mischt man dies zusammen?
Irgendwie glaube ich, dass du die Frage nicht gestellt hättest, wenn du nicht wüßtest, dass die Antwort darauf ist, dass man sie NICHT mischen sollte.

Welche Klasse bei dir nun welche Aufgabe übernehmen sollte, ist nicht klar (sollte es aber sein!). Das liegt auch daran, dass keine sinnvollen Kommetare vorhanden sind. Dafür aber viele unsinnige:
Code:
     //Titel
      this.setTitle("Maustest");
      //Größe
      this.setSize(500, 500);
      // Position
      this.setLocation(200, 100);
      //Größe nicht änderbar
      this.setResizable(false); 
      //Borderlayout für das Fenster
      this.setLayout(new BorderLayout());
      //Fenster sichtbar machen
      this.setVisible(true);

->

Code:
      // Initialize the window 
      this.setTitle("Maustest");
      this.setSize(500, 500);
      this.setLocation(200, 100);
      this.setResizable(false); 
      this.setLayout(new BorderLayout());

      ....

      this.setVisible(true); // <- Das erst ganz am Ende machen!!!

Oder

Code:
public boolean setSchiff(Schiff schiff) { 
   ...
}

Code:
/** 
 * Places the given ship somewhere and return some strange boolean value
 */ 
public boolean setSchiff(Schiff schiff) { 
   ...
}
(oder so ähnlich :wink: )

Sonst...
- Entscheide dich ob deutsch oder englisch.
Code:
public static final int EAST = 90;
public static final int NORDEN = 0;
:autsch:
(Besser Englisch)
- Klassennamen schreibt man Groß.
- class schiffButton implements ActionListener - ist das ein Button? Wenn nein, warum heißt es dann SchiffButton?
- Eine Klasse "Schiff"/"Ship" ist OK.
- Eine Klasse Player ist OK. Aber welche Aufgaben hat der?

Zur eigentlichen Frage:
- Mach' dir eine Klasse, die das Spielfeld repräsentiert. Welche Eigenschaften/Methoden muss die haben?
- Mach' dir eine Klasse, die das Spielfeld zeichnet. (Ja, das ist was anderes)
- Wenn durch einen Mausklick ein Schiff gesetzt wurde, sorg' dafür, dass das Spielfeld neu gezeichnet wird. Am Anfang ist das Spielfeld leer, und es wird nur das leere Feld gezeichnet. Wenn ein Schiff gesetzt wurde, wird ein neuzeichnen ausgelöst (mit spielfeldPanel.repaint() oder so), und dort wo ein Schiff ist, wird ein Schiff gezeichnet (das in diesem Fall dann vielleicht nur aus einem String mit ein paar Koordinaten besteht)

Hm.

Desweiteren kann mir mal bitte jemand diese Methode erklären?
Code:
protected void paintComponent(Graphics g) {
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D)g;
}
Die Methode wird ("automatisch") immer dann aufgerufen, wenn die Component neu gezeichnet werden muss. Das Graphics-Objekt ist sozusagen "der Bereich auf dem Bildschirm", der dem Programm vom Betriebssystem zum Reinzeichnen zur Verfügung gestellt wird.
Schau auch mal hier: http://java.sun.com/products/jfc/tsc/articles/painting/
 
G

Guest

Gast
Quaxli hat gesagt.:
Einstieg in die Spieleprogrammierung mit Java

Autor: Quaxli

Beschreibung: Das Tutorial zeigt eine Möglichkeit auf, wie man kleinere Spiele in Java selbst programmiert.

Link: hier

Supergut erklärt, hat mir viel gebracht am Anfang. Könnte genau das sein was du brauchst.

(Damit hat Quaxli echt ein gutes Werk getan:) )
 

Dagobert

Bekanntes Mitglied
Erstmal danke für die Ausführliche Hilfe.
Also ich gebe schonmal ein par Teilantworten.
Java Konwesionen (oder wie man das schreibt) sind mir bekannt. Manchmal finde ichs nur hässlich. =)
Ich mische gerne Deutsch und Englisch da ich mir manchmal das eine besser merken kann als das andere und ich eigentlich immer das kürzere wähle. Obwohl ich beim Englisch schreiben nicht der beste bin. Lesen geht ganz gut, aber schreiben. Naja =(
So jetzt zu den Klassen:

Also ich bin jetzt bei 6 Klasse.

1. Maustestfenster --> Dort soll einfach das Fenster erstellt werden und alles zusammen gesetzt werden.
2. SpielZeichnen --> Wie der Name schon sagt hier soll einfach immer das komplette Spielfeld mit gezeichnet werden. (Feld & Schiffe)
3. Spieler --> Hat bis jetzt nur den Sinn die Schiffe in einem Array festzuhalten welche wirklich gesetzt wurden.
4. Spielfeld --> Ist das "Gegenstück" zum Grafikteil, nur das hier die Logik hineingelassen wird. Also ich habe ein 2D Array mit 10/10 Feldern.
5. Feld --> Dort gibs den Zustand des Feldes. Also ob das Feld leer bzw. Wasser ist oder ob ein Schiff drauf steht, treffer usw.
6. Schiff --> Infos des Schiffes

So hab ich mir eignetlich bis jetzt die Trennung gedacht. Ich weis nur noch nicht was mich noch für andere "Überraschungen" erwarten. vllt. kommt dann noch die eine oder andere hinzu.

Des weitern hab ich schonmal ein größteil der Klassen & Methoden kommentiert. Doch ergeben sich jetzt leider weiter Fragen wo ich nicht weiter komme.
Ich fange einfach mal an. Warum wird mein 10tes Rechteck nicht komplett gezeichnet? Das verstehe ich noch nicht so ganz.
Desweiter wie kann ich die methode paintShip aus dem Hauptfenster aufrufen, und wie aus dem Konstruktor von SpielZeichnen?
Was mich noch interessieren würde ist, wie ich die "Schiffe", die hinter meinem Mauszeiger hergezogen werden, wieder los werden kann. Einfach mit weis übermalen? Aber das ist dann doch doof wenn ich genau eins auf der schwarzen Linie habe.
Und gibt es eine möglichkeit ein gefülltes Rechteck zu zeichnen. z.B. dass das Wasserfeld komplett blau ist?
Wäre nett wenn mir gerade nochmal jemand weiter helfen kann.
mfg.
Dagobert
Ich poste hier nochmal mein aktuellen Fortschritt:
Schiff:
Code:
	import java.awt.event.MouseAdapter;
	import java.awt.event.MouseEvent;
	
	public class Ship {
	
		public static final int EAST = 90;
	
		public static final int NORTH = 0;
		
		public static final int sizeShips[] = {2,3,4,5};
	
		private int x;
	
		private int x_ram;
	
		private int y;
	
		private int y_ram;
	
		private int size;
	
		private int direction;
	
		private int damage;
	
		public Ship(int xpos, int ypos, int size) {
			this.x = xpos;
			this.y = ypos;
			this.x_ram = 0;
			this.y_ram = 0;
			this.size = size;
			this.direction = NORTH;
			this.damage = 0;
			System.out.println("Länge: " + this.size + " (" + this.x + "|" + this.y + ")" );
		}
		public int getLaenge(){
			return this.size;
		}
		
		public int[] getPos(){
			int[] pos = {this.x, this.y};
			return pos;
		}
		public void setShip(){
			
		}
		public void setPos(int x, int y){
			this.x = x;
			this.y = y;
		}
	}
Feld:
Code:
public class Field {
	
	public final static int water = 0;
	
	public final static int taken = 1;

	public final static int hit = 3;

	private int currentState;
	
	Field(){
		this.currentState = Field.water;
	}

	public void setCurrentState(int state) {
		this.currentState = state;
	}

	public int getCurrentState() {
		return this.currentState;
	}
	
	public void showZustand() {
		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 10; j++) {
				System.out.print(getCurrentState() + " ; ");

			}
			System.out.println();
		}
	}
}
Spielfeld
Code:
public class Spielfeld {
	Field field[][] = new Field[10][10];
	
	public Spielfeld() {
		for(int i = 0; i < 10; i++){
			for(int j = 0; j < 10; j++){
				field[i][j] = new Field();
			}
		}
	}
	
	public Field getField(int nr1, int nr2){
		return field[nr1][nr2];
	}
	public void printField(){
		for(int i = 0; i < 10; i++){
			for(int j = 0; j < 10; j++){
				System.out.print(" " + field[i][j].getCurrentState() + " ");
			}
			System.out.println();
		}
	}
}
Spielfeld zeichnen:
Code:
//Diese Klasse soll das Komplette Spielfeld Zeichnen, mit Schiffen und all drum und dran
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;

public class SpielZeichnen extends JComponent {
	private Color c = Color.RED;

	// Methode die der alles gezeichnet wird
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		paintField(g);
	}

	// Schiff Zeichnen
	public void paintShip(Ship ship, Graphics g) {
		g.setColor(Color.GRAY);
		g.drawString(String.valueOf(ship.getLaenge()), ship.getPos()[0], ship
				.getPos()[1]);
	}

	public void paintShip(Player player, Graphics g) {
		g.setColor(Color.GRAY);
		for (int i = 0; i < 5; i++) {
			g.drawRect(player.getShip(i).getPos()[0], player.getShip(i)
					.getPos()[1], player.getShip(i).getPos()[0]
					* player.getShip(i).getLaenge(),
					player.getShip(i).getPos()[1]
							* player.getShip(i).getLaenge());
		}
	}

	public void paintField(Graphics g) {
		setSize(300, 300);
		setColor(Color.BLACK);
		g.setColor(c);
		for (int i = 0; i <= 10; i++) {
			for (int j = 0; j <= 10; j++) {
				g.drawRect((int) (i * getFeldGroesse()[0]),
						(int) (i * getFeldGroesse()[1]),
						(int) (j * getFeldGroesse()[0]),
						(int) (j * getFeldGroesse()[1]));
			}
		}
	}

	// Gibt die Größe des Spielfeldes in einem Array zurück
	public float[] getSpielFeldGroesse() {
		float groesse[] = new float[2];
		groesse[0] = this.getWidth();
		groesse[1] = this.getHeight();
		return groesse;
	}

	// Gibt die Größe eines Feldes in einem Array zurück
	public float[] getFeldGroesse() {
		float groesse[] = new float[2];
		groesse[0] = this.getWidth() / 10;
		// komme ich beim Runden in der
		// Maustestfenster
		groesse[1] = this.getHeight() / 10;
		return groesse;
	}

	// Setzt die Farbe neu
	public void setColor(Color c) {
		this.c = c;
	}
}
Code:
public class Player {
	//In diesem Feld werden die 5 Schiffe gespeichert
	private Ship[] ships = new Ship[5];
	
	// Das Spielfeld worauf die Schiffe gezeichnet werden
	// Oben zum "Anfreifen" unten zum "Einstecken"
	public SpielZeichnen sfObenGra = new SpielZeichnen();

	SpielZeichnen sfUntenGra = new SpielZeichnen();

	// Logischer Teil des Spielfeldes
	public Spielfeld sfObenLog = new Spielfeld();

	public Spielfeld sfUntenLog = new Spielfeld();

	//Name des Speilers
	private String name;
	/** Erweiter Konstruktor der den Namen des Spielers setzt
	 * @param name
	 **/
	public Player(String name) {
		this.name = name;
	}
	//Soll einfach ein ausgewähltes Schiff zurückgeben
	public Ship getShip(int nr) {
		return ships[nr];
	}
	//Soll ein Schiffe mit Länge und Position ausgeben
	public void printShip(int nr) {
		System.out.println("Schiff Platz:" + nr + " Länge: "
				+ ships[nr].getLaenge() + " Position: "
				+ ships[nr].getPos()[0] + " | " + ships[nr].getPos()[1]);
	}
	//Soll alle Schiffe mit Länge und Position ausgeben
	public void printShip() {
		for (int i = 0; i < 5; i++) {
			if (ships[i] != null) {
				System.out.println("Schiff Platz:" + i + " Länge: "
						+ ships[i].getLaenge() + " Position: "
						+ ships[i].getPos()[0] + " | "
						+ ships[i].getPos()[1]);
			}
		}
	}
	// Setzt das Schiff an die nächste Freie stelle im Array, wenn dies nicht gelingt wird false zurückgegeben
	public boolean setShip(Ship ship) {
		boolean set = false;
		for (int i = 0; i < 5; i++) {
			if (this.ships[i] == null && set == false) {
				this.ships[i] = ship;
				set = true;
			}
		}
		return set;
	}
}
Das Hauptfenster:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Maustestfenster extends JFrame {
	// Main Methode
	public static void main(String[] args) {
		Maustestfenster window = new Maustestfenster();
	}

	// Buttons für die verschiedenen Schiffe
	private JButton zweier = new JButton("2er");

	private JButton dreier = new JButton("3er");

	// Das Pannel worauf die Schiff-Buttons angebracht werden
	private JPanel schiffe = new JPanel();

	// Die aktuelle Größe die gerade verwendet wird
	private int currentSize = 0;

	// Ein Spieler (Zum Schiffe Speichern)
	private Player sp1 = new Player("Test1");

	// Panel für die beiden Spielflächen
	private JPanel spielfelder = new JPanel();

	// Akteulle Shiff
	private Ship currentShip = null;

	// Das eigentliche Fenster
	public Maustestfenster() {
		// Fenster Eigenschaften
		this.setTitle("Maustest");
		this.setSize(800, 700);
		this.setLocation(200, 100);
		this.setResizable(false);
		this.setLayout(new BorderLayout());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Layout für das ButtonPanel
		schiffe.setLayout(new GridLayout(2, 1));

		// Hinzufügen der Buttons in das Panel
		schiffe.add(zweier);
		schiffe.add(dreier);

		// Hinzufügen ins Fenster
		this.add(this.schiffe, BorderLayout.EAST);

		// Mouslistener für Schiffe setzen
		sp1.sfUntenGra.addMouseListener(new setzeSchiff());
		sp1.sfUntenGra.addMouseMotionListener(new bewegeSchiff());

		// Hinzufügen der Actionlistener für die Buttons
		zweier.addActionListener(new schiffButton());
		dreier.addActionListener(new schiffButton());

		// Felder Layout
		spielfelder.setLayout(new GridLayout(2, 1));

		// Hinzufügen des Spielfeldpanels in das Fenster
		this.add(spielfelder, BorderLayout.CENTER);

		// Hinzufügen der Zeichenflächen
		spielfelder.add(sp1.sfObenGra);
		spielfelder.add(sp1.sfUntenGra);

		// Fenster sichtbar machen
		this.setVisible(true);
		
		// Spielfelder Zeichnen
		sp1.sfUntenGra.repaint();
		sp1.sfObenGra.repaint();
	}

	// MouseAdapter um das Schiff mit der Rechten Maustaste zu setzten und bei
	// dem Player im Array abzulegen und zu speichern
	class setzeSchiff extends MouseAdapter {
		public void mouseClicked(MouseEvent klick) {
			currentShip.setPos((int)(currentShip.getPos()[0]/sp1.sfUntenGra.getFeldGroesse()[0]), (int)(currentShip.getPos()[1]/sp1.sfUntenGra.getFeldGroesse()[1]));
			sp1.setShip(currentShip);
			sp1.sfUntenLog.getField(
					(int)(currentShip.getPos()[1]
							/ sp1.sfObenGra.getFeldGroesse()[1]),
					(int)(currentShip.getPos()[0]
							/ sp1.sfUntenGra.getFeldGroesse()[0])).setCurrentState(
					Field.taken);
			sp1.sfUntenLog.printField();
			sp1.printShip();
		}
	}

	// MouseMotionAdapter um die bewegegung der Maus festzuhalten, an diesen
	// Bwegeungen sollen später die Schiffe "mitgezogen" werden
	class bewegeSchiff extends MouseMotionAdapter {
		public void mouseMoved(MouseEvent move) {
			int x = move.getX();
			int y = move.getY();
			currentShip = new Ship(x, y, currentSize);
			sp1.sfUntenGra.paintShip(currentShip, sp1.sfUntenGra.getGraphics());
		}
	}

	// Actionlistener für die Schiff Buttons, um die gewünschte Schiffe zu
	// wählen
	class schiffButton implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if (e.getActionCommand() == "2er") {
				currentSize = Ship.sizeShips[0];
			} else if (e.getActionCommand() == "3er") {
				currentSize = Ship.sizeShips[1];
			}
		}
	}
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben