I am using LedControl.h library
-
void randomize_cells(): gives a random configuration of cells, so the game has a starting point, or if you wanna change the cell configuration mid game;
void countAliveNeighbors(int row, int col): counts the number of alive neighbors in the position world[row][col], diagonals also count;
void next_generation(): figures out the next generation based on the rules i mentioned above, and is using countAliveNeighbors(row,col) and copies the new “world”(of cells) into the current one;
void showOnLed(): shows on the physical LED, the configuration set on the integer matrix world[8][8] that is filled with ones and zeros
For the joystick control part : if (joystickX != selectedCellX || joystickY != selectedCellY) - ensures that the selected cell state is updated only when the joystick position changes
Inside the if condition, I updated the selectedCellX and selectedCellY variables using the map() function. This maps the joystick's analog values (ranging from 0 to 1023) to the corresponding cell coordinates in the world array (ranging from 0 to SIZE-1).
For changing the state of the selected cell upon joystick click, I added code to check if the joystick click button (JOYSTICK_CLICK_PIN) is pressed and the joystickClicked flag is false. If the conditions are met, the state of the selected cell is toggled by calculating the opposite state using (cellState + 1) % 2. The state of the selected cell in the world array is updated, and the LED at the selected cell position is set to the new state using lc.setLed(). The joystickClicked flag is then set to true.