Python Tutorials (back to the list of tutorials)

Clock Stack Agent Algorithm

Template Code

```
Warning:  include(codepy/igeo_tutorial60_0/igeo_tutorial60_0.html): failed to open stream: No such file or directory in /home/content/58/5926958/html/igeo/tutorial/tutorial.php on line 66

Warning:  include(): Failed opening 'codepy/igeo_tutorial60_0/igeo_tutorial60_0.html' for inclusion (include_path='.:/usr/local/php5_6/lib/php') in /home/content/58/5926958/html/igeo/tutorial/tutorial.php on line 66
```

Rule 1

To run the code, replace the rule method in the template code with the following.

```  void rules(){
if(clock(0)==9){
if(clock(1)==0){
next(2);
}
next(rot(PI/2), 1);
}
else{
next(0);
}
}```

Rule 2

```  void rules(){
if(clock(0)==9){
if(clock(1)==0){
if(clock(2)==3){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
next(rot(PI/2), 1);
}
else{ next(0); }
}```

Rule 3

```  void rules(){
if(clock(0)==9){
if(clock(1)==0){
if(clock(2)==3){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4);
}
next(rot(PI/2), 1);
}
else{ next(0); }
}```

Rule 4

```  void rules(){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2)==3){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
if(clock(4)==3){
if(clock(1)==2 && clock(2)==0 && clock(3)==0){
next(rot(-PI/2), 5).clr(0);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 5).clr(0);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==2){
next(rot(-PI/2), 5).clr(0);
}
}
else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4);
}
next(rot(PI/2), 1);
}
else{ next(0); }
}```

Rule 5

```  void rules(){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2)==3){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
if(clock(4)==3){
if(clock(1)==2 && clock(2)==0 && clock(3)==0){
next(rot(-PI/3), 5).clr(0);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 5).clr(0);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==2){
next(rot(-PI/3), 5).clr(0);
}
}
else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4); //.clr(0, 0, (clock(4)+1)*0.3);
}
next(rot(PI/2), 1);
}
else{ next(0); }
}```

Rule 6

```  void rules(){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2)==3){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
if(clock(4)==3){
if(clock(1)==2 && clock(2)==0 && clock(3)==0){
next(rot(-PI/2), 5).clr(0);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 5).clr(0);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==2){
next(rot(-PI/2), 5).clr(0);
}
}
else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4); //.clr(0, 0, (clock(4)+1)*0.3);
}
next(rot(PI/2), 1);
}
else{ next(rot(PI/180*1), 0); }
}```

Rule 7

```  void rules(){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2)==3){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
if(clock(4)==3){
if(clock(1)==2 && clock(2)==0 && clock(3)==0){
next(rot(-PI/2), 5).clr(0);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 5).clr(0);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==2){
next(rot(-PI/2), 5).clr(0);
}
}
else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4); //.clr(0, 0, (clock(4)+1)*0.3);
}
next(rot(PI/2), 1);
}
else{ next(rot(PI/180*0.1), 0); }
}```

Rule 8

```  void rules(){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2)==3){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
if(clock(4) >= IRand.getInt(2, 7)){
if(clock(1)==2 && clock(2)==0 && clock(3)==0){
next(rot(-PI/2), 5); //.clr(IRand.clr());
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 5); //.clr(IRand.clr());
}
if(clock(1)==2 && clock(2)==0 && clock(3)==2){
next(rot(-PI/2), 5); //.clr(IRand.clr());
}
}
else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4);
}
next(rot(PI/2), 1);
}
else{ next(0); }
}```

Rule 9

```  void rules(){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2) >= IRand.getInt(3,10)){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
if(clock(4) == 3){
if(clock(1)==2 && clock(2)==0 && clock(3)==0){
next(rot(-PI/2), 5);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 5);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==2){
next(rot(-PI/2), 5);
}
}
else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4);
}
next(rot(PI/2), 1);
}
else{ next(0); }
}```

Rule 10

```  void rules(){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2) >= IRand.getInt(3,10)){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
if(clock(4) == 3){
if(clock(1)==2 && clock(2)==0 && clock(3)==0){
next(rot(-PI/2+IRand.get(-PI/12,PI/12)), 5);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 5);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==2){
next(rot(-PI/2+IRand.get(-PI/12,PI/12)), 5);
}
}
else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4);
}
next(rot(PI/2), 1);
}
else{ next(0); }
}```

