@Artin24
Начинающий

Код выдаёт ошибку, что не так?

Вот этот код
import pygame
import random
from os import path
import pygame_gui 
from win32api import GetSystemMetrics
from menu import menu, check_menu

FPS = 60

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
WIDTH = GetSystemMetrics(0)
HEIGHT = GetSystemMetrics(1)	


check_menu = check_menu()	
manager = pygame_gui.UIManager((WIDTH, HEIGHT))
all_sprites = pygame.sprite.Group()
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((0, 0), pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.FULLSCREEN)
clock = pygame.time.Clock()
game_over = True

running = True
while running:
	time_delta = clock.tick(60)/1000.0
	#Меню
	if game_over:
		menu()
	if not check_menu:
		running = False
	clock.tick(FPS)	
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			running = False

		manager.process_events(event)
	manager.update(time_delta)

	#Рендеринг
	screen.fill(BLACK)
	manager.draw_ui(screen)
	pygame.display.flip()

pygame.quit()

и вот
import pygame_gui
import pygame
from os import path
from win32api import GetSystemMetrics
from PIL import Image


BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
path_dir = path.join(path.dirname(__file__))
img_dir = path.join(path.dirname(__file__), 'img')
snd_dir = path.join(path.dirname(__file__), 'snd')
WIDTH = GetSystemMetrics(0)
HEIGHT = GetSystemMetrics(1)
size = (WIDTH, HEIGHT)
game_over = True
screen = pygame.display.set_mode((0, 0), pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.FULLSCREEN)
all_sprites = pygame.sprite.Group()


def menu():
	global game_over, running
	im = Image.open('C:/Users/Людмила/Desktop/Программирование/RPG/img/background_menu.png')
	out = im.resize(size)
	out.save('background_menu2.png')
	
	background = pygame.image.load(path.join(path_dir, 'background_menu2.png')).convert()
	
	background_rect = background.get_rect()
	screen.blit(background, (0, 0))
	all_sprites.draw(screen)
	pygame.display.flip()
	while game_over:
		for event in pygame.event.get():
			if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
				game_over = False
				
def check_menu():
	if not game_over:
		return False

При запуске все как надо - выводится изображение, нажимаю esc, игра закрывается, а в интерпретаторе написано
Warning (from warnings module):
  File "C:\Users\Людмила\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pygame_gui\core\ui_font_dictionary.py", line 116
    warnings.warn(str(error))
UserWarning: Unable to load resource with path: C:\Users\Людмила\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pygame_gui/data/FiraCode-Regular.ttf

Перерыл кучу сайтов, предлагают установить этот шрифт, но я зашел в эту директорию и увидел, что он установлен.
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Это простой варнинг, он вряд ли будет являтся причиной закрытия скрипта.
Давайте по порядку разберем.

Запускаете главный файл, код доходит до этих строк.

game_over = True

running = True
while running:
  time_delta = clock.tick(60)/1000.0
  #Меню
  if game_over:
    menu()


Так как game_over == True, сразу выполняется функция menu. Функция menu в бесконечном цикле ожидает нажатие escape, после чего ее выполнение заканчивается и поток возвращается в основной файл.
running = True
while running:
  time_delta = clock.tick(60)/1000.0
  #Меню
  if game_over:
    menu()
  if not check_menu:
    running = False

check_menu будет равен None. Условие not None дает нам True и мы присваиваем running = False. Дальше какой-то неинтересующий нас код, цикл while доходит до конца и не начинается заново, так как runnig уже равен False. Так что выходим из цикла и выполняем pygame.quit(). Конец, код отработал ровно так, как написан.

Как правило я так не делаю, но тут могу только посоветовать что нибудь изучить на тему Python и PyGame. Потому что, даже обладая некоторыми знаниями, читать подобный код не самое простое занятие. Боюсь представить как это выглядит для незнающего человека. Вы сами запутались в своих конструкциях, именах функций, переменных, самой логике приложения
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы