我正在制作一款用iPython notbook编写的迷宫游戏。我无法访问pygame,因此从头开始进行colission检测。
我到目前为止所获得的代码能够移动玩家并且已经存在一个网格,以确定该游戏区的大小。
from turtle import *
def line(x1, y1, x2, y2):
pu()
goto(x1,y1)
pd()
goto(x2,y2)
pu()
setup(600,600)
setworldcoordinates(-1,-1,11,11)
class Network:
tracer(30)
ht()
for n in range(0,11):
line(0,n,10,n)
line(n,0,n,10)
tracer(1)
head= heading()
st()
class Figur:
register_shape("figur.gif")
shape("figur.gif")
head = heading()
pu()
setpos(9.5,9.5)
def turtle_up():
if head != 90:
seth(90)
fd(1)
def turtle_down():
if head != 270:
seth(270)
fd(1)
def turtle_left():
if head != 180:
seth(180)
fd(1)
def turtle_right():
if head != 360:
seth(0)
fd(1)
onkey(turtle_up, "Up")
onkey(turtle_down, "Down")
onkey(turtle_left, "Left")
onkey(turtle_right, "Right")
listen()
class Walls:
def tortle():
tracer(30)
t1 = Turtle()
t1.color("green")
t1.left(180)
t1.fd(1)
t1.right(90)
t1.fd(11)
for i in range(1,4):
t1.right(90)
t1.fd(12)
for i in range(1,3):
t1.right(90)
t1.fd(1)
t1.left(90)
for i in range(1,5):
t1.fd(10)
t1.right(90)
Walls.tortle()
tracer(1)
update()
done()
目前,墙壁已经无法完成。我刚刚开始他们并尝试在竞争场地周围创建一堵墙,导致洞区被绿色覆盖。乌龟的照片是我自己制作的,但我认为它应该可以在没有它的情况下工作,而只需要使用普通乌龟。
所以我的主要问题是:如何为我的乌龟创建裂片检测,使其无法通过墙壁?
答案 0 :(得分:0)
我会考虑制作已经访问过的set
Vec2D
个点,然后在每次移动时进行比较。这是一个简单的前进和后退功能:
def no_collision_forward(amount, walls):
movement = 1 if abs(amount) == amount else -1 # If amount is negative, moving down
for i in range(abs(amount)):
cur_pos = pos()
nex_pos = Vec2D(cur_pos[0], cur_pos[1] + movement)
if nex_pos in walls:
return # Can return whatever
else:
forward(movement)
def no_collision_backward(amount, walls):
return no_collision_forward(-amount, walls)
visited_locations
应该是一组Vec2D
或元组。
这可能不是最有效的解决方案,但它有效!