Проблемы с синтаксисом Python и Pygame
Уважаемое сообщество Stackru, мне тринадцать лет, и я сейчас создаю игру Santa Hats. Это должно было быть на Рождество (началось в декабре прошлого года), поэтому я сильно отстала от графика! Вот мой код: Santa_hats_game.py. Если вы ответите, пожалуйста, ответьте в пунктах или нумерованных списках, например:
- Элемент списка
- Элемент списка
- Элемент списка
Спасибо.
Проблемы с моим кодом:
- Когда вы спрашиваете, хотите ли вы сохранить скриншот, вводите только то, что можно перевести,
lower()
метод, в любой"yes"
или же"no"
будут приняты, несмотря наor
оператор - одно из условий в этом блоке кодаif save_option.lower() == ("yes" or "y"):
и он будет только принимать"yes"
или же условие оценивается какFalse
, Я не знаю, почему это так. - При рендеринге введение в игру в
def introduction():
По какой-то причине каждый поверхностный объект рисуется дважды. Вот как это выглядит: Однако, когда я увеличиваю пиксели, сдвинутые в каждом кадре до 60, это происходит: Когда "доставить все свои подарки" достигает верхней части экрана,
introduction()
заканчивается и начинается основной игровой цикл. Я вижу любую логическую ошибку, относящуюся к этому, в этом фрагменте кода:пока не pygame.sprite.Group.has(intro_story_surface_objects): для события в pygame.event.get(): если event.type == QUIT или event.type == KEYDOWN и event.key \ == K_ESCAPE: destroy()
DS.blit(BACKGROUND, (0, 0)) pygame.draw.rect(DS, (0, 0, 0, 50), (0, DISPLAY_HEIGHT - 200, DISPLAY_WIDTH, 200), 0) # (screen, color, (x,y,width,height), thickness) count = 0 for line in intro_story_surface_objects: line_x_y = (intro_story_surface_objects[line].rect.x, intro_story_surface_objects[line].rect.y) intro_story_sprite_group.draw(DS) intro_story_surface_objects[line].rect.y -= 60 # intro_story_surface_objects[line].speed if intro_story_surface_objects[line].rect.y + intro_story_surface_objects[line].rect.height < 0: intro_story_surface_objects[line].kill() # print("Kill") line_kills += 1 if line_kills == len(intro_story_surface_objects): return pygame.display.update() clock.tick(30)
Еще раз спасибо заранее за попытку помочь. Я всегда буду ценить это.
Из Киран
2 ответа
- Для первой проблемы. Пытаться:
if save_option.lower() in ['yes', 'y']:
То, что говорит ваш оператор в скобках: если первое значение оценивается как ложное, сравните со вторым. Поскольку строка 'yes'
всегда True
save_option.lower()
никогда не сравнивается с 'y'
,
Я не могу помочь с остальным этим, к сожалению. Я не использовал Pygame. Удачи, хотя! И счастливой игры.
Отвечая на мой собственный вопрос 2.
Мне все еще нужно ответить на 2 других вопроса, кроме этого.
Когда код выполняется, текст выглядит так, как будто он рисуется дважды. Проблема в том, что каждый раз, когда координаты x и y для каждой строки текста изменяются, ВЕСЬ список строк, который рисуется дважды.
Просто маленькая случайность. Мой код должен был быть структурирован так:
while there are lines of text:
draw all the lines in this command - intro_story_sprite_group.draw(DS)
loop through each line:
Change its (x, y)
Не делай этого:
while there are lines of text:
loop through each line:
draw all the lines in this command - intro_story_sprite_group.draw(DS)
Change its (x, y)
ПОЖАЛУЙСТА, НЕ ЗАБУДЬТЕ, ЧТО МНЕ НУЖНО 2 ОТВЕТА НА БОЛЬШЕ ВОПРОСОВ! Спасибо за вашу помощь,
Киран