Python'da bir Roguelike programlamak için this tutorial üzerinden çalışmayı yeni bitirdim ve şimdi nereye gideceğimi ve ne yapacağımı anlamaya başlıyorum.Öğeleri ve özelliklerini harici bir dosyada saklayabilir ve gerektiğinde arayabilir miyim? (Python'da bir Roguelike programlarken)
Durumumun kötülüğünün karışıklığı var. Öğeleri bir yerde saklamak istiyorum, örneğin; yaratıklar; becerileri; Kendileri için çok sayıda özelliği olan çok sayıda yer olabilir.
Şu anda, tüm bu kod, oldukça büyük olan tek bir dosyadadır ve bu en temel düzeydedir. Bir seviyede öğeleri yerleştirmek için fonksiyon şu anda böyle çok görünür: gibi ben fazla öğe eklemek niyetinde gibi
def place_objects(room):
#Maximum number of items per room
max_items = from_dungeon_level([[1, 1], [2, 4]])
#Chance of each item (by default they have a chance of 0 at level 1, which then goes up)
item_chances = {}
item_chances['heal'] = 35
item_chances['lightning'] = from_dungeon_level([[25, 4]])
item_chances['fireball'] = from_dungeon_level([[25, 6]])
item_chances['confuse'] = from_dungeon_level([[10, 2]])
item_chances['sword'] = from_dungeon_level([[5, 4]])
item_chances['shield'] = from_dungeon_level([[15, 8]])
#Choose a random number of items
num_items = libtcod.random_get_int(0, 0, max_items)
for i in range(num_items):
#Choose random spot for this item
x = libtcod.random_get_int(0, room.x1+1, room.x2-1)
y = libtcod.random_get_int(0, room.y1+1, room.y2-1)
#Only place it if the tile is not blocked
if not is_blocked(x, y):
choice = random_choice(item_chances)
if choice == 'heal':
#Create a healing potion
item_component = Item(use_function=cast_heal)
item = Object(x, y, '~', 'Salve', libtcod.light_azure, item=item_component)
elif choice == 'lightning':
#Create a lightning bolt scroll
item_component = Item(use_function=cast_lightning)
item = Object(x, y, '#', 'Scroll of Lightning bolt', libtcod.light_yellow, item=item_component)
elif choice == 'fireball':
#Create a fireball scroll
item_component = Item(use_function=cast_fireball)
item = Object(x, y, '#', 'Scroll of Fireball', libtcod.light_yellow, item=item_component)
elif choice == 'confuse':
#Create a confuse scroll
item_component = Item(use_function=cast_confuse)
item = Object(x, y, '#', 'Scroll of Confusion', libtcod.light_yellow, item=item_component)
elif choice == 'sword':
#Create a sword
equipment_component = Equipment(slot='right hand', power_bonus=3)
item = Object(x, y, '/', 'Sword', libtcod.sky, equipment=equipment_component)
elif choice == 'shield':
#Create a shield
equipment_component = Equipment(slot='left hand', defense_bonus=1)
item = Object(x, y, '[', 'Shield', libtcod.sky, equipment=equipment_component)
objects.append(item)
item.send_to_back()
, bu fonksiyon ciddi uzun alacak (düzey oluşturulursa, bu işlev denir) Daha sonra her bir öğenin öğesinin yapmasını sağlamak için oluşturulması gereken tüm işlevler olacaktır. Bu işi main.py'den alıp başka bir yerde saklamak istiyorum, bununla birlikte çalışmayı kolaylaştırmak için, ama şu anda bunu nasıl yapacağımı bilmiyorum. İşte
deneyin ve sorunun düşünmek için benim girişimleri şunlardır:
ben her öğenin içerdiği özelliklerin bir sayı ile bir öğe sınıfı içeren bir dosya alabilir; (isim, tür, koşul, büyü, simge, ağırlık, renk, açıklama, equip_slot, materal). Daha sonra numaralı öğenin dosyasında yer alan öğelerin işlevlerini saklayın. Ana dosya, bu dosyayı ne zaman arayacağını bilir?
Tüm öğe verileri harici bir dosyada (XML veya başka bir şey gibi) depolanabilir ve gerektiğinde buradan okunabilir mi?
Bu, yalnızca öğelerden fazlasına uygulanabileceğim bir şeydir. Bu gerçekten, gerçekten istediğim şey bir ana döngü ve organizasyonun daha iyi bir yapısı olduğunda, oyundaki binlerce yaratık çizgiyi işaretleyerek tüm yaratıkları, öğeleri ve diğer nesneleri tutan gerçekten şişirilmiş bir anaçık olmamanız için gerçekten yararlı olacaktır.