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()
很高兴我能帮忙!