Estou tendo problemas quando o pacman colide com a parede. Eu inseri um labirinto e usando um loop for desenhei o labirinto, o movimento do pacman também está funcionando bem, mas quando atinge uma parede, quero que pare.
Como posso fazer com que ele pare e aguarde a entrada do usuário para mudar de direção usando as teclas? O que eu tentei foi usar uma variável para dizer que ela parou e iria parar, mas não responderia a nenhuma das teclas que eu inseriria para que ela se movesse novamente
maze = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XP XXXXXXXE XX",
"X XXXXXXX XXXXXX XXXXX",
"X XX XXXXXX XXXXX",
"X XX XXX EXX",
"XXXXXX XX XXX XX",
"XXXXXX XX XXXXXX XXXXX",
"XXXXXX XX XXXX XXXXX",
"X XXX XXXX XXXXX",
"X XXX XXXXXXXXXXXXXXXXX",
"X XXXXXXXXXXXXXXX",
"X XXXXXXXX",
"XXXXXXXXXXXX XXXXX X",
"XXXXXXXXXXXXXXX XXXXX X",
"XXX XXXXXXXXXX X",
"XXXE X",
"XXX XXXXXXXXXXXXX",
"XXXXXXXXXX XXXXXXXXXXXXX",
"XXXXXXXXXX X",
"XX XXXXX X",
"XX XXXXXXXXXXXXX XXXXX",
"XX YXXXXXXXXXXX XXXXX",
"XX XXXX X",
"XXXXE X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
def move():
if player.direction=="right":
player.setx(player.xcor()+7)
if player.direction=="left":
player.setx(player.xcor()-7)
if player.direction=="up":
player.sety(player.ycor()+7)
if player.direction=="down":
player.sety(player.ycor()-7)
def right():
player.direction="right"
def left():
player.direction="left"
def up():
player.direction="up"
def down():
player.direction="down"
def exit():
turtle.bye()
screen=turtle.Screen()
screen.bgcolor("black")
screen.setup(900,900)
screen.tracer(n=0)
walllist=[]
x=-365
y=360
for r in maze:
for h in r:
if h=="X":
wall=turtle.Turtle()
wall.color("blue")
wall.shapesize(1.43,1.43,1)
wall.shape("square")
wall.penup()
wall.goto(x,y)
walllist.append(wall)
if h=="P":
player=turtle.Turtle()
player.speed(0)
player.color("yellow")
player.shape("circle")
player.penup()
player.direction="stop"
player.goto(x,y)
x+=30
x=-365
y-=30
screen.listen()
screen.onkey(right,"Right")
screen.onkey(up,"Up")
screen.onkey(down,"Down")
screen.onkey(left,"Left")
screen.onkey(exit,"Escape")
while True:
move()
screen.update()
for wall in walllist:
if player.distance(wall)<29:
player.direction="stop"
Se você mover a atualização da tela abaixo do
for
loop, o pacman continuará respondendo aos movimentos após bater em uma parede:Observe, entretanto, que o pacman não se moverá livremente se estiver agarrado a uma parede, mas irá "arrastar", resultando em você ter que pressionar as teclas de direção repetidamente para que ele se mova. Pior ainda, o pacman poderá entrar nas paredes. Tudo isso, é claro, está diretamente relacionado à forma como você escreveu o algoritmo para detectar e, mais importante, aprovar o próximo movimento. Especificamente, o critério
layer.distance(wall)<29
faz referência à distância até a parede, independentemente da direção ao longo da qual o pacman se move. Isso requer outra maneira de pensar sobre isso.