Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <unistd.h>
- const int kM=79, kN=20;
- int rules[2][9] = {{0,0,0,1}, {0,0,1,1}}, frames[2][kM][kN], curr;
- int at(int x, int y) { return frames[curr][(kM+x)%kM][(kN+y)%kN]; }
- int around(int x, int y) {
- int neighbours = 0;
- for (int j = y-1; j <= (y+1); ++j)
- for (int i = x-1; i <= (x+1); ++i)
- neighbours += at(i, j);
- return neighbours - at(x, y);
- }
- void random(int x, int y) { frames[curr][x][y] = rand()&1;}
- void update(int x, int y ) {
- frames[!curr][x][y]=rules[at(x,y)][around(x,y)];
- }
- void print(int x, int y) { std::cout<<(at(x, y) ? '*' : ' '); }
- void noop() {}
- void newline() { std::cout<<std::endl;}
- void iter() { curr = !curr; sleep(1); system("clear"); }
- void forAll(void(cell)(int, int), void(line)(), void(end)()) {
- for(int j = 0; j < kN; ++j) {
- for (int i = 0; i < kM; ++i) cell(i, j);
- line();
- } end();
- }
- int main() {
- forAll(random, noop, noop);
- while(1) { forAll(print, newline, noop); forAll(update, noop, iter); }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement