コマンド ラインから実行して、単語が含まれるファイルを読み取り、それらの単語から WordSearch ゲームを生成するプログラムに取り組んでいます。
いくつかの関数を定義しましたが、問題があるのは word_place 関数です。この関数は、最初にピリオドで満たされたグリッドまたは 2D 配列を取ることになっています。
width = 20
height = 20
grid = [['.' for i in range(0,width)] for j in range(0,height)]
単語は、パズルの幅と高さに収まる限り、前後、縦、横、斜めのいずれかのランダムな場所にランダムに配置されます。
def word_place(word,grid):
global width, height
word = random.choice([word,word[::-1]])
direction = random.choice([[1,0],[0,1],[1,1]])
xsize = width if direction[0] == 0 else width - len(word)
ysize = height if direction[1] == 0 else height - len(word)
x = random.randrange(0,xsize)
y = random.randrange(0,ysize)
for i in range(0,len(word)):
grid[y + direction[1]*i][x + direction[0]*i] = word[i]
return grid
ご覧のとおり、単語が交差すると、最後に配置された単語が交差する単語の文字を上書きします。
プログラムに実行させたいのは、2D 配列の各「座標」をチェックすることです。
たとえば、単語の最初の文字がたまたま にあるとしgrid[5][8]
ます。その位置にピリオドがあるかどうかを確認する必要があります。もしそうなら、それは次の正方形をチェックします。
基本的に、私が配置しようとしている単語の文字が==
a.
またはインデックスに既にある文字であれば、配置しても問題ありません。
これが長いか不明確である場合は申し訳ありません..さらに情報が必要な場合はお知らせください!