JAdventure - Kurs zur Softwareentwicklung
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

2.2. Erweiterung des Modells

Level und GameObject erhalten ein zusätzliches Feld “graphicResource”. Da dies einfach ein Name ist, ist dies einfach ein String.

Level

package org.jadv.model.level;

// ...

/**
 * JAdventure Level
 */
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@EqualsAndHashCode(callSuper=true)
public class Level extends SavedObject implements Container {

	// ...

    /**
     * Height of the level.
     */
    private int height;

    /**
     * Resource name of a graphic.
     */
    private String graphicResource;

    /**
     * Game objects inside the level.
     */
    @JsonAdapter(ListOfSavedObjectAdapter.class)
    private final List<GameObject> objects = new ArrayList<>();

	// ...
}

(gekürzt auf die Änderungen)

GameObject

package org.jadv.model.objects;

import com.google.gson.annotations.JsonAdapter;
import lombok.*;
import org.jadv.model.Position;
import org.jadv.model.SavedObject;
import org.jadv.model.size.Size;
import org.jadv.serialization.SavedObjectAdapter;

/**
 * An Object inside the JAdventure game.
 */
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(callSuper=true)
public class GameObject extends SavedObject {

    /**
     * Name of the Object.
     */
    private String name;

    /**
     * Size of the Object.
     */
    @JsonAdapter(SavedObjectAdapter.class)
    private Size size;

    /**
     * Position of the Object.
     */
    private Position position;

    /**
     * Resource name of a graphic.
     */
    private String graphicResource;
}

Unit-Tests

Durch die Änderungen sind nun auch die Unit-Tests anzupassen:

Konstruktor von Level nimmt nun einen Parameter mehr

Beim Konstruktor der Klasse Level muss nun ein Parameter mehr angegeben werden. Daher fügen wir bei den Aufrufen als letzten Parameter noch “testlevel” hinzu.

Level level = new Level("TestLevel", 1000, 1000, "testlevel");

Das JSON des serialisierten Level ändert sich

Das Feld graphicResource wird nun natürlich auch mit serialisiert und muss daher entsprechend mit aufgeführt werden. Dadurch ändert sich der JSON String in den Unit-Tests von ListOfSavedObjectAdapterTest:

String jsonLevel = "{\"name\":\"TestLevel\",\"width\":1000,\"height\":1000,\"graphicResource\":\"testlevel\",\"objects\":[{\"name\":\"TestObject\",\"size\":{\"width\":10,\"height\":10,\"type\":\"org.jadv.model.size.RectangleSize\"},\"position\":{\"x\":1,\"y\":2},\"type\":\"org.jadv.model.objects.GameObject\"},{\"name\":\"TestObject2\",\"size\":{\"width\":10,\"height\":10,\"type\":\"org.jadv.model.size.RectangleSize\"},\"position\":{\"x\":2,\"y\":3},\"type\":\"org.jadv.model.objects.GameObject\"}],\"type\":\"org.jadv.model.level.Level\"}";