現在、地形ジェネレーターを作成しています。すべてが 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 を呼び出すことができるようにしたい