2017-02-08 5 views
0

私はPygameで基本的なスネークゲームを書いていますが、ヘビの体は食べた4個の食べ物の後には伸びず、最初のかみ合いの後も伸びません。私は各咬合の後に新しいボディオブジェクトを作成し、それをリストに格納します。 xとyの変数は、移動前の頭の位置を格納するために使用されます。これは、ヘビの体の最初のセグメントの座標として使用されます。次に、このリストを繰り返して、テールエフェクトを作成するために前のボディセグメントのxとy座標を持つ新しいオブジェクトを作成しようとしています。なぜそれは短い停止ですか?スネークゲームのテール拡張Pygame

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

pygame.init() 

FPS = 30 
fpsClock = pygame.time.Clock() 

WIN_WIDTH = 680 #width of window 
WIN_HEIGHT = 500 #height of window 

DISPLAY = (WIN_WIDTH, WIN_HEIGHT) #variable for screen display 
DEPTH = 32 #standard 
FLAGS = 0 #standard 
BLACK = (0, 0, 0) #black 
RED = (255, 0, 0) #red 
GOLD = (255, 215, 0) 
IDK = (178, 154, 96) 

screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH) 
pygame.display.set_caption('Snake')          

snake_parts = [1] 
Score = 0 
speed = 10 
snakex = 15 
snakey = 70 
size = 20 
Snakes = 1 

# --- classes --- 
class Snake(pygame.Rect): 
    def __init__(self, x, y, screen, size, colour): 
     pygame.Rect.__init__(self, x, y, size, 20) 
     self.screen = screen 
     self.colour = colour 
     self.x = x 
     self.y = y 


    def draw(self, screen): 
     pygame.draw.rect(self.screen, self.colour, self) 

    def coordinates(self): 
     return self.x, self.y 

class Food(pygame.Rect): 
    def __init__(self, x, y, screen): 
     pygame.Rect.__init__(self, x, y, 20, 20) 
     self.screen = screen 

    def draw(self, screen): 
     pygame.draw.rect(self.screen, GOLD, self) 



# --- functions --- 
def get_food_pos(WIN_WIDTH, WIN_HEIGHT): 
    WIN_WIDTH = random.randint(1, WIN_WIDTH) 
    WIN_HEIGHT = random.randint(1, WIN_HEIGHT) 
    return WIN_WIDTH, WIN_HEIGHT 

eaten = True 
pressed_right = True 
pressed_left = False 
pressed_up = False 
pressed_down = False 
pygame.key.set_repeat(10,10) 


while True: 
    screen.fill(BLACK) 

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

     elif event.type == pygame.KEYDOWN:   # check for key presses   
      if event.key == pygame.K_LEFT:  # left arrow turns left 
       pressed_left = True 
       pressed_right = False 
       pressed_up = False 
       pressed_down = False 
      elif event.key == pygame.K_RIGHT:  # right arrow turns right 
       pressed_right = True 
       pressed_left = False 
       pressed_up = False 
       pressed_down = False 
      elif event.key == pygame.K_UP:  # up arrow goes up 
       pressed_up = True 
       pressed_right = False 
       pressed_left = False 
       pressed_down = False 
      elif event.key == pygame.K_DOWN:  # down arrow goes down 
       pressed_down = True 
       pressed_right = False 
       pressed_up = False 
       pressed_left = False 

    x = snakex 
    y = snakey 

    if pressed_left: 
     snakex -= speed 
    elif pressed_right: 
     snakex += speed 
    elif pressed_up: 
     snakey -= speed 
    elif pressed_down: 
     snakey += speed 

    snake_parts[0] = Snake(snakex, snakey, screen, int(size), IDK) 
    snake_parts[0].draw(screen) 



    if eaten: 
     foodx, foody = get_food_pos(WIN_WIDTH, WIN_HEIGHT) 
     eaten = False 

    my_food = Food(foodx, foody, screen) 
    my_food.draw(screen) 

    if snake_parts[0].colliderect(my_food): 
     eaten = True 
     screen.fill(BLACK) 
     a_snake = Snake(snakex, snakey, screen, int(size), RED) 
     snake_parts.append(a_snake) 

    if len(snake_parts) >= 1: 
     for i in range(1, len(snake_parts)-1): 
      tempx, tempy = snake_parts[i].coordinates() 
      snake_parts[i] = Snake(x, y, screen, int(size), RED) 
      snake_parts[i].draw(screen) 
      snake_parts[i+1] = Snake(tempx, tempy, screen, int(size), RED) 
      x, y = tempx, tempy 

答えて

0

は、問題は、この行だった、それを考え出した:

snake_parts[i+1] = Snake(tempx, tempy, screen, int(size), RED) 

は、それを削除し、それが正常に動作しています。