You can take a look at this config setup script I made awhile ago. It could use a bit of improvement (for example right now it will only write the default configuration string), but it’ll give you a good idea of how to make a config file. Feel free to use and modify it.
import bge
CONF = bge.logic.expandPath('//').split('Scripts')[0] + '\config.cfg' # config file path+name
# Default config file
DEFAULT = \
'[Controls]
' \
'CamUp = WKEY
' \
'CamDown = SKEY
' \
'CamLeft = AKEY
' \
'CamRight = DKEY
' \
'Left = LEFTARROWKEY
' \
'Right = RIGHTARROWKEY
' \
'Up = UPARROWKEY
' \
'Down = DOWNARROWKEY
' \
'LeftClick = LEFTMOUSE
' \
'[End]
' \
'[Gameplay Settings]
' \
'CameraSensitivity = .003
' \
'CameraSmoothing = .8
' \
'[End]'
# Define key dictionary
KEYS = { \
'LEFTMOUSE': bge.events.LEFTMOUSE, \
'MIDDLEMOUSE': bge.events.MIDDLEMOUSE, \
'RIGHTMOUSE': bge.events.RIGHTMOUSE, \
'WHEELUPMOUSE': bge.events.WHEELUPMOUSE, \
'WHEELDOWNMOUSE': bge.events.WHEELDOWNMOUSE, \
'MOUSEX': bge.events.MOUSEX, \
'MOUSEY': bge.events.MOUSEY, \
'AKEY': bge.events.AKEY, \
'BKEY': bge.events.BKEY, \
'CKEY': bge.events.CKEY, \
'DKEY': bge.events.DKEY, \
'EKEY': bge.events.EKEY, \
'FKEY': bge.events.FKEY, \
'GKEY': bge.events.GKEY, \
'HKEY': bge.events.HKEY, \
'IKEY': bge.events.IKEY, \
'JKEY': bge.events.JKEY, \
'KKEY': bge.events.KKEY, \
'LKEY': bge.events.LKEY, \
'MKEY': bge.events.MKEY, \
'NKEY': bge.events.NKEY, \
'OKEY': bge.events.OKEY, \
'PKEY': bge.events.PKEY, \
'QKEY': bge.events.QKEY, \
'RKEY': bge.events.RKEY, \
'SKEY': bge.events.SKEY, \
'TKEY': bge.events.TKEY, \
'UKEY': bge.events.UKEY, \
'VKEY': bge.events.VKEY, \
'WKEY': bge.events.WKEY, \
'XKEY': bge.events.XKEY, \
'YKEY': bge.events.YKEY, \
'ZKEY': bge.events.ZKEY, \
'ZEROKEY': bge.events.ZEROKEY, \
'ONEKEY': bge.events.ONEKEY, \
'TWOKEY': bge.events.TWOKEY, \
'THREEKEY': bge.events.THREEKEY, \
'FOURKEY': bge.events.FOURKEY, \
'FIVEKEY': bge.events.FIVEKEY, \
'SIXKEY': bge.events.SIXKEY, \
'SEVENKEY': bge.events.SEVENKEY, \
'EIGHTKEY': bge.events.EIGHTKEY, \
'NINEKEY': bge.events.NINEKEY, \
'CAPSLOCKKEY': bge.events.CAPSLOCKKEY, \
'LEFTCTRLKEY': bge.events.LEFTCTRLKEY, \
'LEFTALTKEY': bge.events.LEFTALTKEY, \
'RIGHTALTKEY': bge.events.RIGHTALTKEY, \
'RIGHTCTRLKEY': bge.events.RIGHTCTRLKEY, \
'RIGHTSHIFTKEY': bge.events.RIGHTSHIFTKEY, \
'LEFTSHIFTKEY': bge.events.LEFTSHIFTKEY, \
'LEFTARROWKEY': bge.events.LEFTARROWKEY, \
'DOWNARROWKEY': bge.events.DOWNARROWKEY, \
'RIGHTARROWKEY': bge.events.RIGHTARROWKEY, \
'UPARROWKEY': bge.events.UPARROWKEY, \
'PAD0': bge.events.PAD0, \
'PAD1': bge.events.PAD1, \
'PAD2': bge.events.PAD2, \
'PAD3': bge.events.PAD3, \
'PAD4': bge.events.PAD4, \
'PAD5': bge.events.PAD5, \
'PAD6': bge.events.PAD6, \
'PAD7': bge.events.PAD7, \
'PAD8': bge.events.PAD8, \
'PAD9': bge.events.PAD9, \
'PADPERIOD': bge.events.PADPERIOD, \
'PADSLASHKEY': bge.events.PADSLASHKEY, \
'PADASTERKEY': bge.events.PADASTERKEY, \
'PADMINUS': bge.events.PADMINUS, \
'PADENTER': bge.events.PADENTER, \
'PADPLUSKEY': bge.events.PADPLUSKEY, \
'F1KEY': bge.events.F1KEY, \
'F2KEY': bge.events.F2KEY, \
'F3KEY': bge.events.F3KEY, \
'F4KEY': bge.events.F4KEY, \
'F5KEY': bge.events.F5KEY, \
'F6KEY': bge.events.F6KEY, \
'F7KEY': bge.events.F7KEY, \
'F8KEY': bge.events.F8KEY, \
'F9KEY': bge.events.F9KEY, \
'F10KEY': bge.events.F10KEY, \
'F11KEY': bge.events.F11KEY, \
'F12KEY': bge.events.F12KEY, \
'F13KEY': bge.events.F13KEY, \
'F14KEY': bge.events.F14KEY, \
'F15KEY': bge.events.F15KEY, \
'F16KEY': bge.events.F16KEY, \
'F17KEY': bge.events.F17KEY, \
'F18KEY': bge.events.F18KEY, \
'F19KEY': bge.events.F19KEY, \
'ACCENTGRAVEKEY': bge.events.ACCENTGRAVEKEY, \
'BACKSLASHKEY': bge.events.BACKSLASHKEY, \
'BACKSPACEKEY': bge.events.BACKSPACEKEY, \
'COMMAKEY': bge.events.COMMAKEY, \
'DELKEY': bge.events.DELKEY, \
'ENDKEY': bge.events.ENDKEY, \
'EQUALKEY': bge.events.EQUALKEY, \
'ESCKEY': bge.events.ESCKEY, \
'HOMEKEY': bge.events.HOMEKEY, \
'INSERTKEY': bge.events.INSERTKEY, \
'LEFTBRACKETKEY': bge.events.LEFTBRACKETKEY, \
'LINEFEEDKEY': bge.events.LINEFEEDKEY, \
'MINUSKEY': bge.events.MINUSKEY, \
'PAGEDOWNKEY': bge.events.PAGEDOWNKEY, \
'PAGEUPKEY': bge.events.PAGEUPKEY, \
'PAUSEKEY': bge.events.PAUSEKEY, \
'PERIODKEY': bge.events.PERIODKEY, \
'QUOTEKEY': bge.events.QUOTEKEY, \
'RIGHTBRACKETKEY': bge.events.RIGHTBRACKETKEY, \
'ENTERKEY': bge.events.ENTERKEY, \
'SEMICOLONKEY': bge.events.SEMICOLONKEY, \
'SLASHKEY': bge.events.SLASHKEY, \
'SPACEKEY': bge.events.SPACEKEY, \
'TABKEY': bge.events.TABKEY, \
}
# open and read from config file
# create it if it does not exist
def ReadFile(path=CONF):
try:
file = open(bge.logic.expandPath(path), 'r')
print("Loading Successful!
Reading from Config...")
return(SetConfig(file))
except IOError: # failed to load - create new config
print("Loading Failed!")
print("Creating New Config...")
return(SetConfig(MakeConfig()))
# create the default config file and read from it
def MakeConfig(path=CONF):
file = open(bge.logic.expandPath(path), 'w')
file.write(DEFAULT)
file.close()
file = open(bge.logic.expandPath(path), 'r')
return(file)
#float()
#int()
# create configuration dictionary
def SetConfig(file):
dic = {}
# controls loop
s = file.readline().rstrip()
while s != '[Controls]':
s = file.readline().rstrip()
s = file.readline().rstrip()
while s != '[End]':
s = str.split(s, ' = ')
try:
dic[s[0]] = KEYS[s[1]]
except KeyError:
print('Warning:', s[1], 'not found in key dictionary')
s = file.readline().rstrip()
# gameplay settings loop
while s != '[Gameplay Settings]':
s = file.readline().rstrip()
s = file.readline().rstrip()
while s != '[End]':
s = str.split(s, ' = ')
dic[s[0]] = id_type(s[1])
s = file.readline().rstrip()
file.close()
return(dic)
# Identify what type a string should be cast as and return that object
def id_type(s):
# booleans
if s == 'True':
return True
elif s == 'False':
return False
# numbers
if '.' not in s:
try:
n = int(s)
return n
except ValueError:
pass
try:
n = float(s)
return n
except ValueError:
pass