0

現在、地形ジェネレーターを作成しています。すべてが 1 つのクラスで正常に動作しますが、アプリケーションを拡張する予定です。

現在、地形の生成、地形のペイント、場所の検索など、すべてを保持する JFrame クラスがあります。

地形を生成する別のクラスを追加したいのですが、このクラスを作成するときに、メインの JFrame クラスからフィールドにアクセスする必要があり、そうするとスタック オーバーフロー エラーが発生します。これが私のコードです。

public class Simulator extends Applet
{
//fields

public Simulator()
{
    grid = new int[100][100];
    inhabGrid = new boolean[grid.length][grid.length];
    gridSize = grid.length - 1;
    dist = grid.length;
            TerrainGenerator gen = new TerrainGenerator();
    setSize(dist,dist);
    seedGrid();
    findInhabLocation();
    printGridToConsole();
}

public void paint(Graphics g)   
{
    //panting the grid
}

public void seedGrid()
{
    //seeding

}

public boolean generateTerrain(int x1,int y1, int x2, int y2) 
{

    //terrain generator
}

public boolean mouseUp(Event evt, int x, int y)
{
    seedGrid(); //Create a new map
    findInhabLocation();
    repaint();
    printGridToConsole();
    return true;
}

public boolean keyEvents(Event evt, int x, int y)
{
    seedGrid(); //Create a new map
    findInhabLocation();
    repaint();
    printGridToConsole();
    return true;
}

public void findInhabLocation()
{
    //find best inhabitant location
}

public int locateWater(int x, int y)
{

    //finding closest water
}

public int locateJungle(int x, int y)
{
    //finding closest jungle
}


}
}

それは独自のクラスではうまく機能しますが、たとえばクラスを作成すると:

public class TerrainGenerator 
{
Simulator sim = new Simulator();
}

私はこれがコンストラクターと関係があることを知っており、それは私がやっている愚かなことです.このアプリをクラスに分割する最良の方法は何でしょう.

たとえば、「TerrainGenerator」クラスからメソッドを呼び出して、terrainGenerator.generateTerrain を呼び出すことができるようにしたい

4

3 に答える 3