我必须设计一个可以维护环境的模拟器,该环境由以任意大小的矩形网格排列的一组补丁组成。每个补丁包含零个或多个木屑。
斑块可能被一个或多个白蚁或掠食者占据,它们是生活在世界中并根据简单规则行事的移动实体。
TERMITE可以从其当前贴片上拾取木片,也可以将其携带的木片掉落。通过在四个可能的方向之一上将白蚁从当前斑块随机移动到相邻斑块,它们在网格周围移动。新的白蚁可能会从卵中孵出,这可以通过环境中随机出现的新白蚁的出现来模拟。
捕食者的移动方式与白蚁类似,如果捕食者移动至
被白蚁占据,然后捕食者吃白蚁。
在初始化时,白蚁,捕食者和木片在环境中随机分布。然后,仿真将循环进行,并在每次迭代时获取新的环境状态。
我已经使用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 }
最佳答案
忠告:忘记UI和Swing,直到基础模型运行完美。如果您可以使模型与纯文本驱动的界面一起使用,则可以确保MVC分离良好。实际上,您在模型方面的困难与Java / Swing麻烦混杂在一起。
Java是一种面向对象的语言:白蚁,捕食者,木材,蛋,木板等类在哪里?将对象所需的行为封装在对象中会更好吗?您是否不希望能够在担心显示问题之前模拟规则驱动世界的行为?
您要解决所有这些错误。