-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimulation.js
More file actions
59 lines (45 loc) · 1.19 KB
/
simulation.js
File metadata and controls
59 lines (45 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
var Simulation = {
GameOfLife_Step : function (world) {
var altGrid = world.cloneGrid();
world.forEachAgent(function (agent) {
agent.forEach_8_Neighbours(world,function (x,y,neighbour) {
altGrid.augment(x,y,1);
});
});
world.forEachAgent(function (agent) {
var neigbourCount = altGrid.get(agent.x,agent.y);
if (neigbourCount != 2 && neigbourCount != 3) {
world.removeAgent(agent);
}
});
altGrid.forEachEntry(function (x,y,neigbourCount) {
if (neigbourCount == 3) {
if (world.getAgent(x,y) == null) {
world.addAgentsToWorld([new Agent(x,y)]);
}
}
});
},
moveRandomly:function (world) {
_.each(world.agents,function(agent) {
if (agent!=null) {
var xDiff = (Math.random()>.5) ,
yDiff = 1- xDiff,
sign = (Math.random()>.5) ?1:-1;
world.moveAgent(xDiff*sign,yDiff*sign,agent);
}
}
)
},
randStartConf:function(n,squareSize) {
var ret = [];
for (var i = 0; i < n; i++) {
ret.push(new Agent(
squareSize-Math.floor(Math.random()*squareSize*2),
squareSize-Math.floor(Math.random()*squareSize*2)
)
);
}
return ret;
}
};