Опечатка в книге Эла Свейгарта или почему не работает игра? "Учим Python, делая крутые игры"

Пользователь

от vladGOGOL , в категории: Python , 2 года назад

Всем доброго времени суток. Ближе к делу, перепечатал код программы из книги "Учим Python, делая крутые игры" (стр. 371) и она не работает. На сайте что прикреплён к книге я тоже прогонял код и ошибок он не выдал. Менял изображения но ничего не дало результата. Пытался импровизировать и менять код, подгонять под возможные ошибки но результата тоже 0. Я совсем новичок и мог бы забить на это, но мне шибко интересно в чем же моя (или нет?) ошибка. Поэтому кому интересно, прошу помочь решить задачку.

В этой программе спрайт игрока будет "есть" спрайты вишен, и по мере того, как он их "ест", он будет увеличиваться.




  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import pygame, sys, time, random
from pygame.locals import *

#установка pygame.
pygame.init()
mainClock = pygame.time.Clock()

#настройка окна.
WINDOWWIDTH = 400
WINDOWHEIGHT = 400
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
pygame.display.set_caption('Спрайты и звуки')

#настройка цветов.
WHITE = (255, 255, 255)

#создание структуры данных блока.
player = pygame.Rect(300, 100, 40, 40)
playerImage = pygame.image.load('player.png')
playerStretchedImage = pygame.transform.scale(playerImage, (40, 40))
foodImage = pygame.image.load('cherry.png')
foods = []
for i in range(20):
  foods.append(pygame.Rect(random.randint(0, WINDOWWIDTH - 20), random.randint(0, WINDOWHEIGHT - 20), 20, 20))

foodCounter = 0
NEWFOOD = 40

#создание переменных клавиатуры.
moveLeft = False
moveRight = False
moveUp = False
moveDown = False

MOVESPEED = 6

#настройка музыки.
pickUpSound = pygame.mixer.Sound('pickup.wav')
pygame.mixer.music.load('background.mid')
pygame.mixer.music.play(-1, 0.0)
musicPlaying = True

#запуск игрового цикла.
while True:
  #проверка событий.
  for event in pygame.event.get():
    if event.type == QUIT:
      pygame.quit()
      sys.exit()
    if event.type == KEYDOWN:
      #изменение переменных клавиатуры.
      if event.key == K_LEFT or event.key == K_a:
        moveRight = False
        moveLeft = True
      if event.key == K_RIGHT or event.key == K_d:
        moveLeft = False
        moveRight = True
      if event.key == K_UP or event.key == K_w:
        moveDown = False
        moveUp = True
      if event.key == K_DOWN or event.key == K_s:
        moveUp = False
        moveDown = True
    if event.type == KEYUP:
      if event.key == K_ESCAPE:
        pygame.quit()
        sys.exit()
      if event.key == K_LEFT or event.key == K_a:
        moveLeft = False
      if event.key == K_RIGHT or event.key == K_d:
        moveRight = False
      if event.key == K_UP or event.key == K_w:
        moveUp = False
      if event.key == K_DOWN or event.key == K_s:
        moveDown = False
      if event.key == K_x:
        player.top = random.randint(0, WINDOWHEIGHT - player.height)
        player.left = random.randint(0, WINDOWWIDTH - player.width)
      if event.key == K_m:
        if musicPlaying:
          pygame.mixer.music.stop()
        else:
          pygame.mixer.music.play(-1, 0.0)
        musicPlaying = not musicPlaying

    if event.type == MOUSE****ONUP:
      foods.append(pygame.Rect(event.pos[0] - 10, event.pos[1] - 10, 20, 20))

  foodCounter += 1
  if foodCounter >= NEWFOOD:
    #добавление новой "еды".
    foodCounter = 0
    foods.append(pygame.Rect(random.randint(0, WINDOWWIDTH - 20), random.randint(0, WINDOWHEIGHT - 20), 20, 20))

  #создание на поверхности белого фона.
  windowSurface.fill(WHITE)

  #перемещение игрока.
  if moveDown and player.bottom < WINDOWHEIGHT:
    player.top += MOVESPEED
  if moveUp and player.top > 0:
    player.top -= MOVESPEED
  if moveLeft and player.left > 0:
    player.left -= MOVESPEED
  if moveRight and player.right < WINDOWWIDTH:
    player.right += MOVESPEED


  #отображение блока на поверхности.
  windowSurface.blit(playerStretchedImage, player)

  #проверка, не пере****я ли игрок с каким-либо блоками "еды".
  for food in foods[:]:
    if player.colliderect(food):
      foods.remove(food)
      player = pygame.Rect(player.left, player.top, player.width + 2, player.height + 2)
      playerStretchedImage = pygame.transform.scale(playerImage, (player.width, player.height))
      if musicPlaying:
        pickUpSound.play()

  #отображение "еды".
  for food in foods:
    windowSurface.blit(foodImage, food)

  #вывод окна на экран.
  pygame.display.update()
  mainClock.tick(40 )



Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

Нет ответов