Rule 11

```  void rules(){
if(clock(0)>=IRand.getInt(3,10)){
if(clock(1)==0){
if(clock(2) >= IRand.getInt(1,5)){
next(rot(-PI/2), 3);
}
else{ next(rot(IRand.get(-0.15, 0.15)), 2); }
}
if(clock(4) == 3){
if(clock(1)==2 && clock(2)==0 && clock(3)==0){
next(rot(-PI/2), 5);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 5);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==2){
next(rot(-PI/2), 5);
}
}
else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4);
}
next(rot(PI/2), 1);
}
else{ next(0); }
}```

Rule 12

```  void rules(){
if(clock(0)==1){
next(rot(-PI/6), 2);
next(rot(PI/3*2), 1);
}
else{ next(0); }
}```

Rule 13

```  void rules(){
if(clock(0)==1){
next(rot(PI/3).flipNml(), 2);
next(rot(PI/3*2), 1);
}
else{ next(0); }
}```

Rule 14

```  void rules(){
if(clock(1)==0){
if(clock(0)==5){
next(rot(PI/2), 1);
}
else{ next(mul(0.99),0); }
}
else{
if(clock(0)==15){
next(rot(PI/2), 3);
}
else if(clock(0)==2){
next(rot(-PI/2).flipNml(), 2);
next(0);
}
else{ next(mul(0.99), 0); }
}
}```

Rule 15

```  void rules(){
if(clock(1)==0){
if(clock(0)==15){
next(rot(PI/3), 1);
next(rot(-PI/3), 2);
}
else{ next(mul(0.99), 0); }
}
else if(clock(1)==1){
if(clock(0)==5){
next(rot(PI/3), 1);
}
else{ next(mul(0.99), 0); }
}
else{
if(clock(0)==5){
next(rot(PI/3), 3);
}
else{ next(mul(0.99), 0); }
}
}```

Rule 16

```  void rules(){
if(clock(1)==0){
if(clock(0)==15){
next(rot(PI/3), 1);
next(rot(-PI/3), 2);
}
else{ next(0); }
}
else if(clock(1)==1){
if(clock(0)==5){
next(rot(PI/3), 1);
}
else{ next(0); }
}
else{
if(clock(0)==5){
next(rot(PI/3), 3);
}
else{ next(mul(0.99), 0); }
}
}```

Rule 17

```  void rules(){
if(clock(1)==0){
next(rot(-PI/4), 1);
next(rot(PI/2).flipNml(), 2);
}
else{
if(clock(0)==5){
if(IRand.pct(20)){
next(rot(-PI/4).flipNml(), 2);
}
}
else{ next(0); }
}
}```

Rule 18

```  void rules(){
if(clock(1)==0){
if(clock(0)==5){
next(rot(PI/2), 1);
if(clock(2)==3){
if(IRand.pct(70)) next(rot(PI/3),3);
if(IRand.pct(50)) next(3);
if(IRand.pct(30)) next(rot(-PI/2), 3);
}
else{ next(2); }
}
else{ next(0); }
}
else{
if(clock(0)==5){
next(rot(PI/2), 1);
}
else{
next(mul(0.98), 0).clr(clock(0)*0.2, 0, clock(1)*0.1);
}
}
}```

Rule 19

```  void rules(){
if(clock(1)==0){
if(clock(0)==5){
next(rot(PI/2), 1).clr(0,0.5,1.0);
if(clock(2)==0){
if(clock(3)==0){
next(rot(-PI/2), 3).clr(0,0,1.0);
}
else{ next(rot(-PI/4), 4).clr(0); }
}
}
else{ next(rot(PI/20),0); }
}
else{
if(clock(0)==10){
next(rot(PI/2),1).clr(0.5,0,1);
if(clock(2)==0){
next(3).clr(1.0,0.5,0);
}
}
else{ next(rot(PI/20),0); }
}
}```

Rule 20

```  void rules(){
if(clock(1)==0){
if(clock(0)==5){
next(rot(PI/2), 1).clr(0,0.5,1.0);
if(clock(2)==0){
if(clock(3)==0){
if(IRand.pct(90)) next(rot(-PI/4), 3).clr(0,0,1.0);
}
else{
if(IRand.pct(40)) next(rot(-PI/2), 4).clr(0);
}
}
}
else{
if(clock(2)==1){
next(mul(0.99), 0);
}
else{ next(0); }
}
}
else if(clock(1)==1){
if(clock(0)==10){
next(rot(PI/2),1).clr(0.5,0,1);
if(clock(2)==0){
next(3).clr(1.0,0.5,0);
}
}
else{
if(clock(2)==1){
next(mul(0.99), 0);
}
else{ next(0); }
}
}
else if(clock(1)==2){
if(clock(0)==5){
next(rot(PI/2), 1);
}
else{
if(clock(2)==1){
next(mul(0.99), 0);
}
else{ next(0); }
}
}
else{
if(clock(0)==10){
if(clock(2)==0){
next(rot(PI/2),2);
}
}
else{ next(mul(0.99), 0); }
}
}```

Rule 21

```  void rules(){
if(clock(4)==0){
if(clock(0)==3){
next(rot(PI/2),1);
if(clock(1)==0){
if(clock(2)==2) next(rot(-PI/2),3);
else next(2);
}
}
else{
if(clock(1)==2 && clock(0)==0) next(rot(-PI/2),4).clr(1.0,0,1.0);
next(0);
}
}
else{
if(clock(0)==15) next(rot(PI/2),5).clr(0);
else next(0);
}
}```

Rule 22

```  void rules(){
if(clock(0)==1){
if(clock(1)==1){
if(clock(2)==10){
next(rot(-PI/6), 3);
}
else{ next(rot(-PI*5/6), 2); }
}
else{
next(rot(PI*5/6), 1);
if(clock(2)==5){
next(rot(-PI/2),4);
}
}
}
else{ next(0); }
}```

Rule 23

```  void rules(){
if(clock(0)==2){
if(clock(1)==0 && clock(2)==3){
next(rot(-PI/3), 3);
}
if(clock(1)==2){
if(clock(2)==5){
next(rot(-PI/3), 4);
}
else{ next(rot(-PI/3).flipNml(), 2); }
}
next(rot(PI/3), 1);
}
else{ next(0); }
}```

Rule 24

```  void rules(){
if(clock(0)==2){
if(clock(1)==0 && clock(2) >= IRand.get(3,6)){
next(rot(-PI/3), 3);
}
if(clock(1)==2){
if(clock(2) == IRand.getInt(2,5)){
next(rot(-PI/3), 4);
}
else{ next(rot(-PI/3).flipNml(), 2); }
}
next(rot(PI/3), 1);
}
else{ next(0); }
}```

Rule 25

```  void rules(){
if(clock(6)==0){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2) >= IRand.getInt(2,10)){
next(rot(-PI/2), 3);
}
else{ next(2); }
}
if(clock(4) == 2){
if(clock(1)==2 && clock(2)==0 && clock(3)==0){ // left
if(IRand.pct(70)) next(rot(-PI/2), 5);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==1){ // straight
next(rot(-PI/2), 5);
}
if(clock(1)==2 && clock(2)==0 && clock(3)==2){ // right
if(IRand.pct(70)) next(rot(-PI/2), 5);
}
}
else if(clock(1)==2 && clock(2)==0 && clock(3)==1){
next(rot(-PI/2), 4);
}
next(rot(PI/2), 1);
}
else{
if(clock(0)==2 && clock(1)==0 && clock(3)==2){
next(rot(-PI/2).mul(1), 6).clr(0.5,0,1);
}
next(0);
}
}
else{ // branch mode
if(clock(1)==60){
if(IRand.pct(10)){
next(mul(1), 7).clr(0,0,0.5);
}
}
else{
if(IRand.pct(20)){
next(rot(-PI/4), 1);
}
if(IRand.pct(20)){
next(rot(PI/4), 1);
}
if(IRand.pct(90)){
next(1);
}
}
}
}```

Rule 26

```  void rules(){
if(clock(3)==1){
if(clock(0)>=2 && IRand.pct(10)){
next(4);
}
else{ next(0); }
}
else if(clock(0)==2){
if(clock(1)==0){
next(rot(-PI/3), 3);
}
if(clock(1)==0){
next(rot(PI/3), 2);
}
else{ next(rot(PI/3), 1); }
}
else{ next(0); }
}```

Rule 27

```  void rules(){
if(clock(3)==1){
if(clock(0)>=2){
next(4);
}
else{ next(rot(0.05), 0); }
}
else if(clock(0)==2){
if(clock(1)==0){
next(rot(-PI/3), 3);
}
if(clock(1)==0){
next(rot(PI/3), 2);
}
else{ next(rot(PI/3), 1); }
}
else{ next(0); }
}```

Rule 28

```  void rules(){
// corrugate
if(clock(6)==0){
if(clock(3)==1){
if(clock(1)==1){
if(clock(0)==5){
if(clock(4)==12){ next(6); }
else{ next(rot(PI/2), 4); }
}
else{ next(0); }
}
else{ next(rot(-PI/2), 1); }
}
else{
if(clock(1)==1){
if(clock(0)==5){
next(rot(-PI/2), 3);
if(clock(4)==10){ next(5); }
}
else{ next(0); }
}
else{ next(rot(PI/2), 1); }
}
}
// triangles
else if(clock(6)==1){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2)==20){ next(rot(-PI/4), 6); }
else{ next(rot(-PI/3*2).flipNml(), 2); }
}
next(rot(PI/3*2), 1);
}
else{ next(0); }
}
// squares
else{
if(clock(0)==3){
if(clock(1)==1){
if(clock(2)==0){
if(clock(3)==4){ next(rot(-PI/2), 7); }
else{ next(rot(-PI/2),3); }
}
next(2);
}
next(rot(PI/2), 1);
}
else{ next(0); }
}
}```

Rule 29

```  void rules(){
if(clock(0)==10){

if(clock(1)==0){
if(clock(2)==0){
next(pitch(PI/2).roll(-PI/2), 2);
}
else{
next(pitch(-PI/2).roll(PI/2), 3);
}
}

if(clock(1)==20); // stop
else{
if(clock(1)==0 || clock(1)==1){
if(clock(1)==1 && clock(3)==1){
next(4);
}
next(yaw(PI/2), 1).hsb(clock(1)*0.02,1,1);
}
else{
next(yaw(PI/2).mul(0.9), 1).hsb(clock(1)*0.02,1,1);
}
}
}
else{ next(0); }
}```

Rule 30

```  void rules(){
if(clock(0)==10){
if(clock(1)==0){
if(clock(2)==0){
if(clock(3)==2){
next(pitch(PI/2).roll(PI/2).mul(0.9), 2);
next(yaw(-PI/2), 4); // new cube
}
else{
next(pitch(PI/2).roll(PI/2), 2);
if(clock(4)==4 && clock(3)==1){
next(yaw(-PI/2), 5); // new cube
}
}
}
else{
next(pitch(-PI/2).roll(-PI/2), 3);
}
}

if(clock(1)==20); // stop
else{
next(yaw(PI/2).mul(0.9), 1).hsb(clock(1)*0.02,1,1);
}
}
else{ next(0); }
}```

Rule 31

```  void rules(){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2)==0){
if(clock(3)>=IRand.get(5,10)){
next(yaw(-PI/2), 4).hsb(sin(IG.time()*.02)*.1+.7,1,1);
if(IRand.pct(70)) next(4).hsb(sin(IG.time()*.02)*.1+.7,1,1);
}
else if(IRand.pct(97)) next(3).hsb(sin(IG.time()*.02)*.1+.7,1,1);
next(pitch(PI/2).roll(PI/2), 2).hsb(sin(IG.time()*.02)*.1+.7,1,1);
}
else if(clock(2)==1){
if(clock(3)>=IRand.get(5,10)){
if(IRand.pct(70)) next(roll(-PI/2), 4).hsb(sin(IG.time()*.02)*.1+.7,1,1);
}
next(pitch(-PI/2).roll(PI/2), 2).hsb(sin(IG.time()*.02)*.1+.7,1,1);
}
else if(clock(2)==2){
next(pitch(PI/2).roll(PI/2), 2).hsb(sin(IG.time()*.02)*.1+.7,1,1);
}
else if(clock(2)==3){
next(pitch(-PI/2).roll(PI/2), 2).hsb(sin(IG.time()*.02)*.1+.7,1,1);
}
}
next(yaw(PI/2),1).hsb(sin(IG.time()*.02)*.1+.7,1,1);
}
else{ next(0).hsb(sin(IG.time()*.02)*.1+.7,1,1); }
}```

Rule 32

```  void rules(){
if(clock(0)==3){
if(clock(1)==0){
if(clock(2)==0){
if(clock(3)>=IRand.get(5,10)){
next(rot(-PI/2), 4).hsb(sin(IG.time()*.02)*.1,1,1);
if(IRand.pct(50)) next(4).hsb(sin(IG.time()*.02)*.1,1,1);
}
else next(3).hsb(sin(IG.time()*.02)*.1,1,1);
next(roll(PI/2).yaw(PI/2), 2).hsb(sin(IG.time()*.02)*.1,1,1);
}
else if(clock(2)==1){
if(clock(3)>=IRand.get(5,10)){
if(IRand.pct(10)) next(roll(-PI/2), 4).hsb(sin(IG.time()*.02)*.1,1,1);
}
next(roll(-PI/2).yaw(PI/2), 2).hsb(sin(IG.time()*.02)*.1,1,1);
}
else if(clock(2)==2){
next(roll(PI/2).yaw(PI/2), 2).hsb(sin(IG.time()*.02)*.1,1,1);
}
else if(clock(2)==3){
next(roll(-PI/2).yaw(PI/2), 2).hsb(sin(IG.time()*.02)*.1,1,1);
}
}
next(rot(PI/2),1).hsb(sin(IG.time()*.02)*.1,1,1);
}
else{ next(pitch(-0.03).yaw(0.03), 0).hsb(sin(IG.time()*.02)*.1,1,1); }
}```

Rule 33

```  void rules(){
if(clock(0)==99){
next(pitch(PI/2).roll(PI/2), 1).clr(0,0,.5-cos(IG.time()*.05)*.5);
}
if(clock(0)==100){
next(pitch(PI/3).roll(PI/2), 1).clr(0,0,.5-cos(IG.time()*.05)*.5);
}
next(yaw(PI/3*2).pitch(0.1), 0).clr(0,0,.5-cos(IG.time()*.05)*.5);
}```

Rule 34

```  void rules(){
if(clock(0)==99){
next(pitch(PI/2).roll(PI/2), 1);
}
if(clock(0)==100){
next(pitch(PI/3).roll(PI/2), 1);
}
if(clock(0)%3==0){
next(roll(0.1).yaw(PI/3*2).pitch(0.1), 0).clr(clock(0)*0.01,0,clock(1)*0.1);
}
else{
next(yaw(PI/3*2).pitch(0.1), 0).clr(clock(0)*0.01,0,clock(1)*0.1);
}
}```

Rule 35

```  void rules(){
if(clock(5)==1){
if(clock(0)==6){
next(rot(PI/3).flipNml(),6);
}
else{ next(rot(PI/3).flipNml(),0); }
}
else{
if(clock(0)==0){
if(clock(4)==43 && clock(1)==1 && clock(2)==0){
next(rot(PI/3),5);
}
else{
if(clock(1)==2){
if(clock(2)==1){
if(clock(3)==11){
next(yaw(PI/3-PI/15).pitch(PI/6).roll(PI/6), 4);
}
else{ next(yaw(PI/3).pitch(PI/6).roll(PI/6), 3); }
}
else{ next(yaw(PI/3).pitch(PI/6), 2); }
}
else{ next(yaw(PI/3),1); }
}
}
else{ next(0); }
}
}```

Rule 36

```  void rules(){
if(clock(7)==2){ // stop
return;
}
if(clock(2)==0){ // segment
next(rot(PI/2), 2);
}
else{ // square
if(clock(0)==3){
if(clock(1)==2){
if(clock(3)==3 && clock(5)==0){
next(4);
}
else if(clock(3)==9 && clock(5)==1){
next(6).clr(0);
}
else{ next(rot(PI/2), 3); }
}
next(rot(-PI/2),1);
}
else{
if(clock(0)==1 && clock(1)==1 && clock(3)==1 && clock(5)==0){
if(clock(6)==1){
next(yaw(PI/2).pitch(PI/2), 7);
}
else{ next(rot(PI/2), 5).clr(0.5,0,0.5); }
}
next(0);
}
}
}```

(back to the list of tutorials)