単語をマス目に配置するときのもう一つの問題は上書きの問題だ。
前にも書いたが、例えばkumapoohという単語がすでに配置されていて、
その後にbebechanという単語を書き込むとする。
bebechanがkumapoohに重なるとkumapoohの一部、または
ぜんぶbebechanという単語が上書きしてしまう。
こういう事態をさけて単語を配置しなければならない。
単語を書き込めるか否かの判定基準を整理すると以下のようになるだろう。
(1)マスが空白の場合は文字を書きこめる。
(2)マスが空白でない場合は、既に書かれている文字が
これから書き込む文字と同じならば文字を書き込める。
具体的なコードは以下のようになるだろう。書き込み8方向のうち、
左下から右上に単語を書き込む場合を例示することにした。
残りのの7方向についても本質的には変わるものではない。
注:%Star:書き込もうとする単語の文字列
%CanPlace:単語を書き込めるか否かを示すフラグ。Trueなら書き込める。
%WordNum:書き込んだ単語の数。
%CanPlace = True
!!書き込めるか否かを調べる。書き込めなければ
!!フラグ%CanPLaceをFalseにする。
For %DY = %Length To 1 Step -1
For %DX = 1 To %Length
If $MyCell(%Y - %DY + 1, %X + %DX - 1) <> "" And $MyCell(%Y - %DY + 1, %X + %DX - 1) <> Mid(%Str, %DY, 1) Then
%CanPlace = False
Exit For
End If
Next
Next
!!フラグ%CanPlaceがTrueなら実際に書き込む。
If %CanPlace = True Then
For %DY = %Length To 1 Step -1
$MyCell(%Y - %DY + 1, %X + %DY - 1) = Mid(%Str, %DY, 1)
Next
!!単語を書き込んだら%WordNumに1を加算する。
%WordNum = %WordNum + 1
End If
コメント