[PD] Conway's Game of Life abstraction

Frank Barknecht fbar at footils.org
Wed Aug 23 11:23:50 CEST 2006


Hallo,
Mathieu Bouchard hat gesagt: // Mathieu Bouchard wrote:

> On Tue, 22 Aug 2006, Chris McCormick wrote:
> 
> >PS This is a lot easier with something like Gridflow: 
> ><http://lists.puredata.info/pipermail/pd-list/2002-09/008203.html>
> 
> And a lot faster, too. With the version currently bundled with GridFlow, 
> i can do it in 720 by 480 at 60 frames per second.

Attached is another Game of Life using data structures. Sorry for the
messy patch, it's uncleaned. It's slow, but still nice. It also has
support for different rule-sets, as an example there is an
implementation for the Demonic Cycling rule included, which you can
select with the 2-element hradio box. You can set the amount of colors
with an unlabelled number box in the lower third of the patch.

Ciao
-- 
 Frank Barknecht                 _ ______footils.org_ __goto10.org__
-------------- next part --------------
#N canvas 344 63 717 681 10;
#N canvas 119 92 565 561 grid 1;
#X restore 168 75 pd grid;
#N canvas 377 249 625 398 cell 0;
#X obj 423 266 pointer;
#X msg 422 244 traverse \$1 \, bang;
#X obj 295 196 inlet;
#X obj 58 127 filledpolygon color 0 1 0 0 0 10 10 10 10 0;
#X obj 56 70 struct cell float x float y float next-color float color
;
#X obj 294 217 unpack 0 0 0 s;
#X obj 287 299 append cell x y color;
#X connect 0 0 6 3;
#X connect 1 0 0 0;
#X connect 2 0 5 0;
#X connect 5 0 6 0;
#X connect 5 1 6 1;
#X connect 5 2 6 2;
#X connect 5 3 1 0;
#X restore 425 170 pd cell;
#X obj 381 142 list append pd-grid;
#N canvas 506 536 611 418 ca 0;
#X obj 64 89 struct ca float x float y array cells cell;
#X obj 416 266 pointer;
#X msg 415 244 traverse \$1 \, bang;
#X obj 287 196 inlet;
#X obj 287 299 append ca x y;
#X obj 287 217 unpack 0 0 s;
#X obj 287 322 outlet;
#X obj 65 145 plot cells 0 0 0 0;
#X connect 1 0 4 2;
#X connect 2 0 1 0;
#X connect 3 0 5 0;
#X connect 4 0 6 0;
#X connect 5 0 4 0;
#X connect 5 1 4 1;
#X connect 5 2 2 0;
#X restore 381 170 pd ca;
#X msg 381 112 10 10;
#X obj 337 197 pointer;
#X msg 337 174 bang;
#X obj 230 266 setsize ca cells;
#X floatatom 95 223 5 0 0 0 - - -;
#X obj 216 412 element ca cells;
#X obj 95 361 t f b f;
#X obj 95 566 set cell x y color;
#X obj 95 410 t f f;
#X floatatom 95 125 5 0 0 1 side_length - -;
#X obj 95 475 mod;
#X obj 125 523 div;
#X obj 95 180 t f f;
#X obj 95 203 *;
#X obj 125 544 * 10;
#X obj 95 502 * 10;
#X obj 125 293 s \$0-size;
#X obj 353 226 s \$0-grid;
#X floatatom 280 474 5 0 0 0 - - -;
#X msg 95 76 bang;
#X obj 280 495 s \$0-max;
#X obj 323 383 r \$0-grid;
#X obj 174 497 random 5;
#X msg 337 63 bang;
#X obj 337 87 t b b b;
#N canvas 353 0 789 540 evolve 0;
#X obj 246 70 r \$0-size;
#X obj 230 105 f;
#X obj 282 313 get cell color;
#X obj 382 374 get cell color;
#X obj 433 286 element ca cells;
#X msg 118 67 bang;
#X obj 540 257 r \$0-grid;
#X floatatom 341 157 5 0 0 0 - - -;
#X obj 162 68 metro 100;
#X obj 162 45 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X floatatom 220 48 5 0 0 0 - - -;
#N canvas 0 0 450 300 countto 0;
#X obj 83 130 until;
#X obj 83 159 f 0;
#X obj 110 158 + 1;
#X msg 124 130 0;
#X obj 86 102 t f b;
#X obj 90 81 inlet;
#X obj 85 186 outlet;
#X text 203 97 counts from 0 to inlet-float;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 0 6 0;
#X connect 2 0 1 1;
#X connect 3 0 1 1;
#X connect 4 0 0 0;
#X connect 4 1 3 0;
#X connect 5 0 4 0;
#X restore 260 156 pd countto;
#N canvas 383 74 798 616 find-neighborhood 0;
#X obj 278 74 inlet;
#X obj 375 490 element ca cells;
#X obj 343 176 - 1;
#X obj 519 176 + 1;
#X obj 345 443 moses;
#X obj 375 464 moses;
#X obj 578 70 r \$0-side-len;
#X obj 482 463 r \$0-grid;
#X obj 457 362 r \$0-size;
#X text 324 73 in: position index;
#X text 116 120 Neighbours:;
#X obj 457 385 + 1;
#X obj 375 519 outlet;
#X text 507 560 above/below - left/right;
#X obj 386 202 - 1;
#X obj 472 200 + 1;
#X obj 296 201 - 1;
#X obj 568 202 + 1;
#X obj 296 177 +;
#X obj 568 177 +;
#X obj 433 176 -;
#X obj 262 177 +;
#X obj 472 175 -;
#X obj 386 177 -;
#X obj 339 266 pack 0 0 0 0 0 0 0 0;
#X obj 344 315 list-spigot;
#X obj 278 114 t f f f f f f f f b;
#X text 176 264 n nw w sw s se e ne;
#X obj 416 293 r \$0-neighbour-mask;
#X obj 432 465 mod;
#X obj 344 364 list prepend 0;
#X obj 437 342 tgl 15 0 empty empty wrap? 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 345 388 route 0 1;
#X text 30 449 restrict to 0:size \, with wrap-around or not;
#X connect 0 0 26 0;
#X connect 1 0 12 0;
#X connect 2 0 24 2;
#X connect 3 0 24 6;
#X connect 4 1 5 0;
#X connect 5 0 1 0;
#X connect 6 0 20 1;
#X connect 6 0 21 1;
#X connect 6 0 18 1;
#X connect 6 0 19 1;
#X connect 6 0 22 1;
#X connect 6 0 23 1;
#X connect 7 0 1 1;
#X connect 8 0 11 0;
#X connect 11 0 5 1;
#X connect 11 0 29 1;
#X connect 14 0 24 3;
#X connect 15 0 24 5;
#X connect 16 0 24 1;
#X connect 17 0 24 7;
#X connect 18 0 16 0;
#X connect 19 0 17 0;
#X connect 20 0 24 4;
#X connect 21 0 24 0;
#X connect 22 0 15 0;
#X connect 23 0 14 0;
#X connect 24 0 25 0;
#X connect 25 0 30 0;
#X connect 26 0 21 0;
#X connect 26 1 18 0;
#X connect 26 2 2 0;
#X connect 26 3 23 0;
#X connect 26 4 20 0;
#X connect 26 5 22 0;
#X connect 26 6 3 0;
#X connect 26 7 19 0;
#X connect 28 0 25 1;
#X connect 29 0 1 0;
#X connect 30 0 32 0;
#X connect 31 0 30 1;
#X connect 32 0 4 0;
#X connect 32 1 29 0;
#X restore 282 289 pd find-neighborhood;
#X text 80 322 get colors of neighbours:;
#X text 139 290 find neighbours:;
#X text 502 372 get color of current element;
#X obj 162 22 inlet;
#X obj 220 24 inlet;
#X obj 282 462 set cell next-color;
#N canvas 590 407 453 398 update 0;
#X obj 73 55 inlet;
#N canvas 0 0 450 300 countto 0;
#X obj 83 130 until;
#X obj 83 159 f 0;
#X obj 110 158 + 1;
#X msg 124 130 0;
#X obj 86 102 t f b;
#X obj 90 81 inlet;
#X obj 85 186 outlet;
#X text 203 97 counts from 0 to inlet-float;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 0 6 0;
#X connect 2 0 1 1;
#X connect 3 0 1 1;
#X connect 4 0 0 0;
#X connect 4 1 3 0;
#X connect 5 0 4 0;
#X restore 73 87 pd countto;
#X obj 73 141 element ca cells;
#X obj 180 117 r \$0-grid;
#X obj 73 192 get cell next-color;
#X obj 73 248 set cell color;
#X obj 73 165 t a a;
#X text 210 216 make next-color become color;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 6 0;
#X connect 3 0 2 1;
#X connect 4 0 5 0;
#X connect 6 0 4 0;
#X connect 6 1 5 1;
#X restore 157 191 pd update;
#X text 178 217 And update;
#N canvas 0 0 878 648 demonic-rule 0;
#X obj 270 75 inlet;
#X obj 270 503 outlet;
#X obj 333 74 inlet;
#X obj 333 116 t a a;
#X obj 270 399 select 1;
#X obj 270 452 f;
#X obj 270 350 -;
#X obj 270 142 t f f;
#X obj 379 104 r \$0-max;
#X obj 379 128 - 1;
#X obj 363 156 ==;
#X obj 356 401 select 0;
#X obj 270 212 route 0 1;
#X obj 270 188 list prepend 0;
#X text 399 158 compare current color to MAX color;
#X obj 270 374 == 1;
#X text 422 405 If cur.col already is max \, then wait for a 0 neighbor
and get swallowed by 0;
#X msg 356 424 0;
#X text 246 231 no!;
#X text 309 232 yes!;
#X obj 270 254 / 90;
#X text 19 348 If not at MAX color \,;
#X text 19 368 look for a neighbor;
#X text 21 385 with: color = cur.color + 1;
#X text 22 403 or: (1 == col - cur.col) is TRUE;
#X text 84 231 Is cur.color at MAX?;
#X text 41 140 save color below \, then evolve:;
#X text 313 371 col - cur.col == 1?;
#X obj 333 96 / 90;
#X text 21 520 If such a neighbor is found \, current color gets swallowed
by this neighbor's color.;
#X connect 0 0 7 0;
#X connect 2 0 28 0;
#X connect 3 0 6 1;
#X connect 3 1 10 0;
#X connect 4 0 5 0;
#X connect 5 0 1 0;
#X connect 6 0 15 0;
#X connect 7 0 13 0;
#X connect 7 1 5 1;
#X connect 8 0 9 0;
#X connect 9 0 10 1;
#X connect 10 0 13 1;
#X connect 11 0 17 0;
#X connect 12 0 20 0;
#X connect 12 1 11 0;
#X connect 13 0 12 0;
#X connect 15 0 4 0;
#X connect 17 0 1 0;
#X connect 20 0 6 0;
#X connect 28 0 3 0;
#X restore 282 423 pd demonic-rule;
#X obj 433 311 t a a;
#X obj 230 129 t f f;
#X obj 260 191 t b f f;
#N canvas 347 364 708 436 game-of-life-rule 0;
#X obj 145 19 inlet;
#X obj 199 18 inlet;
#X obj 171 85 f 0;
#X obj 145 84 + 0;
#X msg 161 60 0;
#X obj 88 134 select 2 3;
#X msg 88 170 1;
#X msg 118 170 0;
#X obj 145 40 / 90;
#X obj 88 222 * 90;
#X obj 88 249 outlet;
#X obj 88 18 inlet;
#X obj 88 52 b;
#X obj 88 105 f;
#X obj 199 42 b;
#X text 217 88 accumulate colors of all neighbors;
#X text 178 136 if color sum in (2 \, 3) make alive!;
#X connect 0 0 8 0;
#X connect 1 0 14 0;
#X connect 2 0 3 1;
#X connect 3 0 2 0;
#X connect 3 0 13 1;
#X connect 4 0 3 1;
#X connect 4 0 2 1;
#X connect 5 0 6 0;
#X connect 5 1 6 0;
#X connect 5 2 7 0;
#X connect 6 0 9 0;
#X connect 7 0 9 0;
#X connect 8 0 3 0;
#X connect 9 0 10 0;
#X connect 11 0 12 0;
#X connect 12 0 13 0;
#X connect 13 0 5 0;
#X connect 14 0 4 0;
#X restore 82 418 pd game-of-life-rule;
#X text 77 400 bang;
#X text 142 399 color;
#X text 203 400 cell;
#X obj 108 372 demux;
#X obj 282 366 demux;
#X obj 382 349 demux;
#X obj 142 349 r \$0-rule;
#X obj 311 339 r \$0-rule;
#X connect 0 0 1 1;
#X connect 1 0 23 0;
#X connect 2 0 30 0;
#X connect 3 0 21 1;
#X connect 4 0 22 0;
#X connect 5 0 1 0;
#X connect 6 0 4 1;
#X connect 7 0 24 0;
#X connect 8 0 1 0;
#X connect 9 0 8 0;
#X connect 10 0 8 1;
#X connect 11 0 24 0;
#X connect 12 0 2 0;
#X connect 16 0 9 0;
#X connect 17 0 10 0;
#X connect 21 0 18 0;
#X connect 22 0 31 0;
#X connect 22 1 18 1;
#X connect 23 0 19 0;
#X connect 23 1 11 0;
#X connect 24 0 29 0;
#X connect 24 1 12 0;
#X connect 24 2 4 0;
#X connect 25 0 18 0;
#X connect 29 0 25 0;
#X connect 30 0 25 1;
#X connect 30 1 21 0;
#X connect 31 0 25 2;
#X connect 31 1 3 0;
#X connect 32 0 29 1;
#X connect 33 0 30 1;
#X connect 33 0 31 1;
#X restore 228 75 pd evolve;
#N canvas 0 0 450 300 countto 0;
#X obj 83 130 until;
#X obj 83 159 f 0;
#X obj 110 158 + 1;
#X msg 124 130 0;
#X obj 86 102 t f b;
#X obj 90 81 inlet;
#X obj 85 186 outlet;
#X text 203 97 counts from 0 to inlet-float;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 0 6 0;
#X connect 2 0 1 1;
#X connect 3 0 1 1;
#X connect 4 0 0 0;
#X connect 4 1 3 0;
#X connect 5 0 4 0;
#X restore 95 321 pd countto;
#X obj 125 202 s \$0-side-len;
#X obj 141 443 r \$0-side-len;
#X obj 230 244 r \$0-size;
#X obj 95 272 t f f;
#X obj 175 517 * 90;
#X text 343 413 get elem. pointer;
#X text 50 591 set elem. position and random color;
#X obj 228 56 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X obj 280 434 loadbang;
#X obj 551 268 loadbang;
#X msg 550 317 1 1 1 1 1 1 1 1;
#X text 510 414 n nw w sw s se e ne;
#X msg 551 292 1 0 1 0 1 0 1 0;
#X msg 550 365 0 1 0 1 0 1 0 1;
#X obj 521 389 s \$0-neighbour-mask;
#X floatatom 286 56 5 0 0 2 step_delay - -;
#X msg 551 343 0 1 0 0 0 0 0 0;
#X obj 448 21 cnv 15 160 100 empty empty IMPORTANT! 20 12 0 14 -258699
-262144 0;
#X obj 494 91 s pd-grid;
#X msg 495 71 clear;
#X text 453 49 press "clear" on exit;
#X obj 373 525 random 100;
#X msg 373 584 0;
#X msg 418 583 90;
#X floatatom 450 524 5 0 0 0 - - -;
#X text 445 547 for game of life;
#X obj 379 64 loadbang;
#X msg 316 454 2;
#X obj 371 495 demux;
#X obj 440 436 r \$0-rule;
#X obj 373 546 moses 1;
#X obj 229 145 s \$0-rule;
#X obj 229 126 hradio 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -1
-1 1;
#X obj 230 107 loadbang;
#X obj 359 439 select 0 1;
#X msg 281 454 5;
#X msg 104 102 30;
#X msg 133 102 20;
#X connect 2 0 3 0;
#X connect 3 0 5 1;
#X connect 4 0 2 0;
#X connect 5 0 7 1;
#X connect 5 0 21 0;
#X connect 6 0 5 0;
#X connect 8 0 34 0;
#X connect 9 0 11 3;
#X connect 10 0 12 0;
#X connect 10 1 59 0;
#X connect 10 2 9 0;
#X connect 12 0 14 0;
#X connect 12 1 15 0;
#X connect 13 0 16 0;
#X connect 14 0 19 0;
#X connect 15 0 18 0;
#X connect 16 0 17 0;
#X connect 16 1 17 1;
#X connect 16 1 31 0;
#X connect 17 0 8 0;
#X connect 18 0 11 1;
#X connect 19 0 11 0;
#X connect 22 0 24 0;
#X connect 22 0 26 1;
#X connect 23 0 13 0;
#X connect 25 0 9 1;
#X connect 26 0 35 0;
#X connect 27 0 28 0;
#X connect 28 0 6 0;
#X connect 28 1 4 0;
#X connect 28 2 50 0;
#X connect 30 0 10 0;
#X connect 32 0 15 1;
#X connect 32 0 14 1;
#X connect 33 0 7 0;
#X connect 34 0 30 0;
#X connect 34 1 20 0;
#X connect 35 0 11 2;
#X connect 38 0 29 0;
#X connect 39 0 66 0;
#X connect 40 0 43 0;
#X connect 41 0 45 0;
#X connect 43 0 45 0;
#X connect 44 0 45 0;
#X connect 46 0 29 1;
#X connect 47 0 45 0;
#X connect 50 0 49 0;
#X connect 52 0 61 0;
#X connect 53 0 11 2;
#X connect 54 0 11 2;
#X connect 55 0 61 1;
#X connect 57 0 28 0;
#X connect 58 0 22 0;
#X connect 59 0 52 0;
#X connect 59 1 26 0;
#X connect 60 0 59 1;
#X connect 60 0 65 0;
#X connect 61 0 53 0;
#X connect 61 1 54 0;
#X connect 63 0 62 0;
#X connect 64 0 63 0;
#X connect 65 0 58 0;
#X connect 65 1 66 0;
#X connect 66 0 22 0;
#X connect 67 0 13 0;
#X connect 68 0 13 0;


More information about the Pd-list mailing list