Hi and welcome to the forums
You could use a single image containing the whole board if you like, although if the board is much larger than the screen, then you are probably better off tiling smaller images. Personally I would tile every time.
Regardless of whether you tile or use a whole image you would still need the same data. Set up some arrays to hold each tile’s top left position on the screen. You can then use this data to do positioning/collision if tiling, and just collision if using a whole image.
Ok, here is a small example, although I would recommend looking in the code base or code snippets forum for better more complete examples.
set display mode 800,600,16
sync on : sync rate 0
REM >>>>> create a tile image <<<<<
ink rgb(155,0,0),0
box 0,0,24,24
ink rgb(0,0,0),0
box 2,2,22,22
get image 1,0,0,24,24,1
ink rgb(255,255,255),0
REM >>>>> create and store the tile positions <<<<<
dim tile_x(24,24)
dim tile_y(24,24)
for y=0 to 552 step 24
inc yy : xx=0
for x=0 to 552 step 24
inc xx
tile_x(xx,yy)=x
tile_y(xx,yy)=y
next x
next y
position mouse 700,400
do
cls 0
mx=mousex()
my=mousey()
tile_x=0
tile_y=0
for y=1 to 24
for x=1 to 24
REM >>>>> paste a tile image to the screen <<<<<
paste image 1,tile_x(x,y),tile_y(x,y)
REM >>>>> check if the cursor is within a tile <<<<<
if mx >= tile_x(x,y) and mx < tile_x(x,y)+24 and my >= tile_y(x,y) and my < tile_y(x,y)+24
tile_x=x
tile_y=y
endif
next x
next y
text 580,10,"Tile_X - "+str$(tile_x)
text 580,30,"Tile_Y - "+str$(tile_y)
sync
loop
For the movement, I would use mouse only. You could simply select the game piece with the mouse then click on the destination tile to complete the move. I don’t know about anyone else, but when I play board/puzzle games, I often like to put my feet up and sit back. I guess if you keep the keys to a minimum I could use my toes, but mouse only would be best

. Just my opinion.
Good luck
Edited code: wrong number in for next loop. Missed off one row of tiles.

Based on Amiga PD game Squigs. Currently being re-written.