Guest User

Untitled

a guest
Jun 15th, 2024
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. #include <OLED_I2C.h>
  2.  
  3. #define WIDTH 128
  4. #define HEIGHT 64
  5.  
  6. OLED myOLED(A4, A5, A4);
  7.  
  8. // Создаём массив точек (начиная с 20 строки) и заполняем его случайными значениями
  9. // Третий индекс нужен для хранения состояния на текущем ходу (0) и количества очков для следующего хода (1)
  10. byte point[WIDTH][HEIGHT][2];
  11.  
  12. void setup() {
  13.  
  14. myOLED.begin();
  15.  
  16. for (int h=19; h<HEIGHT; h++) {
  17. for (int w=0; w<WIDTH; w++) {
  18.  
  19. point[w][h][0] = random(0,2); // Состояние на текущем шаге
  20. point[w][h][1] = 0; // Очки
  21. }
  22. }
  23.  
  24. }
  25.  
  26. void loop() {
  27.  
  28. myOLED.clrScr();
  29.  
  30. for (int h=19; h<HEIGHT; h++) {
  31. for (int w=0; w<WIDTH; w++) {
  32.  
  33. if (h-1 >= 19) {
  34. if (point[w][h-1][0] == 1) {
  35. point[w][h][1]++;
  36. }
  37. }
  38. if (w-1 >= 0) {
  39. if (point[w-1][h][0] == 1) {
  40. point[w][h][1]++;
  41. }
  42. }
  43. if (w+1 < WIDTH) {
  44. if (point[w][h-1][0] == 1) {
  45. point[w][h][1]++;
  46. }
  47. }
  48. if (h+1 < HEIGHT) {
  49. if (point[w][h+1][0] == 1) {
  50. point[w][h][1]++;
  51. }
  52. }
  53.  
  54. if (point[w][h][0] == 1) {
  55. myOLED.setPixel(w,h);
  56. }
  57.  
  58. }
  59. }
  60. myOLED.update();
  61.  
  62. for (int h=19; h<HEIGHT; h++) {
  63. for (int w=0; w<WIDTH; w++) {
  64.  
  65. if ( point[w][h][1] == 3) { // Правило рождения
  66. point[w][h][0] = 1;
  67. }
  68. else if (point[w][h][1] == 4) { // Правило смерти
  69. point[w][h][0] = 0;
  70. }
  71. // Правило выживания просто тождество
  72.  
  73. // Обнуление очков после подсчёта будущего состояния
  74. point[w][h][1] = 0;
  75. }
  76. }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment