我必须用Java编写Rabbit hunt程序,它有4个输入,我已经编程了3个输入:兔子数量,列数和行数。问题出在我尝试使用线程并让兔子使用重绘移动,什么也没发生。
我根据用户的输入创建新的道路对象
rara = new Road(numofcol, numofrow, numofrabb);
frame.add(rara, BorderLayout.CENTER);
frame.getContentPane().validate();
frame.getContentPane().repaint();
然后创建线程,并执行run():
public void run(){
while (true==true) {
rara.step();
rara.bigstep();
frame.repaint();
}
其中step()和bigstep是我用于更改野兔和狼所在区域的函数:
public void step(){
for(int a=0;a<rabits.size();a++){
Field the_field= rabits.get(a).field;
int rand_number= the_field.move(the_field, wolfs.get(0));
if(Field.selectField(rand_number).moose==true){
//nic nie robi
}
else {
rabits.get(a).changeField(Field.selectField(rand_number));
for (int c = 0; c < rabits.size(); c++) {
Field the_second_field= rabits.get(c).getField();
repaint();
}
}
}
}
public void bigstep(){
wolf big_bad_wolf= wolfs.get(0);
Field the_third_field= big_bad_wolf.getfield_wolf();
int xw = the_third_field.getX();
int yw = the_third_field.getY();
double england=0;
ArrayList<Field> english= new ArrayList<Field>();
for(int d=0;d<rabits.size();d++){
Field eng= rabits.get(d).getField();
int xm = eng.getX();
int ym = eng.getY();
double score = Math.sqrt((xw-xm)^2+(yw-ym)^2);
if(score>england){
england=score;
english.clear();
english.add(eng);
}
else if(score==england){
english.add(eng);
}
}
Field the_forth_field= english.get(ra.nextInt(english.size()));
wolfs.get(0).changeField(the_forth_field);
this.repaint();
}