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.
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:
und einmal mein Spielfeld:
Dann noch der Spieler:
und das Schiff:
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?
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
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.
Finde ich trifft nicht so ganz zu. Leider !Zum Verständnis ist lediglich Java Grundwissen und erste Erfahrungen mit den Swing Komponenten (JFrame, JPanel,...) nötig.
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];
}
}
}
}
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;
}
}
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;
}
}
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;
}
}
Code:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
}
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