Python 3.x 角色仅在鼠标移动时移动

Python 3.x 角色仅在鼠标移动时移动,python-3.x,pygame,Python 3.x,Pygame,我是编程界的新手,所以我在制作第一个游戏时遇到了一些麻烦。当鼠标在游戏屏幕上移动时,角色就移动了,我看到我需要更新函数中的代码,但我实际上不知道如何做,所以我有时会重新组织代码,看看会发生什么,但我仍然有问题。比赛还没有准备好 import pygame from random import randrange def eat(c1, c2): return c1[0] == c2[0] and c1[1] == c2[1] UP = 0 RIGHT = 1 DOWN = 2 L

我是编程界的新手,所以我在制作第一个游戏时遇到了一些麻烦。当鼠标在游戏屏幕上移动时,角色就移动了,我看到我需要更新函数中的代码,但我实际上不知道如何做,所以我有时会重新组织代码,看看会发生什么,但我仍然有问题。比赛还没有准备好

import pygame
from random import randrange


def eat(c1, c2):
    return c1[0] == c2[0] and c1[1] == c2[1]


UP = 0
RIGHT = 1
DOWN = 2
LEFT = 3

pygame.init()
SCREEN = pygame.display.set_mode((500, 500))
pygame.display.set_caption('Jogo da Cobrinha')
icon = pygame.image.load('snake_icon_game.png')
pygame.display.set_icon(icon)

snake = [(230, 250), (240, 250), (250, 250)]
snake_skin = pygame.Surface((10, 10))
snake_skin.fill((255, 255, 255))
current_direction = RIGHT

apple_position = (randrange(0, 500, 10), randrange(0, 500, 10))
apple_skin = pygame.image.load('apple_skin_game.png').convert_alpha()

score = 0

clock = pygame.time.Clock()
game_over = False

while not game_over:
    clock.tick(10)
    SCREEN.fill((0, 0, 0))

    for x in range(0, 500, 10):
        pygame.draw.line(SCREEN, (40, 40, 40), (x, 0), (x, 600))

    for y in range(0, 500, 10):
        pygame.draw.line(SCREEN, (40, 40, 40), (0, y), (600, y))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and current_direction != DOWN:
                current_direction = UP
            if event.key == pygame.K_RIGHT and current_direction != LEFT:
                current_direction = RIGHT
            if event.key == pygame.K_DOWN and current_direction != UP:
                current_direction = DOWN
            if event.key == pygame.K_LEFT and current_direction != RIGHT:
                current_direction = LEFT

        if current_direction == UP:
            snake[0] = (snake[0][0], snake[0][1] - 10)
        if current_direction == RIGHT:
            snake[0] = (snake[0][0] + 10, snake[0][1])
        if current_direction == DOWN:
            snake[0] = (snake[0][0], snake[0][1] + 10)
        if current_direction == LEFT:
            snake[0] = (snake[0][0] - 10, snake[0][1])

        for i in range(len(snake) - 1, 0, -1):
            snake[i] = (snake[i - 1][0], snake[i - 1][1])

        if eat(snake[0], apple_position):
            apple_position = (randrange(0, 500, 10), randrange(0, 500, 10))
            snake.append((0, 0))
            score += 10

        if snake[0][0] == 500 or snake[0][1] == 500 or snake[0][0] < 0 or snake[0][1] < 0:
            game_over = True

    SCREEN.blit(apple_skin, apple_position)

    for position in snake:
        SCREEN.blit(snake_skin, position)

    pygame.display.update()
导入pygame
从随机输入范围
def eat(c1、c2):
返回c1[0]==c2[0]和c1[1]==c2[1]
向上=0
右=1
向下=2
左=3
pygame.init()
SCREEN=pygame.display.set_模式((500500))
pygame.display.set_标题('Jogo da Cobrinha')
icon=pygame.image.load('snake\u icon\u game.png')
pygame.display.set_图标(图标)
snake=[(230250),(240250),(250250)]
蛇皮=pygame.Surface((10,10))
蛇皮填充物(255,255,255))
当前方向=右
苹果位置=(随机范围(0500,10),随机范围(0500,10))
apple\u skin=pygame.image.load('apple\u skin\u game.png')。convert\u alpha()
分数=0
clock=pygame.time.clock()
游戏结束=错误
虽然游戏尚未结束:
时钟滴答(10)
屏幕填充((0,0,0))
对于范围(0、500、10)内的x:
pygame.draw.line(屏幕,(40,40,40),(x,0),(x,600))
对于范围(0、500、10)内的y:
pygame.draw.line(屏幕,(40,40,40),(0,y),(600,y))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_向上和当前方向!=向下:
当前方向=向上
如果event.key==pygame.K_RIGHT和current_direction!=左:
当前方向=右
如果event.key==pygame.K_向下和当前_方向!=向上:
当前方向=向下
如果event.key==pygame.K_左和当前方向!=正确的:
当前方向=左
如果当前_方向==向上:
蛇[0]=(蛇[0][0],蛇[0][1]-10)
如果当前_方向==右侧:
蛇[0]=(蛇[0][0]+10,蛇[0][1])
如果当前_方向==向下:
蛇[0]=(蛇[0][0],蛇[0][1]+10)
如果当前_方向==左侧:
蛇[0]=(蛇[0][0]-10,蛇[0][1])
对于范围内的i(len(snake)-1,0,-1):
蛇[i]=(蛇[i-1][0],蛇[i-1][1])
如果吃(蛇[0],苹果位置):
苹果位置=(随机范围(0500,10),随机范围(0500,10))
snake.append((0,0))
分数+=10
如果snake[0][0]==500或snake[0][1]==500或snake[0][0]<0或snake[0][1]<0:
游戏结束=正确
屏幕。blit(苹果皮,苹果位置)
对于snake中的位置:
屏幕。blit(蛇皮,位置)
pygame.display.update()

