在下面的代码中,我创建了2个块(wallCoords1和wallCoords2)。现在,我希望蠕虫在撞到一个障碍物时转移到另一个障碍物(就像蠕虫撞墙一样)。
这是我尝试过的方法,但是没有用:
$arrData = array
(
array(
'a' => 'test',
'b' => 'test2',
'c' => 1,
'd' => 2,
'e' => 'B'
)
);
任何暗示都需要改变什么?还是为什么那条蛇仍会成真?
代码由Mu编辑器运行
if wormCoords[HEAD]['x'] == wallCoords1 or wormCoords[HEAD]['y'] == wallCoords1:
if direction1 == UP:
newHead = {'x': wallCoords2, 'y': wallCoords2 - 1}
elif direction1 == DOWN:
newHead = {'x': wallCoords2, 'y': wallCoords2}
elif direction1 == LEFT:
newHead = {'x': wallCoords2 - 1, 'y': wallCoords2}
elif direction1 == RIGHT:
newHead = {'x': wallCoords2, 'y': wallCoords2}
worm1 = True
答案 0 :(得分:1)
----------
| || |
| || |
| wwh||n |
----------
w
是蠕虫的身体,h
是蠕虫的头部,n
是蠕虫的头部新位置。
因此,假设蠕虫向右移动,当您检测到与墙壁的碰撞时,蠕虫头部的新位置将不是墙壁的位置,而是右侧的位置-如果它是免费的。如果不是,请在右侧再试一次。重复此过程,直到找到可用空间。
检查蠕虫是否已经撞到墙壁
wallCoords = [{'x': 2, 'y': 2}, {'x': 29, 'y':2}]
newHead
的位置是否等于这些wallCoords
中的任何一个,如果是,则将头再移动一个:newHead = # assign to new position as you already do
while newHead in wallCoords:
if direction1 == RIGHT:
newHead["x"] += 1
else ... # other directions
此循环将在max(WIDTH,HEIGHT)
次迭代后结束,因为蛇头当前位于无墙位置。
此后,您将必须检查新位置是否不再与蛇自身碰撞。可以与壁碰撞相同的方式进行。 只有这样,才能将蛇头分配到该新位置
答案 1 :(得分:0)
感谢您的帮助。我找到了解决方法:
print(newHead)
while newHead in wallCoords1:
if direction1 == RIGHT:
newHead = {'x': 29, 'y':2}
elif direction1 == LEFT:
newHead = {'x': 29, 'y':2}