tutorial online mac library python settings pygame config options

python - mac - pygame online



Crear un archivo de configuraciĆ³n/opciones de juego(config.cfg) en Python (3)

Ahora tengo bastante experiencia en Python y Pygame para crear algunos juegos gráficos 2D básicos. Ahora quiero poder crear un archivo de configuración (config.cfg) para poder almacenar permanentemente las configuraciones y configuraciones del juego para cosas como el ancho y alto de la ventana y el conteo de FPS. El archivo debe leerse verticalmente, por ejemplo

FPS = 30 WINDOW_WIDTH = 1280 WINDOW_HEIGHT = 720 etc.

Obviamente necesito poder leer (y crear) este archivo desde mi juego y también editar los valores sin tocar las etiquetas de texto. No he tocado esto antes, aunque he trabajado con el uso de archivos de texto en Python, así que necesito tanta orientación como me sea posible. Estoy usando Python 3.3 con Pygame 1.9 en Windows 8 Pro x64.

Gracias de antemano, Ilmiont


El manejo de archivos es bastante simple en Python. Y, para su propósito, recomendaría usar json .

Podrías codificar algo así como

import os import json # Default settings default_settings = {''FPS'': 30, ''WINDOW_HEIGHT'': 720, ''WINDOWS_WIDTH'': 1280 } handle_settings(default_settings) def handle_settings(settings): if os.path.exists(os.path.join(os.getcwd(), ''config.cfg'')): with open(''config.cfg'', ''r'') as settings_file: settings = json.load(settings_file) # load from file else: with open(''config.cfg'', ''w'') as settings_file: json.dump(settings, settings_file) # write to file # Changed settings as per user config handle_settings(changed_settings)


Puede hacerlo con el módulo configparser (ConfigParser for <Python 3).

Ejemplo de la documentación (esto usa Python 2. * Sintaxis, debe usar configparser ):

Leer

import ConfigParser config = ConfigParser.RawConfigParser() config.read(''example.cfg'') a_float = config.getfloat(''Section1'', ''a_float'') an_int = config.getint(''Section1'', ''an_int'') print a_float + an_int if config.getboolean(''Section1'', ''a_bool''): print config.get(''Section1'', ''foo'')

Escribir

import ConfigParser config = ConfigParser.RawConfigParser() config.add_section(''Section1'') config.set(''Section1'', ''an_int'', ''15'') config.set(''Section1'', ''a_bool'', ''true'') config.set(''Section1'', ''a_float'', ''3.1415'') config.set(''Section1'', ''baz'', ''fun'') config.set(''Section1'', ''bar'', ''Python'') config.set(''Section1'', ''foo'', ''%(bar)s is %(baz)s!'') with open(''example.cfg'', ''wb'') as configfile: config.write(configfile)


myConfig.cfg:

[info] Width = 100 Height = 200 Name = My Game

Análisis en python:

import ConfigParser configParser = ConfigParser.RawConfigParser() configFilePath = os.path.join(os.path.dirname(__file__), ''myConfig.cfg'') configParser.read(configFilePath) gameName = configParser.get("info","Name") gameWidth = configParser.get("info","Width") gameHeight = configParser.get("info","Height") configParser.set(''info'', ''Name'', ''newName'') config.write(configFilePath)

Explicación:

Primero colocamos una instancia de ConfigParser y le estamos diciendo a la instancia donde se encuentra el archivo .cfg , después de que solo está leyendo. La segunda parte manejamos la escritura.

Más información:

Config Parser desde Docs

Si buscas algo más flexible, prueba YAML y PyYAML