71 lines
2.1 KiB
Python
Executable File
71 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import traceback
|
|
|
|
import tcod
|
|
|
|
import color
|
|
import exceptions
|
|
import input_handlers
|
|
import setup_game
|
|
|
|
|
|
def save_game(handler: input_handlers.BaseEventHandler, filename: str) -> None:
|
|
"""If the current event handler has an active Engine then save it."""
|
|
if isinstance(handler, input_handlers.EventHandler):
|
|
handler.engine.save_as(filename)
|
|
print("Game saved.")
|
|
|
|
|
|
def main() -> None:
|
|
screen_width = 80
|
|
screen_height = 50
|
|
|
|
tileset = tcod.tileset.load_tilesheet(
|
|
"dejavu10x10_gs_tc.png",
|
|
32,
|
|
8,
|
|
tcod.tileset.CHARMAP_TCOD
|
|
)
|
|
|
|
handler: input_handlers.BaseEventHandler = setup_game.MainMenu()
|
|
|
|
with tcod.context.new_terminal(
|
|
screen_width,
|
|
screen_height,
|
|
tileset=tileset,
|
|
title="Yet Another Roguelike Tutorial",
|
|
vsync=True,
|
|
) as context:
|
|
root_console = tcod.Console(screen_width, screen_height, order="F")
|
|
try:
|
|
while True:
|
|
root_console.clear()
|
|
handler.on_render(console=root_console)
|
|
context.present(root_console)
|
|
|
|
try:
|
|
for event in tcod.event.wait():
|
|
context.convert_event(event)
|
|
handler = handler.handle_events(event)
|
|
except Exception: # Handle exceptions in game.
|
|
traceback.print_exc() # Print error to stderr.
|
|
# Then print the error to the message log.
|
|
if isinstance(handler, input_handlers.EventHandler):
|
|
handler.engine.message_log.add_message(
|
|
traceback.format_exc(),
|
|
color.error,
|
|
)
|
|
|
|
except exceptions.QuitWithoutSaving:
|
|
raise
|
|
except SystemExit: # Save and quit.
|
|
save_game(handler, "savegame.sav")
|
|
raise
|
|
except BaseException: # Save on any other unexpected exception.
|
|
save_game(handler, "savegame.sav")
|
|
raise
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|