Apple не исчезнет, когда моя змея прикоснется к ней
Это мой первый пост! Я пытаюсь сделать клона змеи в Pygame, но когда моя змея касается яблока, она не телепортируется в другое место. Вот мой код:
import pygame
import time
import random
pygame.init()
wh = (255,255,255) #white
bk = (0,0,0) #black
ylw = (255,255,0) #yellow
prpl = (127,0,127) #purple
snakeXChange = 0
snakeYChange = 0
dWidth = 800
dHeight = 600
clock = pygame.time.Clock()
fps = 25
blockSize = 15
appleX = round(random.randrange(0, dWidth - blockSize)/ 10.0)* 10.0
appleY = round(random.randrange(0, dHeight - blockSize) / 10.0)* 10.0
snakeX = dWidth / 2
snakeY = dHeight / 2
font = pygame.font.SysFont(None, 25)
def message(msg, color):
screenText = font.render(msg, True, color)
gameDisplay.blit(screenText, [dWidth / 2, dHeight / 2])
gameDisplay = pygame.display.set_mode((dWidth,dHeight))
pygame.display.set_caption('Snek') #shoutout to Hopson
gameExit = False
gameOver = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
snakeXChange = -blockSize
snakeYChange = 0
if event.key == pygame.K_RIGHT:
snakeXChange = blockSize
snakeYChange = 0
if event.key == pygame.K_UP:
snakeYChange = -blockSize
snakeXChange = 0
if event.key == pygame.K_DOWN:
snakeYChange = blockSize
snakeXChange = 0
snakeX += snakeXChange
snakeY += snakeYChange
gameDisplay.fill(prpl)
pygame.draw.rect(gameDisplay, wh, [snakeX,snakeY,blockSize,blockSize]) #snake
pygame.draw.rect(gameDisplay, ylw, [appleX,appleY,blockSize,blockSize]) #apple
if snakeX == appleX and snakeY == appleY:
appleX = round(random.randrange(0, dWidth - blockSize)/ 10.0)* 10.0
appleY = round(random.randrange(0, dHeight - blockSize) / 10.0)* 10.0
clock.tick(fps)
pygame.display.update()
message("GAME OVER NIBBA", ylw)
pygame.display.update() #updates the display
time.sleep(5)
pygame.quit()
quit()
Первоисточник: https://paste.ee/p/eSimt
Я следую за учебниками NewBoston в качестве ссылки.
ура
SalmonSan
1 ответ
Вы округляете appleX
а также appleY
координаты до ближайшего кратного 10, но перемещаются с шагом 15 пикселей, и это означает, что может случиться так, что змея не сможет дотронуться до яблока. Например, appleX
может быть 410, а змея начинается с 400, поэтому она никогда не сможет достичь яблока.
Просто округлите все позиции до ближайшего кратного 15 (blockSize
и скорость):
appleX = round(random.randrange(0, dWidth - blockSize) / 15.0) * 15.0
appleY = round(random.randrange(0, dHeight - blockSize) / 15.0) * 15.0
snakeX = round(dWidth / 2. / 15.) * 15
snakeY = round(dHeight / 2. / 15.) * 15
Вы также можете просто пройти 15
как step
аргумент random.randrange
чтобы получить случайное число, кратное 15.
appleX = random.randrange(0, dWidth-blockSize, 15)
Также было бы возможно использовать pygame.Rect
s для обнаружения столкновений и сохранения координат.