public abstract class MapObject { private Coordinates coords; private MapObject parent; private World world; public MapObject (int nutrients, int y, int x, MapObject parent, World world) { this.coords = new Coordinates(y,x); this.parent = parent; this.world = world; this.assignNutrients(this.nutrients); /* assignNutrients luo tämän alueen joka ruutuun uuden (pienemmän) alueen. nutrient on suure joka kuvaa puun ilmestymisen ~todennäköisyyttä */ } public MapObject getParent() { return this.parent; } public int getY() { return this.coords.getY(); } } public class Coordinates { private int y,x; public Coordinates (int y, int x) { this.y = y; this.x = x; } public int getY () { return this.y; } } public class Area extends MapObject { public Area (int nutrients, int y, int x, LargerArea parent, World world){ super(nutrients,y,x,parent,world); } public Tile assignNutrients(int nutrients) { //... return new Tile(nutrients, y, x, this,this.world); } } public class Tile extends MapObject { public Tile (int nutrients, int y, int x, Area parent, World world){ super(nutrients,y,x,parent,world); this.getParent(); //toimii this.getY(); //toimii this.getParent().getY(); //antaa nullpointerexceptionin this.getParent().getParent(); //antaa nullpointerexceptionin this.getParent().returnIntegrerOne; //antaa nullpointerexceptionin } } /* Tässä esimerkissä World sisältää 1*1 LargerAreaa, kukin LargerArea sisältää n*n Areaa, joista kukin sisältää m*m Tileä. Softa kääntyy ongelmitta, ja ajokin menee läpi jos ongelmametodeita ei kutsu. */