プログラム的には山場がやってきたようだ。単語配置は右から左、
左から右、上から下、下から上、右下から左上、左上から右下、
左下から右上、右上から左下の8方向にランダムに配置する。
そのためには大雑把に言うと1~8までの乱数を生成し、
Select Case文で処理を分岐すればよいだろう。以下が大雑把では
そのコードだ。
!!変数%Dirにより単語の配置方向をランダムに変化させる
Randomize(ThisTime())
%Dir = Int(Rand() * 8)+1 !!8方向
Select Case %Dir
Case 1
!!下から上方向に単語を配置する処理を記述
Case 2
!!左下から右上方向に単語を配置する処理を記述
Case 3
!!左から右方向に単語を配置する処理を記述
Case 4
!!左上から右下方向に単語を配置する処理を記述
Case 5
!!上から下方向に単語を配置する処理を記述
Case 6
!!右上から左下方向に単語を配置する処理を記述
Case 7
!!右から左方向に単語を配置する処理を記述
Case 8
!!右下から左上方向に単語を配置する処理を記述
End Select
単純にいえば単語の配置方向をランダムに変化させることについては
これでいいのだが、上記のコードでは単語が斜めに配置される確率が、
水平・垂直に配置される確率に比べて極端に小さくなってしまう。
例えばFrankenstein(12文字)という単語をを12×12のマス目に配置する場合。
水平方向
右から左:12通り
左から右:12通り
垂直方向
上から下:12通り
下から上:12通り
なのに対して
斜め方向
右上から左下:1通り
右下から左上:1通り
左上から右下:1通り
左下から右上:1通り
ということで48通り対4通りになってしまう。垂直方向、水平方向が48通り
なのに対して斜め方向ではたったの4通りしかないのだ。
次回はこの辺りを改善したい。
コメント