当前位置: 首页 > 知识库问答 >
问题:

为什么蛇不向下移动(键盘向下)

阎弘
2023-03-14

我正在用python编写一个蛇游戏,蛇可以向上、向左和向右移动,当我试图向下移动时(使用箭头)总是会出错。我正在处理碰撞,因为蛇会与自身碰撞(蛇头接触身体),屏幕将显示“游戏结束-你输了”。

Traceback (most recent call last):
 File "/Users/myname/Documents/SnakeGame.py", line 107, in <module>
   collision_y = playerRect.centrex
AttributeError: 'pygame.Rect' object has no attribute 'centrex'
#timer for the game and frames per second
startTime = time.perf_counter()
FPS = 300
elapsedTime = 0

#creating numbers and text
GameOverFont = pygame.font.SysFont ('arial', 20)
GameOverMsg = GameOverFont.render("GAME OVER - YOU LOST", True, (RED))
screen.blit (GameOverMsg, [screenCentreX, screenCentreY])

collision_x = 0
collision_y = 0
collision_colour = None

clock = pygame.time.Clock()
speed = 3
screen.fill(WHITE)


#create a Rect to hold the player
# you need to give it the x,y, width, height parameters
playerRect = pygame.Rect(startX,startY,32,32)

# set main loop to True so it will run
main = True
# main loop
while main:
    for event in pygame.event.get(): 
        if event.type ==pygame.QUIT: 
            main = False 
        if event.type ==pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                dx = 0
                dy = -speed
            elif event.key == pygame.K_DOWN:
                dx = 0
                dy = speed
            elif event.key == pygame.K_LEFT:  # note: this section of code
                dx = -speed                  # doesn't have to change from
                dy = 0                        # code not using Rects
            elif event.key == pygame.K_RIGHT:
                dx = speed
                dy = 0
            elif event. key == pygame.K_q:
                pygame.quit()
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                dx = 0
                dy = 0
            elif event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                dx = 0
                dy = 0

      #frames per second the program is running on
        clock.tick(FPS)


        if dx > 0:
                collision_x = playerRect.right + 1
                collision_y = playerRect.centery
                collision_colour = screen.get_at((collision_x,collision_y))

        elif dx < 0:
                collision_x = playerRect.left - 1
                collision_y = playerRect.centery
                collision_colour = screen.get_at((collision_x,collision_y))
        elif dy > 0:
                collision_x = playerRect.bottom + 1
                collision_y = playerRect.centrex
                collision_colour = screen.get_at((collision_x,collision_y))
        elif dy < 0:
                collision_x = playerRect.top - 1
                collision_y = playerRect.centerx
                collision_colour = screen.get_at((collision_x,collision_y))

        if collision_colour == BLUE:
                screen.fill(BLACK)
                startX = screenCentreX
                startY = screenCentreY
                dx = 0
                dy = 0
                main = False
                gameover = True
                elapsedTime = int(time.perf_counter() - startTime)

共有1个答案

傅乐湛
2023-03-14

在线collision_y=playerRect上有一个拼写错误的中心。elif dy中的centrex

 类似资料:
  • 我见过的每个滚动实现都需要执行Javascript(例如、),而不是Selenium Webdriver中的可用方法来执行此操作。既然Webdriver被设计为在浏览器中执行用户可能使用的相同交互,为什么在任何地方都找不到呢? 我知道使用Webdriver与DOM中的元素交互可以避免滚动元素,但是有些库(如ReactVirtualized)被设计成只呈现可见行,这使得自动化更加困难。

  • 我们为树视图控件创建一个层次数据模板。我们可以使用鼠标单击树项来更改选择。现在,我们要使用键盘上下键来上下移动所选内容。但似乎行不通。我用谷歌和Stackoverflow搜索了很多,但是失败了。 所以我为此创建了一个新的线程,你能给我一些帮助吗?thx。 另一个问题是,我可以使用鼠标单击文本块来选择项目,但是当我使用鼠标单击复选框时,该项目无法被选中。当我点击复选框时,是否无论如何要选择树视图项?

  • 我有一个下拉菜单,除了一个我无法解决的小错误外,它工作得很好。 第一个下拉框项正常出现。然而,第二个下拉框项稍微向右移动。我猜想是我设置的链接的边距导致下拉框稍微向右移动。如果是这样的话,我能做些什么来解决这个问题呢? 这是一个简单的导航菜单,它将drop菜单项的位置设置为绝对位置,并由父元素的overflow:隐藏功能隐藏。悬停时,下拉框会显示溢出:可见。 现场在这里- CSS 超文本标记语言

  • 我正在开发一个应用程序,在一个xml文件中有两个线性布局。开始时,一个线性布局设置为不可见。当用户按下按钮时,可见的线性布局应向下滑动90%,并显示第二个线性布局。我编写了动画文件,并使其运行良好。我的问题是,在动画之后,视图会回到原来的状态。如何向下移动第一个线性布局以显示第二个线性布局?有什么帮助吗? 主活动文件: } XML文件:

  • 我正在使用自定义底部导航栏。因此,每当我关注编辑文本字段时,底部视图就会与键盘一起出现。 我已尝试更改清单中的和。它可以工作,但使用时滚动不起作用。 下面是java代码,这是底部导航的单击操作。它与其他三项相似。 }

  • 我们用AngularJS HTML创建了一个应用程序。在这种情况下,文本框、链接、按钮和其他对象上的选项卡顺序应该是从左到右的。一旦到达行上最右边的对象,选项卡就应该向下移动到最左边的文本框。 为了实现这一点,我在元素上添加了tab-index,但根据需要,我需要从左到右移动。 下面添加了一个示例代码: 由于所设计的UI是列式设计,所以如果设计分为两部分,每部分有四个组合框,则添加为: DIV1