簡単そうなプログラムを作ってみました。

「カーソルが乗ると、色が変る」
でもこれじゃさすがに簡単そうだったので
「カーソルが乗ると、じわっと色が変る」
にしてみました。
もちろん、離れるときもじわっと戻ります。
------
; タイルのマス目上にマウスカーソルがあると、そのタイルがじわっと光る
screen 0, 400, 300
nTileSize = 50
; タイルの色
; 暗い色
dim naBlack, 3
naBlack = 0, 0, 50
; 明るい色
dim naWhite, 3
naWhite = 255, 255, 0
; じわっと光るステップ数(ステータスの値に使用する)
nShineStep = 100
; 全タイルに、光状態のステータスを持たせる[ 0 ~ nShineStep ]
nTileNum_x = int( ginfo_sx / nTileSize )
nTileNum_y = int( ginfo_sy / nTileSize )
dim naShineStatus, nTileNum_x, nTileNum_y
for i, 0, nTileNum_x, 1
for j, 0, nTileNum_y, 1
naShineStatus(i,j) = 0
next
next
; 関数の使い方がよくわからないため使用するグローバル変数
; DrawOneTile()で使用
; タイルのx方向index
gnX = 0
; タイルのy方向index
gnY = 0
; 光らせる度合い(最大nShineStep)
gnShine = 0
; メイン処理
*DrawMain
redraw 0
; タイルを描く
gosub *DrawTile
redraw 1
await 5
goto *DrawMain
stop
; タイルを描く
*DrawTile
nTileNum_x = int( ginfo_sx / nTileSize )
nTileNum_y = int( ginfo_sy / nTileSize )
; マウスがあるタイルを調べる
mouse_i = int( mousex / nTileSize )
mouse_j = int( mousey / nTileSize )
for i, 0, nTileNum_x, 1
for j, 0, nTileNum_y, 1
; マウスがある場合は光らせる
if( (i=mouse_i) and (j=mouse_j) ){
if( naShineStatus(i,j) < nShineStep ){ // 最大に光っていないタイルのみ
naShineStatus(i,j) = naShineStatus(i,j) + 3 // 光るのは暗くするより早く
// ※最後、少しmaxを超えるけど気にしない
}
}else{
; マウスがない場合は暗くさせる
if( naShineStatus(i,j) > 0 ){ // もともと明るいタイルのみ
naShineStatus(i,j) = naShineStatus(i,j) - 1
}
}
; 描画
gnX = i
gnY = j
gnShine = naShineStatus(i,j)
gosub *DrawOneTile
next
next
return
; 指示があったタイルを1つだけ描く
; ※ 関数の使い方がよくわからないので、ひとまずグローバル変数で。。(恥
; よくわからない点メモ
; ・moduleを定義しないといけないのか?
; ・変数は基本的にローカル変数なのか?
; ・グローバル変数も使いたいときはどう記述するか?
; 引数
; gnX:タイルのx方向index
; gnY:タイルのy方向index
; gnShine:光らせる度合い(最大nShineStep)
*DrawOneTile
; 色の計算
if( gnShine<=0 ){
nR = naBlack(0)
nG = naBlack(1)
nB = naBlack(2)
}else:if( gnShine>=nShineStep ){
nR = naWhite(0)
nG = naWhite(1)
nB = naWhite(2)
}else{
nR = naBlack(0) + int( (gnShine*(naWhite(0) - naBlack(0)))/nShineStep )
nG = naBlack(1) + int( (gnShine*(naWhite(1) - naBlack(1)))/nShineStep )
nB = naBlack(2) + int( (gnShine*(naWhite(2) - naBlack(2)))/nShineStep )
}
; 背景
color nR, nG, nB
boxf i*nTileSize, j*nTileSize, (i+1)*nTileSize, (j+1)*nTileSize
; 上のふち
color 0, 0, 0
line gnX*nTileSize, gnY*nTileSize, (gnX+1)*nTileSize, gnY*nTileSize
; 左のふち
line gnX*nTileSize, gnY*nTileSize, gnX*nTileSize, (gnY+1)*nTileSize
return
----------
アルゴリズムの問題なので、
HSP的に、特に難しい技術は使っていません。
長いけど、読めばわかるという感じ。
すべてのタイルごとにステータスを持って、
マウスカーソルの位置を見て、それを変えて、
それを元に色を決定する
というロジックです。
以前やったかもしれないけども、
内部関数の使い方がわからなかったので使いませんでした

じゃ、それは次の課題かなぁ。