• 状态机代码实现


    因为这篇文章的目的是游戏界面的状态机实现,所以专门写了一个state_demo.py文件,让大家可以更加方便的看代码。

    游戏启动代码
    开始是 pygame的初始化,设置屏幕大小为c.SCREEN_SIZE(800, 600)。所有的常量都保存在单独的constants.py中。

    import os
    import pygame as pg
    import constants as c

    pg.init()
    pg.event.set_allowed([pg.KEYDOWN, pg.KEYUP, pg.QUIT])
    pg.display.set_caption(c.ORIGINAL_CAPTION)
    SCREEN = pg.display.set_mode(c.SCREEN_SIZE)
    SCREEN_RECT = SCREEN.get_rect()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    load_all_gfx函数查找指定目录下所有符合后缀名的图片,使用pg.image.load函数加载,保存在graphics set中。
    GFX 保存在resources/graphics目录找到的所有图片,后面获取各种图形时会用到。

    def load_all_gfx(directory, colorkey=(255,0,255), accept=('.png', '.jpg', '.bmp', '.gif')):
    graphics = {}
    for pic in os.listdir(directory):
    name, ext = os.path.splitext(pic)
    if ext.lower() in accept:
    img = pg.image.load(os.path.join(directory, pic))
    if img.get_alpha():
    img = img.convert_alpha()
    else:
    img = img.convert()
    img.set_colorkey(colorkey)
    graphics[name] = img
    return graphics

    GFX = load_all_gfx(os.path.join("resources","graphics"))
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    下面是demo的入口函数,先创建了一个保存所有状态的state_dict set,调用setup_states函数设置起始状态是 MAIN_MENU。

    if __name__=='__main__':
    game = Control()
    state_dict = {c.MAIN_MENU: Menu(),
    c.LOAD_SCREEN: LoadScreen(http://www.amjmh.com/v/BIBRGZ_558768/),
    c.LEVEL: Level(),
    c.GAME_OVER: GameOver(),
    c.TIME_OUT: TimeOut()}
    game.setup_states(state_dict, c.MAIN_MENU)
    game.main()

  • 相关阅读:
    If循环初探
    Python用户交互程序
    Python 变量
    python的第一个程序
    PropertiesConfiguration读取值中包含英文逗号,用“”转义
    在windows下查看某个运行程序(或进程)的命令行参数
    eclipse open call hierarchy
    根据process杀死进程
    java在不存在文件夹的目录下创建文件
    eclipse部署web项目至本地tomcat, webapps中找不到
  • 原文地址:https://www.cnblogs.com/ly570/p/11535803.html
Copyright © 2020-2023  润新知