# Schach / zweidimensionales Array



## fhaslbs (17. Jan 2012)

Hallo zusammen

Ich habe den Auftrag ein Schach zu programmieren ;(

nun überlege ich mir ob es möglich wäre das ganze in einem zweidimensionalen Array zu lösen - das würde die Regeln vereinfachen, da man sozusagen mit einer x und einer y-Achse schaffen könnte.

Meine vorstellung: z.B. der König bewegt sich von dem Feld [4][0] auf das Feld [5][1]. 
Das brauche ich: einen Zähler der mir angibt, um wie viel die x/y Achse sich verändert, in diesem Fall z.B 

xzaehler = 1
yzaehler = 1

Weiss jemand ob und wie so etwas in java möglich ist?

Vielen Dank für die Hilfe


----------



## faetzminator (17. Jan 2012)

Natürlich wär das in Java möglich. Allerdings ist es auch immer in einem eindimensionalem Array möglich, in dem man statt [c]field[x][y][/c] einfach [c]field[y * size + x][/c] verwendet - wobei [c]size[/c] natürlich 8 ist.
Aber wenn du hier solche Fragen stellst, würd ich dir überhaupt nicht empfehlen, irgendwas in Richtung Schach oder dergleichen zu implementieren sondern erst ein Mal monatelang die Grundlagen lernen und einfache Dinge programmieren.


----------



## fhaslbs (17. Jan 2012)

Danke für die Antwort

Die eindimensionale Lösung lass ich bewusst aus - das gibt nämlich Ärger mit dem Springer, wenn dieser nicht irgend wo in der Mitte steht... 


```
Natürlich wär das in Java möglich.
```
 Das denke ich auch - aber wie?

Ich habe bereits Monatelang rumprogrammiert - auch wenn es sich nicht so anhört wenn man meine Frage liest =)


----------



## SlaterB (17. Jan 2012)

ich könnte jetzt auch monatelang rumprobieren auf chinesisch 'Wulff muss weg' zu formulieren und würde doch nie zum Ziel kommen oder das nicht bemerken..,
lerne Java, lerne Dinge gedanklich zu struktieren, dann kommen vielleicht sinnvolle Fragen heraus

du kannst auch anderen Code posten, vom Spielfeld, Darstellung usw. um bisschen zu belegen dass du überhaupt irgendwas hast

die Frage lohnt generell nicht wirklich, hat fast keinen Inhalt,  1+1 kann man auf tausende Weisen darstellen,
in zwei Variablen, in einem Array, in einer Klasse mit zwei Attributen usw.,
ohne Konzept und Gesamtprogramm ist das eigentlich keine Frage


----------



## faetzminator (17. Jan 2012)

fhaslbs hat gesagt.:


> Die eindimensionale Lösung lass ich bewusst aus - das gibt nämlich Ärger mit dem Springer, wenn dieser nicht irgend wo in der Mitte steht...



Wieso denn? Egal ob du mit einem ein- oder zweidimensionalen Array arbeitest, kannst du immer alles mit x und y machen. Lediglich die Arrayzugriffe erfolgen dann wie von mir beschrieben über [c]y * size + x[/c].


----------



## fhaslbs (17. Jan 2012)

Hier ein Beispiel: 
Das Problem liegt darin, dass so das Feld nicht in Zeilen und Spalten eingeteilt wird:  Allgemein gibt es für den Spriner Mathematisch gesehen Acht Regeln, so wie du es ausdrückst würden sie so aussehen:

-(2*size)+1   //15 Felder zurück 
-(2*size)-1   //17 Felder zurück
+(2*size)-1   //15 Felder nach vorne
+(2*size)+1  //17 Felder nach vorne
-(1*size)+2  //10 Felder nach hinten
-(1*size)-2  //6 Felder nach hinten
+(1*size)+2  //10 Felder nach vorne
+(1*size)-2  //6 Felder nach vorne

Angenommen wir nummerieren das Feld durch von 0 bis 63, und der Springer steht auf a3 (Feldnummer 16) und wir wenden nun die Regel +(2*size)-1 an, wären wir auf dem Feld H4(Feldnummer 31), oder nicht?







PS: sollte ich mich irren bekommst du in wacken ein bier


----------



## SlaterB (17. Jan 2012)

wie gesagt wurde: ob eindimensional oder zweidimensional sagt nicht unbedingt etwas über die verwendeten Regeln aus,
niemand hat vorgeschlagen +15 zu rechnen,

auch für eindimensionale Position 16 kann man auf höherer Abstraktionsebene x=1,y=3 oder String "a3" oder was auch immer verwenden 
und dann prüfen ob man noch weiter nach links kann was bei x am linken Rand schwierig wird,
es muss nur an wenigen zentralen Programmstellen x/y auf eindimensionalen Array-Index umgerechnet werden, dann ist es ganz egal wie gespeichert wird,

freilich schadet es dann auch nicht, gleich ein 2D-Array zu nehmen, nur der Punkt ist dass die Entscheidung darüber nicht alles festlegt,
man kann genauso auch ein 2D-Array nehmen und Index 0-63..


----------



## faetzminator (17. Jan 2012)

fhaslbs hat gesagt.:


> Hier ein Beispiel:
> Das Problem liegt darin, dass so das Feld nicht in Zeilen und Spalten eingeteilt wird:  Allgemein gibt es für den Spriner Mathematisch gesehen Acht Regeln [...]


Natürlich, die gibts so oder so  Der Springer kann (wenn er sich auf einer geeigneten Position befindet), in 8 Richtungen hüpfen. Kommt aber nicht darauf an, denn du kannst eine Methode [c]Springer.move(...)[/c] machen, welche dann irgendwie auf dem Brett ein [c]move(Point from, Point to)[/c] - oder wie auch immer - aufruft. Ob dahinter nun ein 1- oder 2D Array steckt, ist wirklich egal 



fhaslbs hat gesagt.:


> Angenommen wir nummerieren das Feld durch von 0 bis 63, und der Springer steht auf a3 (Feldnummer 16) und wir wenden nun die Regel +(2*size)-1 an, wären wir auf dem Feld H4(Feldnummer 31), oder nicht?


 Da geh ich davon aus, denn 16+2*8-1 gibt 31.



fhaslbs hat gesagt.:


> PS: sollte ich mich irren bekommst du in wacken ein bier


Diesen Event hab ich schon vor ein paar Jahren aufgegeben...


----------



## fhaslbs (17. Jan 2012)

> Natürlich, die gibts so oder so Der Springer kann (wenn er sich auf einer geeigneten Position befindet), in 8 Richtungen hüpfen. Kommt aber nicht darauf an, denn du kannst eine Methode Springer.move(...) machen, welche dann irgendwie auf dem Brett ein move(Point from, Point to) - oder wie auch immer - aufruft. Ob dahinter nun ein 1- oder 2D Array steckt, ist wirklich egal



vielen Dank - genau diese Methode habe ich gesucht. Das nächste mal werde ich ein zweites mal herumsehen, bevor ich versuche ein Rad neu zu erfinden oder das Forum zu belästigen...



> Da geh ich davon aus, denn 16+2*8-1 gibt 31.



sind wir ja der gleichen Meinung



> Diesen Event hab ich schon vor ein paar Jahren aufgegeben...


Bin auch nicht so der Fan von 888 Kilometern Autobahn, aber wenn man in guter gesellschaft unterwegs ist...
--> egal ist der falsche ort um über wacken zu diskutieren.

Vielen Dank nochmals für den Tipp mit .move


----------



## faetzminator (17. Jan 2012)

Öhm wie meinst du den Tipp mit [c]move()[/c]  ? Ich hab mich hier nicht auf irgendwelchen existierenden Source code gestützt, sondern einfach meine Gedanken geschildert.



> Bin auch nicht so der Fan von 888 Kilometern Autobahn, aber wenn man in guter gesellschaft unterwegs ist...


Ich komm aus der Schweiz und war vier Mal dort, das ist nicht das Problem. Aber es wurde einfach in letzter Zeit zu sehr kommerzialisiert. Und die Ticketpreise zigfach erhöht (nicht, dass ich es nicht zahlen könnte...). Und all die neuen Regeln dort... Wacken war immer geil, weil eine Art friedliche Anarchie herrschte


----------

