OOP Snake game

farah

Mitglied
Hallo,
Ich muss das Spiel Snake Game programmieren.
dazu muss ich in meiner abgeleiteten Klasse “SnakeGame” eine innere Klasse “Snake” implementieren, in der die Position der Schlange auf dem Spielfeld in einem Attribut als Array von “Point-Objekten” gespeichert wird.
Vorher habe ich noch eine innere Klasse ”Point” implementiert. (AudGame Window wurde schon bereitgestellt)
Meine Teilaufgaben sind:
a) Die Position der Schlange auf dem Spielfeld wird in einem Attribut points als Array von
Point-Objekten gespeichert, jedes von der Schlange belegte Gitter-Quadrat entspricht also
einem Eintrag in diesem Feld.
b) Das Array enthält immer mindestens einen Punkt. Falls die Schlange gerade wächst, können
Einträge am Ende leer sein (d. h. die leere Referenz null als Wert haben)
Also ich weiß nicht, wie ich das Array von Point-Objekten speichern soll und in der Teilaufgabe b) wie ich mit null umgehen soll?
93EF14A4-DB6B-4125-A240-AD186CB26E20.jpeg
 

mihe7

Top Contributor

farah

Mitglied
Danke für deine Antwort :)
Ich denk, man sollte zweidimensionales Array anlegen, weil in der Klasse Point zwei Attributen angelegt worden!
Also bei der Teilaufgabe b) wie kann ich das Array so bestimmen dass, immer mindestens einen Punkt erhält, und ich glaub es sollte auch ein If-Statement hingelegt werden, sodass die Einträge am Ende leer sein können
 

mihe7

Top Contributor
Ich denk, man sollte zweidimensionales Array anlegen, weil in der Klasse Point zwei Attributen angelegt worden!
Nein. Jedes Element im Array ist ein Point und jeder Point hat zwei Koordinaten.

Also bei der Teilaufgabe b) wie kann ich das Array so bestimmen dass, immer mindestens einen Punkt erhält, und ich glaub es sollte auch ein If-Statement hingelegt werden, sodass die Einträge am Ende leer sein können
In Deinem Konstruktor bekommst Du doch Koordinaten. Aus diesen kannst Du ein Point-Objekt erzeugen und dieses Point-Objekt legst Du in das zuvor erzeugte Array.

Kann sein, dass Du irgendwo ein if-Statement brauchst, für das Anlegen ist es nicht erforderlich. Wenn Du ein Point-Array der Länge n anlegst, sind alle n Elemente erstmal null.
 

farah

Mitglied
Ich denk die TeilAufgabe kann hilfreich sein:
c) Das Attribut points muss natürlich initialisiert werden. Erstellen Sie dafür einen Konstruktor, dem drei int-Parameter übergeben werden: i) length ist die Länge der Schlange und damit auch die Länge des Arrays points. Falls
keine positive Zahl als Länge übergeben wurde, soll eine '"IllegalArgumentException"
geworfen werden.
ii) x und y sind die Gitter-Koordinaten des Anfangspunktes der Schlange. Legen Sie ein
einzelnes entsprechendes Point-Objekt an und speichern Sie es am Beginn von points.
Die weiteren Einträge bleiben für den Moment leer (null).
Ich bekomme auch Fehlermeldung in der Snake Klasse, für Übergabe Parameter (int y und int length )!
Java:
// point class

 public class Point{
   private int x, y;
    
 public Point(int x; int y){
this.x = x;
 this.y= y;
 }
     public int getX(){
return x;
     }
     public int getY(){
return y;
     }
  
}


//Snake class

public class Snake {

        int x = getX();
        int y = getY();
        Point[][] points = new Point[x][y];

        int length = points.length;

        public Snake(int x ;int y;int length) {
            if (length < 0) {
                throw new IllegalArgumentException();
            }


        }

    }
 

farah

Mitglied
😅
Ich bin ungefähr sicher, dass mindestens meine Point Klasse richtig implementiert wurde
Bearbeite jetzt aber die Snake Klasse
Java:
public class Snake {

        Point[] points;
        int length = points.length;

        public Snake(int x, int y, int length) {

            for (int i = 0; i <= length; i++) {
                if (length < 0) {
                    throw new IllegalArgumentException();
                }
            }


        }

    }
 

mihe7

Top Contributor
Ja, Point ist ok, Du könntest die Instanzvariablen noch final deklarieren, damit sie nach ihrer Initialisierung nicht mehr verändert werden können.

Bei Snake sieht es böse aus :) Ich geb Dir mal Starthilfe:
Java:
    public class Snake {

        private Point[] points; // private s. UML
//        int length = points.length; // raus damit

        public Snake(int x, int y, int length) {
            points = new Point[length]; // ein Point-Array der Länge length anlegen und der Instanzvariablen points zuweisen
            points[0] = new Point(x, y); // den ersten Punkt festlegen
        }
    }
Mehr (oder recht viel mehr) solltest Du hier gar nicht benötigen. Nachtrag: mit "hier" ist natürlich nur der Konstruktor gemeint.
 

mihe7

Top Contributor
Normalerweise würde ich x und y final deklarieren, aus dem o. g. Grund. Normalerweise ist ein UML-Diagramm auch so zu interpretieren, dass Weggelassenes nur "nicht im Diagramm gezeigt" bedeutet.

Jetzt ein großes Aber: das hier ist eine gestellte Aufgabe und da würde ich mich im Zweifel peinlichst genau an die Vorgaben halten. Hängt natürlich vom Aufgabensteller ab, den ich nicht kenne. Manche wollen Eigeninitiative sehen, andere nicht. Da könntest Du höchstens den Aufgabensteller fragen.
 

Neue Themen


Oben