Hi,
derzeitig bringe ich mir ja Java bei und hätte gern etwas Rückmeldung, ob das, wie ich das gerade angehe, ok ist. Möchte gerne dazulernen und bin somit für jede Kritik dankbar.
Die ganze Geschichte ist auf Basis von dem Tutorial für Java Spiele aufgebaut.
Würde man nun auch die anderen Klasse noch anschauen, würde man sehen, dass eigentlich nur die Struktur etwas anders ist - aber ansonsten bisher alles gleich.
Also, worum gehts:
Bei dem Programm handelt es sich um ein "Spiel", welches mehrere Unterspiele beinhalten wird.
Also Spiel_1 kann aus SubSpiel_1 und SubSpiel_2 bestehen,
während Spiel_2 (später) aus SubSpiel_2 , 3 und 4 bestehen kann.
Jedes Spiel überschaut also die SubSpiele,
die SubSpiele wiederum verwalten sich selbst und bekommen bei Zeiten Anweisungen vom (Haupt-) Spiel.
In einem SubSpiel erscheinen beispielsweise Grafiken oder Sounds, auf die der User Einfluss nimmt, reagieren muss oder vergleichbares.
Die Zielsetzung der SubSpiele ist noch unklar, da es hierbei um Spiele für "therapeutische" Zwecke handelt, zu denen ich gerade forsche...oder besser gesagt, forschen werde. Als erstes muss ich nun aber erstmal Java lernen...
Nun habe ich allerdings noch ein paar Fragen zu der Hauptklasse:
1 - Zeile 48: Zum Frame werden die Keylistener hinzugefügt: Wie ist es möglich, das diese Zeile nicht mehr notwendig ist, und das SubGame es selbst verwaltet?
2 - Zeile 71: Initialisieren der Grafiken für das Spiel: Eigentlich sollte jedes Subgame seine eigenen Grafiken verwalten, aber das bekomme ich noch nicht hin
3 - Zeile 65 + 105: Das geht bestimmt noch eleganter
Meine größte Hürde ist im Moment, dass jedes SubSpiel wirklich für sich alleine steht. Alle Tutorials, die ich bisher gefunden habe, machen fast alles in 2 oder 3 Klassen und wenig verschachtelt.
Ich muss das allerdings genauer aufschlüsseln. Ziel ist es - sofern das überhaupt möglich ist - dass ich in einem Spiel ein neues SubSpiel-Objekt erstelle und es von da an komplett alleine arbeitet. Also auch mit KeyListenern, usw. --> Da hakt es bei mir aber derzeitig noch gewaltig.
Den KeyListener bekomme ich z.B. gerade nur an den Frame von HauptSpiel gekoppelt. Ich glaube, da habe ich auch irgendetwas noch überhaupt gar nicht verstanden.
Hier die abstrakte Klasse, wobei die noch erweitert wird.
[Java]
import javax.swing.JPanel;
public abstract class Game extends JPanel implements Runnable {
protected int posX;
protected int posY;
protected long delta;
protected long last;
protected long fps;
public Game()
{
// Alles, was für jedes Spiel vorher initialisiert werden muss
}
// Berechne FPS
protected void computeDelta()
{
delta = System.nanoTime() - last;
last = System.nanoTime();
fps = ((long)1e9) / delta;
}
}
[/Java]
Und das Spiel_1 wird genauer beschrieben:
derzeitig bringe ich mir ja Java bei und hätte gern etwas Rückmeldung, ob das, wie ich das gerade angehe, ok ist. Möchte gerne dazulernen und bin somit für jede Kritik dankbar.
Die ganze Geschichte ist auf Basis von dem Tutorial für Java Spiele aufgebaut.
Würde man nun auch die anderen Klasse noch anschauen, würde man sehen, dass eigentlich nur die Struktur etwas anders ist - aber ansonsten bisher alles gleich.
Also, worum gehts:
Bei dem Programm handelt es sich um ein "Spiel", welches mehrere Unterspiele beinhalten wird.
Also Spiel_1 kann aus SubSpiel_1 und SubSpiel_2 bestehen,
während Spiel_2 (später) aus SubSpiel_2 , 3 und 4 bestehen kann.
Jedes Spiel überschaut also die SubSpiele,
die SubSpiele wiederum verwalten sich selbst und bekommen bei Zeiten Anweisungen vom (Haupt-) Spiel.
In einem SubSpiel erscheinen beispielsweise Grafiken oder Sounds, auf die der User Einfluss nimmt, reagieren muss oder vergleichbares.
Die Zielsetzung der SubSpiele ist noch unklar, da es hierbei um Spiele für "therapeutische" Zwecke handelt, zu denen ich gerade forsche...oder besser gesagt, forschen werde. Als erstes muss ich nun aber erstmal Java lernen...
Nun habe ich allerdings noch ein paar Fragen zu der Hauptklasse:
1 - Zeile 48: Zum Frame werden die Keylistener hinzugefügt: Wie ist es möglich, das diese Zeile nicht mehr notwendig ist, und das SubGame es selbst verwaltet?
2 - Zeile 71: Initialisieren der Grafiken für das Spiel: Eigentlich sollte jedes Subgame seine eigenen Grafiken verwalten, aber das bekomme ich noch nicht hin
3 - Zeile 65 + 105: Das geht bestimmt noch eleganter
Meine größte Hürde ist im Moment, dass jedes SubSpiel wirklich für sich alleine steht. Alle Tutorials, die ich bisher gefunden habe, machen fast alles in 2 oder 3 Klassen und wenig verschachtelt.
Ich muss das allerdings genauer aufschlüsseln. Ziel ist es - sofern das überhaupt möglich ist - dass ich in einem Spiel ein neues SubSpiel-Objekt erstelle und es von da an komplett alleine arbeitet. Also auch mit KeyListenern, usw. --> Da hakt es bei mir aber derzeitig noch gewaltig.
Den KeyListener bekomme ich z.B. gerade nur an den Frame von HauptSpiel gekoppelt. Ich glaube, da habe ich auch irgendetwas noch überhaupt gar nicht verstanden.
Hier die abstrakte Klasse, wobei die noch erweitert wird.
[Java]
import javax.swing.JPanel;
public abstract class Game extends JPanel implements Runnable {
protected int posX;
protected int posY;
protected long delta;
protected long last;
protected long fps;
public Game()
{
// Alles, was für jedes Spiel vorher initialisiert werden muss
}
// Berechne FPS
protected void computeDelta()
{
delta = System.nanoTime() - last;
last = System.nanoTime();
fps = ((long)1e9) / delta;
}
}
[/Java]
Und das Spiel_1 wird genauer beschrieben:
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class Game_1 extends Game implements Runnable{
private static final long serialVersionUID = 1L;
SubGame_1 mySubGame_1;
JFrame frame;
boolean gameStarted = false;
public static void main(String[] args)
{
new Game_1();
}
public Game_1()
{
super();
// erstelle Spielbildschirm
this.setPreferredSize(new Dimension(800,600));
frame = new JFrame ("Spiel 1");
frame.setLocation(100,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.pack();
frame.setVisible(true);
// starte alles, was zum Spielbeginn notwendig ist
doInitializations();
}
// Startet alles, was für vor der Initialisierung des Games notwendig ist
private void doInitializations()
{
last = System.nanoTime(); // Legt ersten Zeitpunkt der Initialisierung fest, für spätere FPS Berechnung
mySubGame_1 = new SubGame_1(this); // das erste SubGame
// ****1: Zum Frame werden die Keylistener hinzugefügt: Wie ist es möglich, das diese Zeile nicht mehr notwendig ist, und das SubGame es selbst verwaltet?
frame.addKeyListener(mySubGame_1);
// starte eigenen Thread (aus Tutorial übernommen - so genau weiß ich auch noch nicht, warum)
Thread th = new Thread(this);
th.start();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.red);
g.drawString("FPS: " + Long.toString(fps), 20 ,10);
// ****3: Das geht bestimmt noch eleganter
if(!gameStarted)
{
return;
}
// ****2: Initialisieren der Grafiken für das Spiel: Eigentlich sollte jedes Subgame seine eigenen Grafiken verwalten, aber das bekomme ich noch nicht hin
mySubGame_1.allHeliCopters.firstElement().drawObjects(g);
mySubGame_1.testCircle.drawObjects(g);
}
// startet für jedes Subgame die Anweisung, dass es nun seine Objekte bewegen darf
private void moveObjecs()
{
mySubGame_1.moveObjects(delta);
}
// Check keys für jedes Subgame und für gesamtgame (für pause, start)
private void checkKeys()
{
mySubGame_1.checkKeys();
}
// startet für jedes SubGame die Funktion, die für die Logik zuständig ist (beispielsweise animationen, Berechnungen etc)
private void doLogic()
{
mySubGame_1.doLogic(delta);
}
// Clont die Objekte / Vektoren
private void cloneObjects()
{
mySubGame_1.cloneVectors();
}
public void run()
{
// ****3: das geht bestimmt noch eleganter
gameStarted=true;
while (frame.isVisible())
{
computeDelta();
doLogic();
checkKeys();
moveObjecs();
cloneObjects();
repaint();
try
{
Thread.sleep(10);
}
catch (InterruptedException e)
{
}
}
}
}
[/Java]
Soweit erstmal, wenn dann noch Fragen sind oder weiteres Interesse, kann ich die nächsten Klassen ja mal posten...
Vielen dank auf jeden Fall schonmal...