Netzwerkschach in JAVA

Status
Nicht offen für weitere Antworten.

Ohne?

Mitglied
Hallo liebe Community,

Als Projektarbeit in der Schule habe ich mich für ein Netzwerkschach entschieden.

Nun habe ich eine Frage zu einer Methode der Fachklasse Springer:

diese Methode gibt mir als boolean zurück, ob der Zug eines Springers möglich ist.
Dabei werden die Koordinaten des Startfelds und des Zielfelds angegeben.

hier der Code meiner Methode:
Java:
	public boolean moeglichZug(int pyVonFeld, int pxVonFeld, int pyZuFeld, int pxZuFeld)
	{
		boolean a=false;
		
		int i1=pxVonFeld;
		int i2=pxZuFeld;
		int y1=pyVonFeld;
		int y2=pyZuFeld;
		
		if(i2-i1==2 && y2-y1==-1)
		{
			return a=true;	
		}
		if(i2-i1==1 && y2-y1==-2)
		{
			return a=true;	
		}
		if(i2-i1==-1 && y2-y1==-2)
		{
			return a=true;	
		}
		if(i2-i1==-2 && y2-y1==-1)
		{
			return a=true;	
		}
		if(i2-i1==-2 && y2-y1==1)
		{
			return a=true;	
		}
		if(i2-i1==-1 && y2-y1==2)
		{
			return a=true;	
		}
		if(i2-i1==1 && y2-y1==2)
		{
			return a=true;	
		}
		if(i2-i1==2 && y2-y1==1)
		{
			return a=true;	
		}
		return a;	
	}
Nun ist es umständlich, immer 4 Werte eingeben zu müssen, daher möchte ich nun nur das Startfeld angeben und alle möglichen Feldern sollen als ein array zurückgegeben werden (immer y1,x1,y2,x2...).

hier die neue Methode die ich überlegt habe:
Java:
	public int[] moeglichZug_Array(int pyVonFeld, int pxVonFeld)
	{	
		int y1= pyVonFeld;
		int x1= pxVonFeld;
		
		int[] array = new int[16]; //Da es max 2*8 Koordinaten gibt
		

			array[0]=y1-2;
			array[0]=x1-1;

		

		return array;
	}
Nur habe ich das kleine Problem, dass die Speicheradresse des arrays zurückgeliefert wird, wenn ich die Methode aufrufe, anstatt die Inhalte.

Hat jemand von euch eine Idee?

Ich währe euch echt dankbar
Ohne?
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
*Kristallkugel auspackt*

Ah, du rufst auf
int array[] = machDenArray();
System.out.println("Array: "+array);

Und dort erscheint nur [@34beef123

Du mußt
System.out.println("Array: "+Arrays.toString(array));
machen.


Wenn es aber darum geht, den Array über's Netz zu übertragen, musst du beschreiben, wie du das bisher machst.
 

Schandro

Top Contributor
Du brauchst nicht nach jedem if(..) "return a=true/false" schreiben und am Schluss nochmal return a.

Sobald return aufgerufen wird, ist die Methode zuende.

(Ausnhame: Ein try{...}finally{..} Block, aber sowas benutzt du ja nicht)

Übrigens würd ich dir insgesamt empfehlen, eine Containerklasse "Field" zu machen, wo man die x- und y-Koordinate eines Feldes zusammen speichern kann.
 
Zuletzt bearbeitet:

Ohne?

Mitglied
*Kristallkugel auspackt*
Du mußt
System.out.println("Array: "+Arrays.toString(array));
machen.

Also ich rufe ja die Methode so auf: System.out.print(s1.moeglichZug_Array(5,7));
s1 steht für das Objekt vom Typ Springer


so meinst du das bestimmt nicht: System.out.print(s1.moeglichZug_Array(5,5).toString());

Könnt ihr bitte noch mal helfen?

Danke Ohne?
 
Zuletzt bearbeitet:

Schandro

Top Contributor
Die Methode
Arrays.toString
erwartet irgendein Array als Parameter und gibt einen String zurück.

Das heisst in die Klammer von Arrays.toString kommt die Methode die dein Array zurückgibt, und um das ganze kommt die Klammer vom System.out.println
 

Ohne?

Mitglied
Also so dann: System.out.print(Array.toString(s1.moeglichZug_Array(5,5)));

benötigt man dann noch einen bestimmten import?

Gruß
 

Marco13

Top Contributor
Du solltest dir zuerst die Fähigkeiten aneignen, die nötig sind, um herauszufinden, dass man dafür noch
import java.util.*;
braucht. (Z.B. "java sun Arrays" in eine Suchmaschine eintippen)
 

Ohne?

Mitglied
danke es hat geklappt.
Man kann es lange versuchen, wenn da ein s bei Array(s)
fehlt :)

