For larger boards or smaller screens, the rendering logic should only render the portion of the game inside the screen.
It should also track where the user is in the board-space and enable easily moving the user's position via mouse/touch.
I've already implemented this in mega-minesweeper.
Board coordinates should be floats, 0,0 being top left (use that as starting value)
Track the window size and the tile size, starting with a reasonable default
Using the screen size and tile size, dynamically determine how many rows/columns to draw respectively (the amount that fit on the screen)
Make sure to offset the rows based on the board coordinates since we want smooth tracking (starting row will be slightly above the screen a bit, starting column will be slightly to the left based on the decimal part of the board position)
When clicking, need to determine the tile based on the screen position. To do this, convert the pixel location to a board coordinate based on the event xy positions, cell size, and current position (top left corner), then use the board coordinates to find the index of the tile.
If the user moves their position such that there are no more rows, can draw a neutral boundary color and stop moving at a certain point (maybe leave room for a bit more leeway so the user doesnt have to tap the edge of their screen all the time)
For larger boards or smaller screens, the rendering logic should only render the portion of the game inside the screen. It should also track where the user is in the board-space and enable easily moving the user's position via mouse/touch. I've already implemented this in mega-minesweeper.