52 lines
1.8 KiB
Python
Executable File
52 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python
|
||
import logging
|
||
import os
|
||
import traceback
|
||
from logging.handlers import RotatingFileHandler
|
||
|
||
import pygame as pg
|
||
|
||
# 由于在后续本地模块中存在对pygame的调用,在此处必须完成pygame的初始化
|
||
os.environ[
|
||
'SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR'
|
||
] = '0' # 设置临时环境变量以避免Linux下禁用x11合成器
|
||
pg.init()
|
||
|
||
from source import constants as c
|
||
from source import tool
|
||
from source.state import level, mainmenu, screen
|
||
|
||
if __name__ == '__main__':
|
||
# 日志设置
|
||
if not os.path.exists(os.path.dirname(c.USERLOG_PATH)):
|
||
os.makedirs(os.path.dirname(c.USERLOG_PATH))
|
||
logger = logging.getLogger('main')
|
||
formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
|
||
fileHandler = RotatingFileHandler(
|
||
c.USERLOG_PATH, 'a', 1_000_000, 0, 'utf-8'
|
||
)
|
||
# 设置日志文件权限,Unix为644,Windows为可读写;Python的os.chmod与Unix chmod相同,但要显式说明8进制
|
||
os.chmod(c.USERLOG_PATH, 0o644)
|
||
fileHandler.setFormatter(formatter)
|
||
streamHandler = logging.StreamHandler()
|
||
streamHandler.setFormatter(formatter)
|
||
logger.addHandler(fileHandler)
|
||
logger.addHandler(streamHandler)
|
||
|
||
try:
|
||
# 控制状态机运行
|
||
game = tool.Control()
|
||
state_dict = {
|
||
c.MAIN_MENU: mainmenu.Menu(),
|
||
c.GAME_VICTORY: screen.GameVictoryScreen(),
|
||
c.GAME_LOSE: screen.GameLoseScreen(),
|
||
c.LEVEL: level.Level(),
|
||
c.AWARD_SCREEN: screen.AwardScreen(),
|
||
c.HELP_SCREEN: screen.HelpScreen(),
|
||
}
|
||
game.setup_states(state_dict, c.MAIN_MENU)
|
||
game.run()
|
||
except:
|
||
print() # 将日志输出与上文内容分隔开,增加可读性
|
||
logger.error(f'\n{traceback.format_exc()}')
|