我该如何传送(wormy.py)

时间:2019-05-20 13:11:16

标签: python python-3.x

在下面的代码中,我创建了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

2 个答案:

答案 0 :(得分:1)

----------
|    ||  |
|    ||  |
| wwh||n |
----------

w是蠕虫的身体,h是蠕虫的头部,n是蠕虫的头部新位置。 因此,假设蠕虫向右移动,当您检测到与墙壁的碰撞时,蠕虫头部的新位置将不是墙壁的位置,而是右侧的位置-如果它是免费的。如果不是,请在右侧再试一次。重复此过程,直到找到可用空间。

检查蠕虫是否已经撞到墙壁

  1. 将所有墙壁放入数组wallCoords = [{'x': 2, 'y': 2}, {'x': 29, 'y':2}]
  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}