蛇问题 - 运动

时间:2015-08-24 11:39:30

标签: python pygame

我在python中遇到了一些代码问题,我正在制作一个版本的蛇,我的问题涉及蛇本身的运动。我已经让方向工作得很好,我只需要做到这一点,以便蛇继续沿着告知的方向移动,通过按键,我还需要使它成为一块,目前它会在移动后显示所有先前的块。

import pygame, sys, time, random
from pygame.locals import *

pygame.init()

size = width,height = 480, 480 #16x30,16x30
grey = (128,128,128)
screen = pygame.display.set_mode(size)
icon = pygame.image.load('snakeIcon.png')
newDir = 0
prevDir = 0
FPS = 8

xCoord = 10.0
yCoord = 10.0

#Main Program:
pygame.display.set_caption('Anthony\'s Snake')
pygame.display.set_icon(icon)
screen.fill(grey)

fpsTime = pygame.time.Clock()

gameB = pygame.image.load('gameB.png')
border = {}
createLvl()

snakeH = pygame.image.load('snakeH.png')
snake = {}

refreshScreen()

keyCheck = {'LEFT':bool(0), 'RIGHT':bool(0), 'UP':bool(0), 'DOWN':bool(0),    'ESC':bool(0)}

pygame.mixer.music.load('retroMusik.mp3')
pygame.mixer.music.set_volume(0.5)
pygame.mixer.music.play(-1)

while bool(1):
for i in range(1):
    snake[str(len(snake))]=snakeH.get_rect()
x = xCoord
y = yCoord
for i in range(len(snake)):
    snake[str(i)].x = x*16
    snake[str(i)].y = y*16

for event in pygame.event.get():
    if event.type==QUIT:
        pygame.quit()
        sys.exit()
    if event.type == KEYDOWN:
        if event.key == K_UP :
            keyCheck['UP'] = bool(1)
        if event.key == K_DOWN :
            keyCheck['DOWN'] = bool(1)
        if event.key == K_LEFT :
            keyCheck['LEFT'] = bool(1)
        if event.key == K_RIGHT :
            keyCheck['RIGHT'] = bool(1)
        if event.key == K_ESCAPE :
            keyCheck['ESC'] = bool(1)

    if event.type == KEYUP:
        if event.key == K_UP :
            keyCheck['UP'] = bool(0)
        elif event.key == K_DOWN :
            keyCheck['DOWN'] = bool(0)
        elif event.key == K_LEFT :
            keyCheck['LEFT'] = bool(0)
        elif event.key == K_RIGHT :
            keyCheck['RIGHT'] = bool(0)
        elif event.key == K_ESCAPE :
            keyCheck['ESC'] = bool(0)

if keyCheck['UP']:
    if prevDir != 'DOWN':
        newDir = 'UP'
        print('Direction changed to UP')
if keyCheck['DOWN']:
    if prevDir != 'UP':
        newDir = 'DOWN'
        print('Direction changed to DOWN')
if keyCheck['LEFT']:
    if prevDir != 'RIGHT':
        newDir = 'LEFT'
        print('Direction changed to LEFT')
if keyCheck['RIGHT']:
    if prevDir != 'LEFT':
        newDir = 'RIGHT'
        print('Direction changed to RIGHT')
prevDir = newDir


if keyCheck['UP'] == bool(1):
    yCoord -= 1
if keyCheck['DOWN'] == bool(1):
    yCoord += 1
if keyCheck['LEFT'] == bool(1):
    xCoord -= 1
if keyCheck['RIGHT'] == bool(1):
    xCoord += 1

refreshScreen()
fpsTime.tick(FPS)

请对我说软,我还是新手。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为你的动画无法正常工作,因为在绘图之前你不会擦除(用背景覆盖)屏幕。有关缓慢而详细的解释,请参阅this Pygame教程。

请勿使用bool(1)。使用TrueFalse

我不确定,但我认为蛇不动的问题是A)你重置你的控制/运动变量或者B)你没有每个“圆形”/帧检查它。

我真的建议找一些教程(或其他东西)并阅读其他人的Python代码,你的代码可以使用很多改进(这不是,重要的是试图改善。)