Problem beim Spielfeld für komplexen "Schachklon"

Hallo liebe Community!

Ich bastel gerade an einem Spiel, welches die Regeln eines Tabletop-Games nutzt. Bisher habe ich mich nur mit Verwaltungssoftware und Datenbanken gespielt und wollte was Neues versuchen.
Das ganze lässt sich vom Grobaufbau her mit Schach vergleichen.
Beide Spieler (Oder ein Spieler und ein Computer-Gegner) starten mit ihren Einheiten (In dem Fall Raumschiffe) gegenüber an einer Spielfeldseite (evtl. später auch an einer frei wählbaren Position)
Eine Einheit hat folgende Bewegungsmöglichkeiten: Eine bestimmte Zahl an mm/pixel/felder vorwärts, eine 0 - 45° oder 0 - 90° Drehung nach links/rechts und eine erneute Bewegung in die neue Richtung.
Eine Einheit hat verschiedene Bereiche die dabei wichtig sind: einen front-arc, zwei seiten-arcs und einen heck-arc.

Dieses Quadrat soll beispielsweise eine Einheit darstellen. Diese ist in diesem Fall standartmäßig mit der „Nase“ nach Norden (Oben) ausgerichtet.
So grenzen nun die roten Diagonalen/Linien die Arcs voneinander ab. Oben der Front-Arc, links und rechts die Side-Arcs und „unten“ der Heck-Arc.

Die Frage / Das Problem:
Welches Spielfeld eignet sich für die Bewegung dieser Objekte/Schiffe bzw. wie funktioniert die Darstellung eben dieses Spielfeldes?
Was eignet sich auch für Nutzereingaben wie eine 17° Drehung des Schiffes bzw. wo steht das Schiff am Ende der Bewegung dann?
Im Spiel ist es wichtig, wohin das Schiff „sieht“, denn man unterscheidet Bug- und Seitenwaffen, welche nur dann feuern können, wenn das gegnerische Schiff sich in dem jeweiligen Arc befindet.
Mathematisch (z.B. über die Winkelfunktionen) sehe ich kein Problem in der Bewegung, aber code-technisch habe ich hier noch wenig Erfahrung.

Falls es hierzu Werkzeuge, Ideen oder Hilfe gibt, wär ich Euch echt dankbar!
lg Bulveye

[quote=Bulveye]Die Frage / Das Problem:
Welches Spielfeld eignet sich für die Bewegung dieser Objekte/Schiffe bzw. wie funktioniert die Darstellung eben dieses Spielfeldes?[/quote]
Mir ist die Frage/Problemstellung nicht ganz klar. Du benötigst doch ein einfaches zweidimensionales Spielfeld? Wenn die Objekte pixelweise verschoben werden können reicht z.B. ein einfaches JPanel (falls Du GUI in Swing implementierst) auf dem Du das Objekt an der entsprechenden Position darstellst. Wenn Du mit Felder arbeitest musst Du dein Spielfeld in Felder einteilen und die Objekte in den Felder (anhand des Feldes kann man ja die Pixelpostion berechnen) darstellen.

Für Nutzereingaben grundsätzlich geeignet sind Tastatur, Maus, Eingabefelder (in Swing z.B. JTextField, JSpinner, JSlider…). Konkret die Drehung um eine exakte Gradzahl kann man z.B. über einen Komponente wie Spinner eingeben. Reicht es aus das Objekt “nur” per Augenmaß auszurichten, kann man sich an irgendwelche Tasten (z.b. die Cursortasten links/rechts) hängen.
Das Schiff steht dann am Ende der Drehung (um 17°) an der selben Position, halt nur (um 17°) gedreht.

[quote=Bulveye]Im Spiel ist es wichtig, wohin das Schiff “sieht”, denn man unterscheidet Bug- und Seitenwaffen, welche nur dann feuern können, wenn das gegnerische Schiff sich in dem jeweiligen Arc befindet.
Mathematisch (z.B. über die Winkelfunktionen) sehe ich kein Problem in der Bewegung, aber code-technisch habe ich hier noch wenig Erfahrung.[/quote]

Um die (neue) Position eines gegenstands zu berechnen der sich nicht genau auf der X oder Y Achse bewegt, kann ganz einfache Trigonometrie nutzen wenn man die Drehung des Gegenstandes kennt.

So ungefähr könnte das aussehehn


public void move(int distance)
{
// this.posX/Y ist die aktuelle Position auf der X/Y-Achse in Pixeln
// roaInRad ist die aktuelle Rotation in Radianten.     1° entspricht Pi/180 Radianten

this.posX += Math.cos(rotInRad) * distance;
this.posY += Math.sin(rotInRad) * distance;

}

Mfg,
Oneric

Danke Dir für die schnelle Antwort!
Ich werde versuchen, das pixelweise Verschieben und die Ausrichtung per Augenmaß über die Cursortasten zu implementieren.

Eine Frage dann wenn das Schiff positioniert ist:
Nehmen wir an ein Schiff hat sich 10 mm/pixel/… nach vorne bewegt, 17° nach rechts gedreht und weitere 10 mm/pixel/… nach vrone bewegt.
Dem Schiff gegenüber steht ein anderes Schiff. Ich kenne die Positionen der beiden Schiffe.
Wie kann ich nun feststellen, welcher arc meines schiffes feuern darf? (Also wie die Schiffe zueinander stehen)

Bulveye

Grade von Schiff zu Schiff
Winkel berechnen
Richtung + 45 bzw minus 45 grad ist vorne, Richtung +45 bis Richtung + 135 ist rechts,…