|
▼kinoko さん:
通常、あるセルから1つ移動させるとしたら
左上、上、右上
左、右
左下、下、右下
この8方向ですね。
でも、セルの場所によっては、上にいけない、左にいけないといった制約がある場所がありますね。
で、私のコードでは、左上、上、右上、左、右、左下、下、右下 を 1,2,3,4,5,6,7,8 という番号で指定。
現在のセルの場所に応じて、そのセルから移動できる場所番号を配列に格納。
(場所によって、8か所、5か所、3か所)
pos = Array(5, 7, 8) や pos = Array(1, 2, 4, 6, 7) といったところです。
で、この配列内からランダムに要素を1つ取り出し、1〜8 に応じて、現在の行や列に対して必要な変更を行っています。
Case 1: i = i - 1: j = j - 1 や Case 7: i = i + 1 といったところです。
なので、0 になるのを防ぐというより、最初から候補として、0にならないものに絞っているといったほうが
よろしいかもしれませんね。
そちらのコードの、その部分(0を回避)については 各コードブロックで r と c を求めた後
c が 0 なら c を 1 にする、r が 0 なら r を 1にするといった【逃げ】のコードを追加 といった感じですかね。
これで 0 になってエラーになるのは回避されるでしょうけど、右と下の枠も設定しておかなければ、どんどんと
見えない場所にいってしまいますね。
|
|