Проблемы с синтаксисом Python и Pygame

Уважаемое сообщество Stackru, мне тринадцать лет, и я сейчас создаю игру Santa Hats. Это должно было быть на Рождество (началось в декабре прошлого года), поэтому я сильно отстала от графика! Вот мой код: Santa_hats_game.py. Если вы ответите, пожалуйста, ответьте в пунктах или нумерованных списках, например:

  1. Элемент списка
  2. Элемент списка
  3. Элемент списка

Спасибо.

Проблемы с моим кодом:

  1. Когда вы спрашиваете, хотите ли вы сохранить скриншот, вводите только то, что можно перевести, lower() метод, в любой "yes" или же "no" будут приняты, несмотря на or оператор - одно из условий в этом блоке кода if save_option.lower() == ("yes" or "y"): и он будет только принимать "yes"или же условие оценивается как False, Я не знаю, почему это так.
  2. При рендеринге введение в игру в def introduction():По какой-то причине каждый поверхностный объект рисуется дважды. Вот как это выглядит: Однако, когда я увеличиваю пиксели, сдвинутые в каждом кадре до 60, это происходит:
  3. Когда "доставить все свои подарки" достигает верхней части экрана, 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 ответа

  1. Для первой проблемы. Пытаться:if save_option.lower() in ['yes', 'y']:

То, что говорит ваш оператор в скобках: если первое значение оценивается как ложное, сравните со вторым. Поскольку строка 'yes' всегда Truesave_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 ОТВЕТА НА БОЛЬШЕ ВОПРОСОВ! Спасибо за вашу помощь,

Киран

Другие вопросы по тегам