System.out.print(Arrays.toString(s1.moeglichZug_Array(5,5)));

danke für eure Hilfe:)

Ohne?
 

Marco13

Top Contributor
Vielleicht noch nebenbei: WAS genau du mit dem Array dann vorhast, ist mir nicht ganz klar. Wenn das in einer KI verwendet werden soll, gäbe es evtl. günstigere Alternativen. Wenn es nur für die Überprüfung der Eingabe eines meschlichen Spielers ist, ist das aber OK.
 

Ohne?

Mitglied
Also folgendes habe ich mir mit dem Array gedacht:

Wenn ich z.B. den Springer anklicke, dann sollen alle möglichen Felder rot eingefärbt werden. Ob nun einer meiner Figuren oder der Gegner auf einem möglichen Feld steht wird dabei noch nicht berücksichtigt.
Das Array soll einfach weiterverarbeitet werden, um letztlich alle möglichen Felder zu erhalten und diese dann einzufärben.


Oder was schlägt ihr mir vor?
 

Marco13

Top Contributor
Janeee, dafür ist das wie gesagt OK. Für eine KI müßte man sich eben sowieso eine "allgemeine" (und effiziente) Datenstruktur für Züge überlegen, d.h. das kann schon deutlich aufwändiger werden. Für solche GUI-Sachen ist das primäre Ziel: Bequeme und leicht verständliche Verwendbarkeit. (Und Themenbedingt sind auch (ansonsten "klassische") Anforderungen wie Erweiterbarkeit hier kein Thema: So wie der Springer springt, springt er schon immer, und wird er immer springen :) )

EDIT: Aber in bezug auf die einfache Verwendung hat Schandro schon recht: Eine Klasse "Field" oder "Position" statt eines Arrays (wo man beim Zugriff an Position 'n' nicht weiß, ob man da nun eine x- oder y-Koordinate bekommt) wäre vielleicht ganz nett. Denk' mal drüber nach, an wie vielen Stellen du mit den (x,y)-Koordinaten von Feldern rumhantieren musst...
 
Zuletzt bearbeitet:

Schandro

Top Contributor
Nö. Ne eigene Klasse, wo man dann auch noch andere Methoden/Membervarialbe/usw.. unterbringen kann.

Außerdem speichert "Point" double Werte, ist also grundsätzlich nicht dafür ausgelegt genaue Indexe zu enthalten.
 

Marco13

Top Contributor
Von verletzten Naming-Conventions, nichtssageneden Methodennamen, schrechlichstem Denglisch und Tippfehlern (hey, das sind ja gleich 4 Wünsche auf einmal - das geht nun wirklich nicht - DOCH! Mit "getStr_Groese" :autsch: ) mal abgesehen: "Turm" und "Läufer" erben von "Dame" ???:L "Extends" ist eine "ist-ein"-Beziehung. Die Beziehung, die du jetzt modelliert hast, ist als: "Ein Turm IST EINE Dame" .... ?!
 

Ohne?

Mitglied
"Turm" und "Läufer" erben von "Dame" ???:L "Extends" ist eine "ist-ein"-Beziehung. Die Beziehung, die du jetzt modelliert hast, ist als: "Ein Turm IST EINE Dame" .... ?!
Ja ich dachte mir, dass der Turm "nur" eine Zugmöglichkeit hat, entweder horizontal oder vertikal, beim Läufer ist es dabei immer nur diagonal. Und Weil die Dame beide Zug varianten hat, dachte ich mir, dass ich den Läufer und den Turm mit der Dame beschreiben kann...

Guß
 

Marco13

