Schach Diagonalerichtung

Marmy

Mitglied
Hi :)
ich muss bei einer meiner Hausaufgaben eine "Schachspiel" schreiben (es hat andere Regeln).
Ich bin aber sein einiger Zeit jetzt schon am schreiben der Diagonalen richtung. ich habe mehrere Sachen ausprobiert aber leider komm ich nicht weiter.
Mein ziel ist es die zahlen 0 - 7 eine Richtung zu zuweisen. angefangen mit der 0 oben und dann die 1 rechts oben usw. aber die 1,3,5 und 7 sollen diagonalen sein. bei mir sind das im Moment aber alle felder zwischen den senkrechten und waagerechten...
ich muss auch mit den Abständen rechnen also dX und dY.

Hier meine methode für die richtung
Java:
public int getDirection(int dX, int dY) {
     //oben
        dX = dX/dX;
        dY= dY / dY;
        if (dX==0&&dY<0){
            return 0;
        }
        //oben links
        if (dX-1<0&&dY-1<0){
            return 7;
        }
        //links
        if (dX<0&&dY==0){
            return 6;
        }
        //links unten
        if (dX<0&&dY>0){
            return 5;
        }
        //unten
        if (dX==0&&dY>0){
            return 4;
        }
        //rechts unten
        if (dX+1>0&&dY+1>0){
            return 3;
        }
        //rechts
        if (dX>0&&dY==0){
            return 2;
        }
        //rechts oben
        if (dX>0&&dY<0) {
            return 1;
        }
        else return -1;
    }


Wär wirklich wirklich froh wenn mir jemand das erklären könnte :)
 

Blender3D

Top Contributor
Hi :)
ich muss bei einer meiner Hausaufgaben eine "Schachspiel" schreiben (es hat andere Regeln).
Es ist schwierig etwas zu erklären, ohne zu wissen, was die eigentliche Aufgabe ist.
Wenn ich aber von einem Schach ausgehe solltest du zuerst das Schachbrett, die Datenstruktur auf dem sich die Figuren bewegen, erstellen.
Jede Figur sollte dann wissen wie sie sich bewegen darf. z.B. Springer 1 gerade 1 schief. Das bedeutet wenn ich eine Figur ziehen möchte, kennt die Figur selbst anhand ihrer Position auf dem Schachbrett die möglichen Zielpositionen.
Zu deinem Code oben kann man nur sagen, dass er so nicht funktionieren kann.
Warum ?
z.B.
Java:
      ..
      dX = dX/dX;
      dY= dY / dY;
      if (dX==0&&dY<0)
           return 0;
Hier setzt du dX und dY gleich 1. Die folgende Bedingung wird nie ausgeführt.
Was Du wahrscheinlich möchtest ist es z.B. (1,1) --> oben rechts ( 1) , ( -1,-1 ) --> unten links (5) ..
Also ein Koordinatenpaar aus der Menge (1,-1,0) ---> ( 0,1, .. 7 ) zu wandeln.
Ob dich das in deiner Aufgabe wirklich zweckdienlich ist, kann ich ohne nähere Informationen zu deiner Aufgabe nicht wirklich beurteilen.
Hier ein Möglichkeit wie man das machen könnte.
Java:
public class TestSchach {
    public final static int TOP = 0;
    public final static int TOP_RIGHT = 1;
    public final static int RIGHT = 2;
    public final static int BOTTOM_RIGHT = 3;
    public final static int BOTTOM = 4;
    public final static int BOTTOM_LEFT = 5;
    public final static int LEFT = 6;
    public final static int TOP_LEFT = 7;
    public final static int NONE = 8;

    public static void main(String[] args) {
        if (getDirection(1, 1) == TOP_RIGHT)
            System.out.println("rechts oben");
    }

    public static int getDirection(int dx, int dy) {
        if (dx < -1 || dx > 1 || dy < -1 || dy > 1)
            throw new IllegalArgumentException("Erlaubte Werte sind (-1,0,1)");
        if (dx == 0) {
            if (dy == 0)
                return NONE;
            if (dy == 1)
                return TOP;
            if (dy == -1)
                return BOTTOM;
        }
        if (dy == 0) {
            if (dx == 1)
                return RIGHT;
            if (dy == -1)
                return LEFT;
        }
        if (dx == 1) {
            if (dy == 1)
                return TOP_RIGHT;
            if (dy == -1)
                return BOTTOM_RIGHT;
        }
        if (dy == -1)
            return BOTTOM_LEFT;
        return TOP_LEFT;
    }

}
 

Blender3D

Top Contributor
Hier ein Möglichkeit wie man das machen könnte.
Eine andere Variante.
Java:
public class TestSchach {
    public final static int NONE = 0;
    public final static int RIGHT = 1;
    public final static int LEFT = 2;
    public final static int TOP = 3;
    public final static int TOP_RIGHT = 4;
    public final static int TOP_LEFT = 5;
    public final static int BOTTOM = 6;
    public final static int BOTTOM_RIGHT = 7;
    public final static int BOTTOM_LEFT = 8;

    public static void main(String[] args) {
        System.out.println(getDirection(0, 1));
        for (int x = -1; x < 2; x++) {
            for (int y = -1; y < 2; y++)
                System.out.println(getDirection(x, y));
        }
    }

    public static int getDirection(int dx, int dy) {
         if (dx < -1 || dx > 1 || dy < -1 || dy > 1)
               throw new IllegalArgumentException("Erlaubte Werte sind (-1,0,1)");
        int x = dx;
        int y = dy;
        if (dx < 0)
            x = 2;
        if (dy < 0)
            y = 2;
        return x + y * 3;
    }

}
 

Ähnliche Java Themen

Neue Themen


Oben