view skaapsteker/__main__.py @ 134:4713a2a3b0be

Initial cutscene screen
author Stefano Rivera <stefano@rivera.za.net>
date Tue, 05 Apr 2011 00:06:07 +0200
parents e1dd3b785269
children 0ad313ec564d
line wrap: on
line source

"""Game main module.
   """

import sys
import optparse

import pygame
from pygame.locals import SWSURFACE

from . import options
from .constants import SCREEN, FREQ, BITSIZE, CHANNELS, BUFFER, DEBUG
from .engine import Engine
from .levelscene import LevelScene
from .menuscene import MenuScene


def parse_args(args):
    parser = optparse.OptionParser()
    parser.add_option("--no-sound", action="store_false", default=True,
            dest="sound", help="disable sound")
    parser.add_option("--dvorak", action="store_true", default=False,
            dest="dvorak", help="Dvorak keyboard layout")
    if DEBUG:
        parser.add_option("--level", type="str", default=None,
            dest="level", help="Initial level")
        parser.add_option("--no-rects", action="store_false", default=True,
            dest="rects", help="Disable debugging rects")
    opts, _ = parser.parse_args(args or [])
    options['dvorak'] = opts.dvorak
    options['sound'] = opts.sound
    if DEBUG:
        options['debug_rects'] = opts.rects
        return opts.level


def main():
    """Launch Nine Tales.
       """
    level = parse_args(sys.argv)
    pygame.display.init()
    pygame.font.init()
    if options['sound']:
        try:
            pygame.mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER)
        except pygame.error, exc:
            raise
            # TODO: bail out to no_sound(exc)
    else:
        # Ensure get_sound returns nothing, so everything else just works
        # TODO: bail out to disable_sound()
        pass

    pygame.display.set_mode(SCREEN, SWSURFACE)
    #pygame.display.set_icon(pygame.image.load(
    #    data.filepath('icons/nine_tales24x24.png')))
    pygame.display.set_caption("Nine Tales")

    engine = Engine()
    if level is not None:
        engine.change_scene(LevelScene(engine.game_state, level))
    else:
        engine.change_scene(MenuScene(engine.game_state))
    try:
        engine.run()
    except KeyboardInterrupt:
        pass


if __name__ == '__main__':
    main()