001    import swarm.*;
002    import swarm.activity.*;
003    import swarm.defobj.*;
004    import swarm.objectbase.*;
005    import swarm.space.*;
006    import swarm.collections.*;
007    
008    public class ModelSwarm extends SwarmImpl{
009            /** lispAppArchiverのためにはpublicでなければならない。 */
010            public int worldXSize, worldYSize;
011            /** lispAppArchiverのためにはpublicでなければならない。 */
012            public double seedProb;
013            /** lispAppArchiverのためにはpublicでなければならない。 */
014            public double bugDensity;
015            
016            FoodSpace food;
017            Grid2d world;
018            Bug reportBug;
019            
020            List bugList;
021            ActionGroup modelActions;
022            Schedule modelSchedule;
023            
024            public ModelSwarm(Zone aZone){
025                    super(aZone);
026                    worldXSize = 80;
027                    worldYSize = 80;
028                    seedProb = 0.8;
029                    bugDensity=0.1;
030            }
031            
032            public Object buildObjects(){
033                    Bug aBug;
034                    int x,y;
035                    
036                    food=new FoodSpace(this,worldXSize,worldYSize);
037                    food.seedFoodWithProb(seedProb);
038                    
039                    world=new Grid2dImpl(this,worldXSize,worldYSize);
040                    world.fillWithObject(null);
041                    
042                    bugList=new ListImpl(this);
043                    
044                    for (y = 0; y < worldYSize; y++){
045                            for (x = 0; x < worldXSize; x++){
046                                    if (Globals.env.uniformDblRand.getDoubleWithMin$withMax(0.0,1.0) < bugDensity){
047                                            aBug=new Bug(this);
048                                            aBug.setWorld$Food(world,food);
049                                            aBug.setX$Y(x,y);
050                                            bugList.addLast(aBug);
051                                    }
052                            }
053                    }
054                    
055                    reportBug=(Bug)bugList.removeFirst();
056                    bugList.addFirst(reportBug);
057                    
058                    return this;
059            }
060            
061            public Object buildActions(){
062                    modelActions=new ActionGroupImpl(this);
063                    try{
064                            modelActions.createActionForEach$message(bugList,
065                                    new Selector(Class.forName("Bug"),"step",false));
066                    } catch (Exception e) {
067                            System.out.println ("Exception: " + e.getMessage ());
068                            System.exit(1);
069                    }
070                    
071                    try{
072                            modelActions.createActionTo$message(reportBug,
073                                    new Selector(Class.forName("Bug"),"report",false));
074                    } catch (Exception e) {
075                            System.out.println ("Exception: " + e.getMessage ());
076                            System.exit(1);
077                    }
078                    
079                    modelSchedule=new ScheduleImpl(this,1);
080                    modelSchedule.at$createAction(0,modelActions);
081                    return this;
082            }
083            
084            public Activity activateIn(Swarm context){
085            super.activateIn(context);
086            modelSchedule.activateIn(this);
087                    return getActivity();
088            }
089    }