前提・実現したいこと
Pythonで穴掘り法を使って、迷路を作っているのですが、なぜ穴掘り法で作った迷路には一つしか答えがないのでしょうか。
発生している問題・エラーメッセージ
'''
エラーはないのですが、迷路を解決するコードを作りたいと思っています。
'''
該当のソースコード
Python
'''
import random
class Laby():
""" Classe labyrinthe """
chemin = 0
mur = 1
def init(self, l, h):
self.laby = []
self.l = l
self.h = h
if(self.h < 5 or self.l < 5):
print('donnes-moi un chiffre supérieur à 5')
exit()
if (self.l % 2) == 0:
self.l = self.l + 1
if (self.h % 2) == 0:
self.h = self.h + 1
class CreuserLaby(Laby):
poubelle = []
def set_inner_mur_creuser_point(self):
""" Préparation avant de creuser un trou"""
for x in range(0, self.l):
ligne = []
for y in range(0, self.h):
if (x == 0 or y == 0 or x == self.l-1 or y == self.h -1):
case = self.chemin
else:
case = self.mur
ligne.append(case)
self.laby.append(ligne)
x_depart_creuser = random.randrange(1, self.l-1, 2)
y_depart_creuser = random.randrange(1, self.h-1, 2)
self.laby[x_depart_creuser][y_depart_creuser] = self.chemin
self.poubelle.append([x_depart_creuser, y_depart_creuser])
def creuse_laby(self): """ Creuser le trou """ while True: if self.poubelle == []: break x, y = self.poubelle.pop(random.randrange(0, len(self.poubelle))) while True: lst_direction_creuser = [] if self.laby[x][y-1] == self.mur and self.laby[x][y-2] == self.mur: lst_direction_creuser.append('bas') elif self.laby[x+1][y] == self.mur and self.laby[x+2][y] == self.mur: lst_direction_creuser.append('droite') elif self.laby[x][y+1] == self.mur and self.laby[x][y+2] == self.mur: lst_direction_creuser.append('haut') elif self.laby[x-1][y] == self.mur and self.laby[x-2][y] == self.mur: lst_direction_creuser.append('gauche') if lst_direction_creuser == []: break else: direction_creuser = random.choice(lst_direction_creuser) if direction_creuser == 'bas': self.laby[x][y-1] = self.chemin self.laby[x][y-2] = self.chemin self.poubelle.append([x, y-2]) elif direction_creuser == 'droite': self.laby[x+1][y] = self.chemin self.laby[x+2][y] = self.chemin self.poubelle.append([x+2, y]) elif direction_creuser == 'haut': self.laby[x][y+1] = self.chemin self.laby[x][y+2] = self.chemin self.poubelle.append([x, y+2]) elif direction_creuser == 'gauche': self.laby[x-1][y] = self.chemin self.laby[x-2][y] = self.chemin self.poubelle.append([x-2, y]) def set_outer_mur_start_goal(self): for x in range(0, self.l): for y in range(0, self.h): if (x == 0 or y == 0 or x == self.l-1 or y == self.h -1): self.laby[x][y] = self.mur self.laby[0][1] = 'S' self.laby[self.l-2][self.h-1] = 'G' def print_laby(self): self.set_inner_mur_creuser_point() self.creuse_laby() self.set_outer_mur_start_goal() for ligne in self.laby: for case in ligne: if case == self.chemin: print(' ', end ='') elif case == self.mur: print('???? ' ,end='') elif case == 'S': print(' ', end='') elif case == 'G': print(' ', end='') print()
laby_creuser = CreuserLaby(20, 20)
laby_creuser.print_laby()
'''
試したこと
穴掘り法を使って作った迷路は一つしか答えがないことを分かっていたので、self.laby[0][1]を利用してコードを作ろうと思いましたが、無理でした。
補足情報(FW/ツールのバージョンなど)
##フランス語で書いたコードなので翻訳
self.l は横
self.h は高さ
creuser やCreuse は掘る
self.chemin は道でself.mur は壁となっています。
LABY やlabyrinthe は迷路を指します。
poubelle はもうすでに通った道を貯めておく(?)リストです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/28 17:30