Top Contributor
Die Intention ... ist ... nachvollziehbar. Aber es ist wichtig, dass durch eine Vererbung keine Einschränkung beschrieben wird - nicht zuletzt weil dadurch das Liskov substitution principle - Wikipedia, the free encyclopedia verletzt wird.

Es wäre ... aus rein theoretisch-architektonischer Sicht vielleicht noch vertretbar, wenn es umgekehrt wäre: "Dame extends Turm", denn sie erweitert ihn ja quasi um die Fähigkeit, auch diagonal gehen zu können. Genausogut könnte man sagen "Dame extends Läufer", dann sie erweitert ihn ja darum, horizontal&vertikal gehen zu können. Da wäre dann (GANZ theoretisch!) Mehrfachvererbung sinnvoll, und GANZ theoretisch und abstrakt könnte man sagen
Code:
interface HorizontalUndVertikalZiehenKönner { ... }
interface DiagonalZiehenKönner { ... }

class Turm implements HorizontalUndVertikalZiehenKönner { ... }
class Läufer implements DiagonalZiehenKönner { ... }

class Dame implements HorizontalUndVertikalZiehenKönner, DiagonalZiehenKönner {}

Aber wie gesagt: Alles ganz theoretisch und abstrakt - objektiv-praktisch gesehen ist das gröbster Unfug ("over-engineering"), weil die Figuren beim Schach vorgegeben sind, und einem die Interfaces nichts bringen außer Schreibarbeit und einer komplizierteren Struktur.

Überleg' dir lieber genauer, was in das Interface/die Klasse "Figur" rein muss. Wenn die z.B. eine abstrakte Methode hat wie
Code:
public Feld[] getErreichbareFelder();
dann können alle Figuren davon erben, und diese Methode ganz pragmatisch und für sie passend implementieren. Ist aber nur ein ("unverbindlicher") Vorschlag.

Übrigens ist es empfehlenswert, Modell und View zu trennen: Im Moment hat deine "Brett"-Klasse eine "zeichne"-Methode - das sollte so nicht sein. Stattdessen solltest du (speziell weil es um Netzwerkschach geht) das Spiel komplett abstrakt und eigenständig implementieren. Und wenn du mit dem Spiel und der ganzen Steuerungslogik usw. fertig bist, kannst du noch das GUI dazubasteln. In der GUI (View) gäbe es dann sowas wie einen "BrettZeichner", der ein Brett übergeben bekommt, und es z.B. in ein JPanel reinzeichnen kann.

Und auch noch ganz nebenbei: Schach (also nur das Spiel an sich) ist aus Software-Engineering-Sicht ein bißchen ein Spezialfall: Es ändert sich nie mehr etwas. Es wird nie zusätzliche Figuren geben, die Figuren werden nie etwas anderes können, usw - das ganze ist recht "starr". Zusätzlich gibt es aber einen Haufen Spezialfälle, die einer "Vereinheitlichung", die man bei einem theoretischen Entwurf häufig zu maximieren versucht, entgegenstehen:
- Eine Figur bewegt sich IMMER senkrecht, waagerecht oder diagonal - AUSSER den Springern
- Wenn man eine gegnerische Figur schlägt, dann IMMER weil eine eigene Figur ihren Platz engenommen hat - AUSSER beim Schlagen en passant.
- Es wird in jedem Zug IMMER nur eine Figur bewegt - AUSSER bei der Rochade
- Ein König kann IMMER nur ein Feld weit laufen - AUSSER bei der Rochade
- Man kann eine Figur IMMER auf ein freies Feld ziehen - AUSSER wenn dadurch der eigene König im Schach steht
...

Das sind Sachen, die man von vornherien berücksichten sollte. Noch ein (auch unverbindlicher) Tipp: Erstelle dir eine Klasse "Zug", die ALLE relevanten Informationen über einen Zug speichert (Start- und Zielfelder, geschlagene Figur, etc...). Wenn du es schaffst, irgendwo zwei Methoden zu haben
Code:
brett.macheZug(zug);
// und
brett.macheZugRückgängig(zug); // !!!
kannst du einen Lehrer vielleicht noch mit einer kleinen, rudimentären KI beeindrucken. (Viel mehr als diese beiden Methoden braucht man dafür erstmal nicht)
 

Ohne?

Mitglied
Folgendes Problem:

Es tauchte soeben die Frage auf, wie man eine externe .jar-Datei ausführen kann.

Es soll durch einen Klick auf den Button eine externe .jar-Datei ausgeführt werden. Durch den Buttonklick sollen Parameter an die .jar-Datei übergeben werden (diese sind dann in args[0],args[1]...usw.).

Was benötige ich im Quellcode, um die .jar-Datei ausführen zu können.

Gruß Ohne?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
A Minecraft Java Buch fehlermeldung Spiele- und Multimedia-Programmierung 67
yakazuqi Minecraft java.lang.Error: Watchdog Spiele- und Multimedia-Programmierung 3
L Fehler bei "Nochmal Spielen" (Java) Spiele- und Multimedia-Programmierung 1
N Minecraft Java Error Spiele- und Multimedia-Programmierung 6
M "Java Datei" Cannot be resolved to a variable Spiele- und Multimedia-Programmierung 2
1Spinne Minecraft Fabric Modding Java Error Spiele- und Multimedia-Programmierung 2
Joris Minecraft Minecraft Java Server Spiele- und Multimedia-Programmierung 6
Shanic Minecraft Minecraft Forge Server "Falsche Java Version" Spiele- und Multimedia-Programmierung 6
O Browser-basiertes online Pokerspiel mit Java Spiele- und Multimedia-Programmierung 1
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
G VST-Plugins in Java verwenden Spiele- und Multimedia-Programmierung 0
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
D Minecraft [Minecraft] Java Start Fehler (Core-Dump) Spiele- und Multimedia-Programmierung 1
T Welche packages aus der java api doku ist hilfreich zur Android Spieleprogrammierung Spiele- und Multimedia-Programmierung 2
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
C Java findet FluidSynth nicht Spiele- und Multimedia-Programmierung 2
I Java Andere Fenster in Borderless-Mode setzen Spiele- und Multimedia-Programmierung 16
leon_krys Java-Bußgeldrechner Spiele- und Multimedia-Programmierung 5
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
P Website mit Java Backend? Spiele- und Multimedia-Programmierung 1
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J Fertigungstechnik.. PLS HALP.. Quellcode vom Text in java-Klasse speichern Spiele- und Multimedia-Programmierung 2
E Kalah Java Implementation Spiele- und Multimedia-Programmierung 1
G [Java] Vereinfachung von Boolean Abfragen Spiele- und Multimedia-Programmierung 3
G [LibGDX/Java] ArrayList Object Speicher Spiele- und Multimedia-Programmierung 3
T Java 3D Spiele- und Multimedia-Programmierung 2
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
J Java Buttons Spiele- und Multimedia-Programmierung 6
T Java Kalender Spiele- und Multimedia-Programmierung 5
Ice4P4rty Java Optische Oberfläche Spiele- und Multimedia-Programmierung 2
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
N Spiele-Menü in Java Spiele- und Multimedia-Programmierung 9
J HDMI Ausgänge mit Java programmieren? Spiele- und Multimedia-Programmierung 18
H Yu-Gi-Oh! Mit Java was tun? Spiele- und Multimedia-Programmierung 6
G Component System Java 2D Game LibGDX Spiele- und Multimedia-Programmierung 6
S Pong java.lang.StackOverflowError Spiele- und Multimedia-Programmierung 3
C Java aus Klasse rausgehen Spiele- und Multimedia-Programmierung 2
MaxG. Java Internet Radio Spiele- und Multimedia-Programmierung 6
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
P java.lang.NoClassDefFoundError: in Greenfoot Spiele- und Multimedia-Programmierung 0
G Java Achsen invertieren Spiele- und Multimedia-Programmierung 2
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
$ Einstieg in Java Game Development Spiele- und Multimedia-Programmierung 11
BraunBerry Java Game Pixel "einfärben" Spiele- und Multimedia-Programmierung 6
BraunBerry Java Game verbesserte Kollisionserkennung Spiele- und Multimedia-Programmierung 18
BraunBerry Java Game Waypoint System Spiele- und Multimedia-Programmierung 3
S Hilfe bei Java Gui Spiele- und Multimedia-Programmierung 2
D Java sound pulseaudio Spiele- und Multimedia-Programmierung 0
David Schwarzbeck Java 3 dimensionale Kollisions Abfrage Spiele- und Multimedia-Programmierung 2
M Gesellschaftsspiel Mühle in Java programmieren Spiele- und Multimedia-Programmierung 3
beatles Java Minesweeper - OS X und Win7 Unterschied Spiele- und Multimedia-Programmierung 2
D Minecraft Java JDK installiert - Minecraft läuft nichtmehr in 64 Bit Spiele- und Multimedia-Programmierung 2
E TMX - Dateien in Java laden Spiele- und Multimedia-Programmierung 1
K Erstellen eines Fotoalbums mit Java Spiele- und Multimedia-Programmierung 8
windl MoviePlayer in Java Spiele- und Multimedia-Programmierung 0
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F Klausurersatz: Ein Java-Programm erstellen und dieses präsentieren. Spiele- und Multimedia-Programmierung 2
E Java Jump and Run Map zu groß Spiele- und Multimedia-Programmierung 14
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
J programm mit java-plugin Spiele- und Multimedia-Programmierung 2
D Java Webgame, welche Frameworks oder Techs sind von Nöten? Spiele- und Multimedia-Programmierung 5
P Java 2D Bug? Spiele- und Multimedia-Programmierung 8
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
R Java App sendet Midi Daten über Flash Spiele- und Multimedia-Programmierung 3
O Java Zeile aus Textdatei zufällig ausgeben Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
G Alle Referenzen zu einer Klasse aus Java Bytecode ersetzt, JVM sucht trotzdem diese Klasse Spiele- und Multimedia-Programmierung 1
J Java Kollisionsabfrage Spiele- und Multimedia-Programmierung 21
Flo. android java tastatureingaben abfangen. Spiele- und Multimedia-Programmierung 1
J Java Steuerberechnung hilfe Spiele- und Multimedia-Programmierung 17
C Export als .jar funktioniert nicht richtig (JAVA 3D) Spiele- und Multimedia-Programmierung 5
P Java Grafiken mit Rechnungen verknüpfen Spiele- und Multimedia-Programmierung 4
U Minecraft Mit Java auf Minecraft Server anmelden Spiele- und Multimedia-Programmierung 11
F Das sag mir einer Java ist plattform unabhänig ! Spiele- und Multimedia-Programmierung 10
C virtueller stereomix (java sound API) Spiele- und Multimedia-Programmierung 0
S Engine2D - Java 2D Engine Spiele- und Multimedia-Programmierung 20
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
C Java Kollisionserkennung Spiele- und Multimedia-Programmierung 4
U Blender in Java Spiele- und Multimedia-Programmierung 8
J Java Fussballspiel Player-KI in der Bewegungsphase Spiele- und Multimedia-Programmierung 4
K Java 15/Slide/Boss Puzzle Spiele- und Multimedia-Programmierung 2
T Java 3D - Step oder IGES Spiele- und Multimedia-Programmierung 1
H 3D Spiele mit Java - Diskussion Spiele- und Multimedia-Programmierung 35
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
M Bilder in Java Spiele- und Multimedia-Programmierung 7
A Minecraft Java Ubuntu Minecraft Server startet nicht - ERROR (SIGSEGV) Spiele- und Multimedia-Programmierung 7
N Minecraft java lernen minecraft Spiele- und Multimedia-Programmierung 20
J 2d Ansicht mit Java 3d Spiele- und Multimedia-Programmierung 13
F Abbyy finereader aus java starten, Ergebnis zurück? Spiele- und Multimedia-Programmierung 2
P Zeichenübungen mit Java Spiele- und Multimedia-Programmierung 4
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
I Minecraft Java programmierungs fehler "MineCraft" Spiele- und Multimedia-Programmierung 6
J Java 2D Sicht Spiele- und Multimedia-Programmierung 13
H wma Datei abspielen: java.io.IOException: Resetting to invalid mark Spiele- und Multimedia-Programmierung 11
M Würdet ihr sagen Java Applets eignen sich gut Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben