OOP Spiel: Token auf einem Board bewegen

Kartoschka

Mitglied
In dieser Aufgabe wollen wir vereinfacht ein Spiel modellieren. Schreiben Sie hierzu eine Klasse Board zur Darstellung eines Spielfeldes und eine Klasse Token zur Darstellung eines Spielsteins. Erweitern Sie alle Klassen um geeignete getter- und/oder setter-Methoden. Sind getter- und/oder setter-Methoden für ein Attribut mit dem Namen Attributname sinnvoll vorhanden, nennen Sie die entsprechenden Methodennamen getAttributname und/oder setAttributname. Zum Beispiel lauten die getter- und setter-Methoden fur ein Attribut String name getName und setName. Schreiben Sie schließlich zu den folgenden Klassen eine separate Klasse
Main mit einer main-Methode. Diese Methode instanziiert mindestens ein beliebiges Spielbrett (Board) mit mindestens einem Spielstein (Token). Geben Sie den Zustand des Spielfeldes, sowie des Spielsteins auf dem Terminal aus. Dazu können Sie die Methode System.out.println() nutzen. In dieser Aufgabe können Sie davon ausgehen, dass alle Eingaben gültig sind. Somit brauchen Sie keine Randfalle, wie z.B. einen Überlauf, zu berücksichtigen. Zudem können Sie auch davon ausgehen, dass die Spielsteine auch am Spielfeldrand (z.B. auf
den Koordinaten (0,0)) stehen können. Außerdem können sich mehrere Spielsteine auf denselben Koordinaten befinden.

Klasse Board:

Das Brett hat eine Länge und Breite (int length und int width), die beim Instanziieren des Bretts mittels eines Konstruktors gesetzt werden müssen. Das Spielbrett ist wie ein Rechteck mit Koordinaten (0,0), (width,0), (0,length) und (width, length) vorstellbar.

Klasse Token:

Implementieren Sie eine Klasse Token, die einen Spielstein darstellt. Der Spielstein hat zwei Koordinaten (int x und int y). Außerdem hat der Spielstein ein weiteres Attribut: double quadraticDistance, das die bisher vom Spielstein zurückgelegte Distanz im Quadrat beinhaltet.

Implementieren Sie zwei geeignete Konstruktoren:
1) Der erste Konstruktor bekommt die 2 Koordinaten übergeben und initialisiert einen Spielstein auf diesen
Koordinaten. Das Attribut quadraticDistance wird hierbei auf 0 gesetzt.
2) Der zweite Konstruktor hat keine Parameter und platziert einen Spielstein auf die Koordinaten x=0 und y=0. Das Attribut quadraticDistance wird hier auch auf 0 gesetzt.

Der Spielstein hat auerdem zwei Methoden:

double distance(int x, int y) berechnet das Quadrat der Distanz, wobei die übergebenen int x und int y den neuen Koordinaten xnew und ynew entsprechen. Die Methode distance berechnet also (xnew - xold)² + (ynew - yold)².

Mit Hilfe der Methode boolean move(int x, int y) kann der Spielstein auf dem Spielbrett auf die neuen Koordinaten bewegt werden. Sind die neuen übergebenen Koordinaten negativ (x<0 und/oder y<0), darf der Spielstein nicht bewegt werden. In diesem Fall wird der Wert false zurückgegeben. Andernfalls werden die neuen Koordinaten gesetzt und es wird true ausgegeben. In diesem Fall, d.h. bei einer gültigen Bewegung, wird die distance-Methode aufgerufen und somit die durch diese Bewegung zurückgelegte Distanz im Quadrat berechnet. Anschlieend wird derWert des Attributs quadraticDistance aktualisiert, indem die berechnete Distanz im Quadrat mit der bisher zurückgelegten quadratischen Distanz, also mit dem bisherigenWert von quadraticDistance addiert wird. Sie können hier davon ausgehen, dass die neuen Koordinaten sonst immer gültig sind (z.B. sind die neuen Koordinaten positiv, sind sie stets innerhalb des Spielbretts).

Code der Klasse Board:
Java:
public class board {

private int length;
private int width;

// Konstruktor

public board(int length, int width) {
this.lenght=lenght;
this.width=width;
}

// get und set Methoden

public void setLength(int length) {
this.length=length;
}

public int getLength() {
return this.lenght;
}

public void setWidth(int width) {
this.width=width;
}

public int getWidth() {
return this.width;
}

}

Das Kompilieren der Klasse Board funktioniert fehlerfrei. Bin mir aber trotzdem nicht sicher, ob ich der Konstruktor und die set und get Methoden richtig sind laut Aufgabenstellung.

Code der Klasse Token:
Java:
public class Token {

int x;
int y;
double quadraticDistance;

// 1) Konstruktor

public Token(int x, int y) {
this.x=x;
this.y=y;
quadraticDistance=0;
}

// 2) Konstruktor

public Token() {
x=0;
y=0;
}

// set und get Methoden

public void setX(int X) {
this.x=x;
}

public int getX() {
return this.x;
}

public void setY(int y) {
this.y=y;
}

public int getY() {
return this.y;
}


public double distance(int x, int y) {
dis = Math.sqrt(x-this.x) + Math.sqrt(y-this.y);
}

public boolean move(int x, int y) {
if(x<0 || y<0) {
return false;
}

else {
distance(int x, int y);
return true;
quadraticDistance= quadraticDistance + distance;
}
}

}

Hier funktioniert das Kompilieren nicht. Kann mir jemand sagen, was ich falsch gemacht habe und ob das der Aufgabenstellung entspricht?
 

Kartoschka

Mitglied
Das hier:

javac Token.java
Token.java:49: error: '.class' expected
distance(int x, int y){
^
Token.java:49: error: ';' expected
distance(int x, int y){
^
Token.java:49: error: ';' expected
distance(int x, int y){
^
3 errors
 

Dompteur

Top Contributor
Java:
else {
distance(int x, int y);
return true;
quadraticDistance= quadraticDistance + distance;
}
Die 2. Zeile musst du folgendermaßen ändern: distance(x, y);
 

Kartoschka

Mitglied
Ok ich habe das mal geändert in:
Java:
else {
distance(x,y);
return true;
quadraticDistance= quadraticDistance + distance(x,y);
}

aber jetzt funktioniert meine Rechnung nicht:
Java:
public double distance(int x, int y) {
Math.sqrt(x-this.x) + Math.sqrt(y-this.y);
}

javac Token.java
Token.java:40: error: not a statement
Math.sqrt(x-this.x) + Math.sqrt(y-this.y);
^
1 error
 

Neue Themen


Oben