#!/usr/bin/python # This file is part of 'nethack-sokoban' and is licensed under the MIT-LICENSE. # See the file LICENSE for conditions for redistribution and use. import curses import curses.ascii import curses.wrapper import getopt import logging import os.path import sys from logging import debug from nethack_sokoban.command import MoveCommand from nethack_sokoban.cursesrenderer import CursesRenderer from nethack_sokoban.game import Game, Level from nethack_sokoban.loaders import StringLoader from nethack_sokoban.recording import FileRecorder, FilePlayer import nethack_sokoban.levels valid_directions = [ "N", "NE", "E", "SE", "S", "SW", "W", "NW" ] valid_methods = [ "restart", "nextLevel", "prevLevel", "undo", "redo" ] game_keybindings = { "k": "N", "u": "NE", "l": "E", "n": "SE", "j": "S", "b": "SW", "h": "W", "y": "NW", "8": "N", "9": "NE", "6": "E", "3": "SE", "2": "S", "1": "SW", "4": "W", "7": "NW", "q": "quit", "r": "restart", "a": "nextLevel", "z": "prevLevel", "s": "redo", "x": "undo", } playback_keybindings = { 'q': "quit", ' ': "step", } def curses_main(win, game, file_player = None): curses.use_default_colors() renderer = CursesRenderer(win, game) while True: c = win.getkey() if file_player: debug("key is %s", c) cmd = None try: cmd = playback_keybindings[c] except KeyError: continue if cmd == "quit": break elif cmd == "step": if not file_player.step(): renderer.status_win.addstr(0, 0, "Playback finished, press 'q' to quit.") renderer.status_win.refresh() else: raise ValueError("unexpected command '%s'" % cmd) else: debug("key is %s", c) cmd = None try: cmd = game_keybindings[c] except KeyError: continue if cmd in valid_directions: game.performCommand(MoveCommand(game, cmd)) elif cmd in valid_methods: getattr(game, cmd)() elif cmd == "quit": break else: raise ValueError("unexpected command '%s'" % cmd) if __name__ == "__main__": #logging.basicConfig(level=logging.DEBUG,filename="nethack-sokoban.log") try: optlist, args = getopt.getopt(sys.argv[1:], 'i:o:') except getopt.GetoptError: print os.path.basename(sys.argv[0]) + " [-i ] [-o