我一直致力于从命令行运行的程序,该程序读取包含文字的文件,然后根据这些文字生成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
正如你可能看到的那样,如果单词恰好相交,那么最后放置的单词将会覆盖它相交的单词的字符。
我希望程序做的是检查每个"坐标"我的二维数组。
例如,假设该单词的第一个字母恰好位于grid[5][8]
,它应检查并查看该位置是否有句点。如果是,那么它将检查下一个方块,依此类推。
基本上,如果我试图放置的单词的字母是==
到.
或索引中已有的任何字母,那么可以放置,否则它应该报废那个,并给这个词一个新的起始坐标,然后再试一次。
对不起,如果这很长或不清楚..如果您需要更多信息,请告诉我们!
答案 0 :(得分:1)
这可能是for-else
构造的地方:
while True:
x = random.randrange(0,xsize)
y = random.randrange(0,ysize)
for i in range(0,len(word)):
if grid[y + direction[1]*i][x + direction[0]*i] not in ['.',word[i]]:
break
else:
break
for i in range(0,len(word)):
grid[y + direction[1]*i][x + direction[0]*i] = word[i]
这会继续更改x
和y
,直到初始for循环运行而不会中断。第一个for循环将在网格中的值不是空闲空间或它需要的字母(word[i]
)的任何时候中断。
答案 1 :(得分:0)
您可以直接测试所有空间是否可用并记录索引。如果它是空闲的,则插入值。如果网格的值匹配将放置在那里的字符,那么它仍然没问题。
如果您在插入时进行测试,则仍需记录插入的位置,因为您必须回溯以使用'。's
替换部分字。