也许这只是一个粘贴错误,但主循环中的处理逻辑是缩进的,因此只有在发生事件时才会处理。这与鼠标未在窗口内移动时停止的内容相关(鼠标移动生成事件)

请注意区别:

while not game_over:
    clock.tick(10)
    SCREEN.fill((0, 0, 0))

    for x in range(0, 500, 10):
        pygame.draw.line(SCREEN, (40, 40, 40), (x, 0), (x, 600))

    for y in range(0, 500, 10):
        pygame.draw.line(SCREEN, (40, 40, 40), (0, y), (600, y))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and current_direction != DOWN:
                current_direction = UP
            if event.key == pygame.K_RIGHT and current_direction != LEFT:
                current_direction = RIGHT
            if event.key == pygame.K_DOWN and current_direction != UP:
                current_direction = DOWN
            if event.key == pygame.K_LEFT and current_direction != RIGHT:
                current_direction = LEFT

    # STARTING HERE -- INDENTATION FIX
    if current_direction == UP:
        snake[0] = (snake[0][0], snake[0][1] - 10)
    if current_direction == RIGHT:
        snake[0] = (snake[0][0] + 10, snake[0][1])
    if current_direction == DOWN:
        snake[0] = (snake[0][0], snake[0][1] + 10)
    if current_direction == LEFT:
        snake[0] = (snake[0][0] - 10, snake[0][1])

    for i in range(len(snake) - 1, 0, -1):
        snake[i] = (snake[i - 1][0], snake[i - 1][1])

    if eat(snake[0], apple_position):
        apple_position = (randrange(0, 500, 10), randrange(0, 500, 10))
        snake.append((0, 0))
        score += 10

    if snake[0][0] == 500 or snake[0][1] == 500 or snake[0][0] < 0 or snake[0][1] < 0:
        game_over = True

    SCREEN.blit(apple_skin, apple_position)

    for position in snake:
        SCREEN.blit(snake_skin, position)

    pygame.display.update()
游戏未结束时:
时钟滴答(10)
屏幕填充((0,0,0))
对于范围(0、500、10)内的x:
pygame.draw.line(屏幕,(40,40,40),(x,0),(x,600))
对于范围(0、500、10)内的y:
pygame.draw.line(屏幕,(40,40,40),(0,y),(600,y))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_向上和当前方向!=向下:
当前方向=向上
如果event.key==pygame.K_RIGHT和current_direction!=左:
当前方向=右
如果event.key==pygame.K_向下和当前_方向!=向上:
当前方向=向下
如果event.key==pygame.K_左和当前方向!=正确的:
当前方向=左
#从这里开始--缩进修复
如果当前_方向==向上:
蛇[0]=(蛇[0][0],蛇[0][1]-10)
如果当前_方向==右侧:
蛇[0]=(蛇[0][0]+10,蛇[0][1])
如果当前_方向==向下:
蛇[0]=(蛇[0][0],蛇[0][1]+10)
如果当前_方向==左侧:
蛇[0]=(蛇[0][0]-10,蛇[0][1])
对于范围内的i(len(snake)-1,0,-1):
蛇[i]=(蛇[i-1][0],蛇[i-1][1])
如果吃(蛇[0],苹果位置):
苹果位置=(随机范围(0500,10),随机范围(0500,10))
snake.append((0,0))
分数+=10
如果snake[0][0]==500或snake[0][1]==500或snake[0][0]<0或snake[0][1]<0:
游戏结束=正确
屏幕。blit(苹果皮,苹果位置)
对于snake中的位置:
屏幕。blit(蛇皮,位置)
pygame.display.update()

很高兴我能帮忙!