2011-01-12 12 views
0

環境を維持するシミュレータを設計する必要があります。これは、任意のサイズの長方形のグリッドに配置されたパッチの集合で構成されています。各パッチには、0個以上の木片が含まれています。Javaを使用したシロアリコロニーシミュレータ

パッチは、世界中に存在し、簡単なルールに従って動作するモバイルエンティティである1つ以上のシロアリまたは捕食者によって占有されている可能性があります。

TERMITEは、現在装着されているパッチから木材チップをピックアップしたり、搭載している木材チップを落とすことができます。シロアリは、4つの可能な方向のうちの1つで、現在のパッチから近隣のパッチに無作為に移動することによって、グリッドの周りを移動します。新しいシロアリは卵から孵化することがあり、これは環境内のランダムなパッチで新しいシロアリの出現によってシミュレートされます。

PREDATORはシロアリと同様に動きますが、捕食者がシロアリが占めるパッチ に移動すると、捕食者はシロアリを食べます。

初期状態では、シロアリ、捕食者、木材チップは環境内にランダムに分布しています。シミュレーションはループで進行し、環境の新しい状態が各反復で取得されます。

私はJPanelを使ってアリーナをデザインしましたが、そのアリーナに木材、シロアリ、捕食者をランダムに配置することはできません。誰も私を助けることができますか?

アリーナのための私のコードは次のとおりです。

01 import java.awt.*; 
02 import javax.swing.*; 
03 
04 public class Arena extends JPanel 
05 { 
06   private static final int Rows = 8; 
07   private static final int Cols = 8; 
08   public void paint(Graphics g) 
09    { 
10     Dimension d = this.getSize(); 

11     // don't draw both sets of squares, when you can draw one 
12     
         // fill in the entire thing with one color 
13     
         g.setColor(Color.WHITE); 
14     
         // make the background 
15     
         g.fillRect(0,0,d.width,d.height); 
16     
         // draw only black 
17     
         g.setColor(Color.BLACK); 
18     
         // pick a square size based on the smallest dimension 
19     
         int sqsize = ((d.width<d.height) ? d.width/Cols : d.height/Rows); 
20     
         // loop for rows 
21     
         for (int row=0; row<Rows; row++) 
22     
          { 
23       int y = row*sqsize; // y stays same for entire row, set here 
24       int x = (row%2)*sqsize; // x starts at 0 or one square in 

25       for (int i=0; i<Cols/2; i++) 

26        { 

27        // you will only be drawing half the squares per row 

28        // draw square 

29        g.fillRect(x,y,sqsize,sqsize); 

30        // move two square sizes over 

31        x += sqsize*2; 

32        } 

33      } 

34 

35   } 

36 

37 
38 
39   public void update(Graphics g) { paint(g); } 
40 
41 
42 
43   public static void main (String[] args) 
44   { 
45 
46     JFrame frame = new JFrame("Arena"); 
47     frame.setSize(600,400); 
48     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
49     frame.setContentPane(new Arena()); 
50     frame.setVisible(true); 
51   } 
52 
53 } 
+0

ような何かを得るために

コードの各行の先頭に4つのスペースを追加してください。これにより、コードを読みやすくすることができます。 – yurib

+4

アリーナ内に木材、シロアリまたは捕食者を無作為に配置しようとする試みもあります。何を試しましたか?あなたが与えられたコードを投稿して、誰かがあなたの任務を遂行することを期待しないでください。 –

答えて

0

すでにグリッドを持っている、と私が正しくあなたを理解していれば、あなたはランダムな座標を生成する方法を知りたいように見えます。

int xcoord = Math.floor(Math.random()* Rows);次のようなものを使用して、おそらくそれについて説明します。

int ycoord = Math.floor(Math.random()* Cols);

これはランダムな座標を取得します。空きスペースに着陸するまでこれを繰り返さなければなりません。

4

アドバイスの言葉:基本的なモデルが完全に動作するまでUIとスイングを忘れてしまいます。テキストのみのインターフェースを使用してモデルを動作させることができれば、良いMVC分離が確実に得られます。つまり、モデルの問題はJava/Swingの問題に混乱します。

Javaはオブジェクト指向言語です:シロアリ、プレデター、ウッド、エッグ、ボードなどのクラスはどこですか?あなたはオブジェクトの中で必要な振る舞いをカプセル化するほうが良いのではないでしょうか?あなたは、表示問題を心配する前に、あなたのルール駆動型世界のふるまいをシミュレートできるようにしたくないですか?

これは間違いありません。

1

データを表現するためにパネルを使用しないようにしてください。二次元配列を使用して表現し、PanelGraphicsオブジェクトと2次元配列の2つの引数を取得する関数を作成することをおすすめします。 2次元配列はint[][] board = new int[rows][cols]

関連する問題