Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. // Adaptado de The Nature of Code, Daniel Shiffman http://natureofcode.com
  2.  
  3. boolean play = false ;
  4. int tamCelula = 15;
  5. int colunas, filas;
  6. // Game of life board
  7. int[][] grade;
  8. color[][] gradeCores;
  9.  
  10. void setup() {
  11. size(600, 400);
  12. frameRate(10);
  13. // Calcula colunas e filas, incializa um array
  14. colunas = width/tamCelula;
  15. filas = height/tamCelula;
  16. grade = new int[colunas][filas];
  17. gradeCores = new color[colunas][filas];
  18. // Chama a função que sorteia 0s e 1s na grade
  19. inicializa();
  20. }
  21.  
  22. void draw() {
  23. background(255);
  24.  
  25. for ( int i = 0; i < colunas; i++) {
  26. for ( int j = 0; j < filas; j++) {
  27. fill(gradeCores[i][j]);
  28. stroke(0);
  29. rect(i*tamCelula, j*tamCelula, tamCelula, tamCelula);
  30. }
  31. }
  32.  
  33. if (play) {
  34. gerar();
  35. }
  36. }
  37.  
  38.  
  39. // Reseta a grande com a tecla 'r'
  40. // Pause/Play com a barra de espaço
  41. void keyPressed() {
  42. if (key == ' ') {
  43. play = !play;
  44. }
  45. if (key == 'r') {
  46. inicializa();
  47. }
  48. }
  49.  
  50.  
  51. void inicializa() {
  52. for (int i =0; i < colunas-1; i++) {
  53. for (int j =0; j < filas-1; j++) {
  54. int sorteio = int(random(2));
  55. grade[i][j] = sorteio ;
  56. if (sorteio == 1) gradeCores[i][j] = color(0);
  57. else gradeCores[i][j] = color(255);
  58. }
  59. }
  60. }
  61.  
  62.  
  63. // O processo de calcular uma nova geração
  64. void gerar() {
  65.  
  66. int[][] proxima = new int[colunas][filas];
  67.  
  68. // Circula por todas as células da grade
  69. for (int x = 0; x < colunas; x++) {
  70. for (int y = 0; y < filas; y++) {
  71.  
  72. // Soma os estados em posições 3x3 em volta de cada célula
  73. int vizinhas = 0;
  74. for (int i = -1; i <= 1; i++) {
  75. for (int j = -1; j <= 1; j++) {
  76. // Aqui tem um cálculo que faz as bordas da tela se unirem às bordas opostas
  77. vizinhas += grade[(x+i+colunas)%colunas][(y+j+filas)%filas];
  78. }
  79. }
  80. // Subtrai o estado da própria célula que foi adicionado no laço anterior
  81. vizinhas -= grade[x][y];
  82.  
  83. // Regras do jogo da vida
  84. if ((grade[x][y] == 1) && (vizinhas < 2)) {
  85. proxima[x][y] = 0;
  86. gradeCores[x][y] = color(255, 0, 0);
  87. } // Solidão
  88. else if ((grade[x][y] == 1) && (vizinhas > 3)) {
  89. proxima[x][y] = 0;
  90. gradeCores[x][y] = color(0, 0, 255);
  91. } // Superpopulação
  92. else if ((grade[x][y] == 0) && (vizinhas == 3)) {
  93. proxima[x][y] = 1;
  94. gradeCores[x][y] = color(255, 255, 0);
  95. } // Nascimento
  96. else {
  97. proxima[x][y] = grade[x][y];
  98. if (grade[x][y] == 1) gradeCores[x][y] = color(0, 255, 0);
  99. if (grade[x][y] == 0) gradeCores[x][y] = color(255);
  100. } // Permanência
  101. }
  102. }
  103.  
  104. // A próxima grade se torda a agrade atual
  105. grade = proxima;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement