我可以将项目及其属性存储在外部文件中,并在需要时调用它吗?(在Python中编写Roguelike时)

我可以将项目及其属性存储在外部文件中,并在需要时调用它吗?(在Python中编写Roguelike时),python,python-2.7,roguelike,libtcod,Python,Python 2.7,Roguelike,Libtcod,我刚刚完成了用Python编写一个类似Roguelike的程序的工作,现在我完全靠自己来决定下一步要做什么 我的困境在于代码的混乱。我想在某处存储元素,例如项目;生物;技能;任何一个可能有大量他们自己拥有众多财产的地方 目前,所有这些代码都在一个越来越大的文件中,这是最基本的。用于将项目放置在某个级别上的函数目前看起来非常类似:(在生成级别时调用此函数) 当我打算添加更多的项时,这个函数会变得非常长,所有需要创建的函数都会非常长,以处理每个项的功能。我真的很想将它从main.py中取出并存储到其

我刚刚完成了用Python编写一个类似Roguelike的程序的工作,现在我完全靠自己来决定下一步要做什么

我的困境在于代码的混乱。我想在某处存储元素,例如项目;生物;技能;任何一个可能有大量他们自己拥有众多财产的地方

目前,所有这些代码都在一个越来越大的文件中,这是最基本的。用于将项目放置在某个级别上的函数目前看起来非常类似:(在生成级别时调用此函数)

当我打算添加更多的项时,这个函数会变得非常长,所有需要创建的函数都会非常长,以处理每个项的功能。我真的很想将它从main.py中取出并存储到其他地方,以使其更易于使用,但目前我不知道如何做到这一点

以下是我尝试和思考问题的尝试:

我可以有一个文件,其中包含一个item类,每个item都包含若干属性;(名称、类型、条件、附魔、图标、重量、颜色、说明、装备槽、材料)。然后在该文件中存储项目的功能?主文件如何知道何时调用另一个文件

是否可以将所有项目数据存储在外部文件(如XML或其他文件)中,并在需要时从中读取


这是我可以应用于不仅仅是项目的东西。这将是非常有用的,因为没有一个真正臃肿的My.Py保存了游戏中的所有生物、项目和其他对象,当我真正想要的是一个主循环和一个更好的组织结构时,它会弹出数千行代码。

< P>如果你不需要人类可读的文件,考虑使用Python的库;这可以序列化对象和函数,这些对象和函数可以写入文件,也可以从文件中读取

就组织而言,您可以有一个对象文件夹,将这些类从主游戏循环中分离出来,例如:

game/
    main.py
    objects/
        items.py
        equipment.py
        creatures.py
要进一步改进,请使用继承来执行以下操作,例如:

class Equipment(Object):

class Sword(Equipment):

class Item(Object):

class Scroll(Item):
然后,可以在初始化中定义任何剑的所有设置(例如剑在哪一手),并且只需要传入特定剑的不同内容(例如名称、力量奖励)

是否可以将所有项目数据存储在外部文件(如XML或XML)中 什么)并在需要时从那里阅读

您可以使用模块执行此操作

您可以将项目的属性存储在单独的文件(普通文本文件)中。读取此文件以自动创建对象

我将使用文档中的示例作为指导:

import ConfigParser

config = ConfigParser.RawConfigParser()
config.add_section('Sword')
config.set('Sword', 'strength', '15')
config.set('Sword', 'weight', '5')
config.set('Sword', 'damage', '10')

# Writing our configuration file to 'example.cfg'
with open('example.cfg', 'wb') as configfile:
    config.write(configfile)
现在,要读取该文件:

import ConfigParser
from gameobjects import SwordClass

config = ConfigParser.RawConfigParser()
config.read('example.cfg')

config_map = {'Sword': SwordClass}
game_items = []

for i in config.sections():
    if i in config_map:
       # We have a class to generate
       temp = config_map[i]()
       for option,value in config.items(i):
           # get all the options for this sword
           # and set them
           setattr(temp, option, value)
       game_items.append(temp)
import ConfigParser
from gameobjects import SwordClass

config = ConfigParser.RawConfigParser()
config.read('example.cfg')

config_map = {'Sword': SwordClass}
game_items = []

for i in config.sections():
    if i in config_map:
       # We have a class to generate
       temp = config_map[i]()
       for option,value in config.items(i):
           # get all the options for this sword
           # and set them
           setattr(temp, option, value)
       game_items.append(temp)