view gamelib/main.py @ 584:a1032ab5c1d6

Add check for windows display mode problems
author Neil Muller <drnlmuller@gmail.com>
date Sat, 28 Nov 2009 23:08:35 +0000
parents 03d5cb669298
children b6f42a09945d 6b21b2140262
line wrap: on
line source

'''Game main module.

Contains the entry point used by the run_game.py script.

Feel free to put all your game code here, or in other modules in this "gamelib"
package.
'''

import sys

import pygame
from pgu import gui
from pygame.locals import SWSURFACE, SRCALPHA

#from engine import Engine, MainMenuState
from sound import init_sound
import constants
from config import config
import data
from misc import WarnDialog

def create_main_app(screen):
    """Create an app with a background widget."""
    app = gui.App()
    background = pygame.Surface(screen.get_size())
    widget = gui.Image(background)
    app.init(widget, screen)
    return app

def complaint_dialog(message):
    """Create a complaint dialog"""
    app = gui.App()

    def close(_w):
        app.quit()

    app.close = close

    dialog = WarnDialog('Problem starting Fox Assault',
            message)
    app.run(dialog)
    sys.exit(1)

def sanity_check():
    """Run some sanity checks, and complain if they fail"""
    try:
        pygame.Surface((100, 100), flags=SRCALPHA)
    except Exception, e:
        complaint_dialog("Unable to create a suitable screen, please check your display settings")

def main():
    """Main script."""
    config.configure(sys.argv[1:])
    init_sound()
    sanity_check()
    screen = pygame.display.set_mode(constants.SCREEN, SWSURFACE)
    pygame.display.set_icon(pygame.image.load(
        data.filepath('icons/foxassault24x24.png')))
    main_app = create_main_app(screen)

    from engine import Engine, MainMenuState

    engine = Engine(main_app, config.level_name)
    try:
        engine.run(MainMenuState(engine), screen)
    except KeyboardInterrupt:
        pass