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