Итак, я сейчас создаю игру со змеями, используя pygame, и я хочу сделать так, чтобы змея росла после того, как съела печенье.Я хочу, чтобы он просто добавил изображение, которое я использовал для головы, в конец змеи, но я не могу понять, как это сделать.
Я пытался объединить две линии змей после вызовамоя функция checkForConsump ().Он вернул сообщение об ошибке «TypeError: Аргумент должен быть объектом стиля прямоугольника».
import pygame, sys, random, time
screenWidth = 500
gameDisplay = pygame.display.set_mode((screenWidth,screenWidth))
#this begins the game
pygame.init()
#This sets a caption
pygame.display.set_caption("Picnic")
#Variables:
snakeFace = pygame.image.load('morrison.png')
screen = pygame.display.set_mode((screenWidth,screenWidth))
x= 50
y= 50
snakewidth = 30
snakeheight = 30
food1width = 40
food1height = 17
food2width = 25
food2height = 26
food3width = 27
food3height = 23
vel = 12
run = True
lastKey = None
food1 = pygame.image.load("thinMint.png")
food2 = pygame.image.load("cookie.png")
food3 = pygame.image.load("triscuit.png")
randFoodX1 = 0
randFoodY1 = 0
randFoodX2 = 0
randFoodY2 = 0
topWall=pygame.draw.rect(screen, (255,0,0), ( 0,0,490,10))
bottomWall=pygame.draw.rect(screen, (255,0,0), (0,490,490,10))
leftWall=pygame.draw.rect(screen, (255,0,0), ( 0,0,10,490))
rightWall=pygame.draw.rect(screen, (255,0,0), ( 490,0,10,490))
def generateFoodPosition():
randFoodX1 = random.randrange(1, 40, 1) * 10
randFoodY1 = random.randrange(1, 40, 1) * 10
randFoodX2 = random.randrange(1, 40, 1) * 10
randFoodY2 = random.randrange(1, 40, 1) * 10
randFoodX3 = random.randrange(1, 40, 1) * 10
randFoodY3 = random.randrange(1, 40, 1) * 10
if randFoodX1 == randFoodX2 or randFoodY1 == randFoodY2 or
randFoodY2==randFoodY3 or randFoodY1== randFoodY3 or randFoodX2 ==
randFoodX3 or randFoodX3 == randFoodX1:
generateFoodPosition()
else:
return [randFoodX1, randFoodY1, randFoodX2,
randFoodY2, randFoodX3, randFoodY3]
def checkForConsumption():
if snakeRect.colliderect(food1Rect):
foodPositions[0] = random.randrange(1, 40, 1) * 10
foodPositions[1] = random.randrange(1, 40, 1) * 10
if snakeRect.colliderect(food2Rect):
foodPositions[2] = random.randrange(1, 40, 1) * 10
foodPositions[3] = random.randrange(1, 40, 1) * 10
if snakeRect.colliderect(food3Rect):
foodPositions[4] = random.randrange(1, 40, 1) * 10
foodPositions[5] = random.randrange(1, 40, 1) * 10
foodPositions = generateFoodPosition()
def checkForWallCollision():
if snakeRect.colliderect(topWall):
print("Poop")
pygame.quit()
if snakeRect.colliderect(bottomWall):
print("Poop")
pygame.quit()
if snakeRect.colliderect(leftWall):
print("Poop")
pygame.quit()
if snakeRect.colliderect(rightWall):
print("Poop")
pygame.quit()
def growSnake():
if snakeRect.colliderect(food1Rect) or
snakeRect.colliderect(food2Rect) or snakeRect.colliderect(food3Rect):
pygame.Rect.union(snakeRect)
print("yah")
while run:
snakeRect = gameDisplay.blit(snakeFace,(x, y))
food1Rect = gameDisplay.blit(food1, (foodPositions[0],
foodPositions[1]))
food2Rect = gameDisplay.blit(food2, (foodPositions[2],
foodPositions[3]))
food3Rect = gameDisplay.blit(food3, (foodPositions[4],
foodPositions[5]))
pygame.time.delay(10) #1/2 milisecond delay
#this controls the "X" button
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
lastKey = event.key
#this controls the movement of the snake
if lastKey == pygame.K_LEFT:# and x > vel:
x-=vel
if lastKey == pygame.K_RIGHT and x< screenWidth:# -
snakewidth -vel:
x+=vel
if lastKey == pygame.K_DOWN and y < screenWidth:# -
snakeheight - vel:
y+= vel
if lastKey == pygame.K_UP:# and y > vel:
y-=vel
#if x == (foodPositions[0] or foodPositions[2] or foodPositions[4])
or y== (foodPositions[1] or foodPositions[3] or foodPositions[5]):
checkForWallCollision()
checkForConsumption()
growSnake()
gameDisplay.fill((0,0,0))
gameDisplay.blit(snakeFace,(x, y))
gameDisplay.blit(food1, (foodPositions[0],
foodPositions[1]))
gameDisplay.blit(food2, (foodPositions[2],
foodPositions[3]))
gameDisplay.blit(food3, (foodPositions[4],
foodPositions[5]))
pygame.draw.rect(screen, (255,0,0), ( 0,0,490,10))
pygame.draw.rect(screen, (255,0,0), ( 0,490,490,15))
pygame.draw.rect(screen, (255,0,0), ( 0,0,10,490))
pygame.draw.rect(screen, (255,0,0), ( 490,0,15,490))
pygame.display.update()
Я ожидал, что маленькая змея покажет другое изображение, прикрепленное к лицу, когда съест печенье, но просто съест печенье, а затем сразу же после выдачи ошибки ...