Advertisement
ikseek

Life

Dec 12th, 2013
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <unistd.h>
  3. const int kM=79, kN=20;
  4. int rules[2][9] = {{0,0,0,1}, {0,0,1,1}}, frames[2][kM][kN], curr;
  5. int at(int x, int y) { return frames[curr][(kM+x)%kM][(kN+y)%kN]; }
  6. int around(int x, int y) {
  7.     int neighbours = 0;
  8.     for (int j = y-1; j <= (y+1); ++j)
  9.         for (int i = x-1; i <= (x+1); ++i)
  10.             neighbours += at(i, j);
  11.     return neighbours - at(x, y);
  12. }
  13. void random(int x, int y) { frames[curr][x][y] = rand()&1;}
  14. void update(int x, int y ) {
  15.     frames[!curr][x][y]=rules[at(x,y)][around(x,y)];
  16. }
  17. void print(int x, int y) { std::cout<<(at(x, y) ? '*' : ' '); }
  18. void noop() {}
  19. void newline() { std::cout<<std::endl;}
  20. void iter() { curr = !curr; sleep(1); system("clear"); }
  21. void forAll(void(cell)(int, int), void(line)(), void(end)()) {
  22.     for(int j = 0; j < kN; ++j) {
  23.         for (int i = 0; i < kM; ++i) cell(i, j);
  24.         line();
  25.     } end();
  26. }
  27. int main() {
  28.     forAll(random, noop, noop);
  29.     while(1) { forAll(print, newline, noop); forAll(update, noop, iter); }
  30. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement