0
libtcod 파이썬 튜토리얼을 진행하면서 일부 코드를 사용하여 더 독특한 방식으로 코드를 작성하고 기능을 시작하기로 결정했습니다. 플레이어가 개체 위에 마우스를 올려 놓고 해당 개체에 대한 설명을 보려면 'd'를 누릅니다.파이썬 libtcod : 객체 설명 기능 오류
'str'개체의 'describe'속성에 'describe'행이 없습니다. 657. 여러 가지 작업을 시도했지만 notihng가 작동하는 것 같습니다. 불행히도 내 이해 수준이 상당히 제한적입니다. 그래서 나는 무엇이 잘못되었는지 알 수 없다. 어떤 도움이 많이 주시면 감사하겠습니다
class Object:
#this is a generic object: the player, a monster, an item, the stairs...
#it's always represented by a character on screen.
def __init__(self, x, y, char, name, color, blocks=False, fighter=None, ai=None, item=None, description=None):
self.x = x
self.y = y
self.char = char
self.name = name
self.color = color
self.blocks = blocks
self.fighter = fighter
if self.fighter: #let the fighter component know who owns it
self.fighter.owner = self
self.ai = ai
if self.ai: #let the ai component know who owns it
self.ai.owner = self
self.item = item
if self.item: #let the item component know who owns it, like a bitch
self.item.owner = self
self.description = self
if self.description: #let the description component know who owns it
self.description.owner = self
def describe(self):
#describe this object
message(self.description, libtcod.white)
def handle_keys():
global keys;
if key_char == 'd':
#show the description menu, if an item is selected, describe it.
chosen_object = description_menu('Press the key next to an object to see its description.\n')
if chosen_object is not None:
chosen_object.describe()
return 'didnt-take-turn'
def description_menu(header):
global mouse
#return a string with the names of all objects under the mouse
(x, y) = (mouse.cx, mouse.cy)
#create a list with the names of all objects at the mouse's coordinates and in FOV
names = [obj.name for obj in objects if obj.x == x and obj.y == y and libtcod.map_is_in_fov(fov_map, obj.x, obj.y)]
names = ', '.join(names) #join the names, seperated by commas
return names.capitalize()
#show a menu with each object under the mouse as an option
if len(names) == 0:
options = ['There is nothing here.']
else:
options = [item.name for item in names]
index = menu(header, options, INVENTORY_WIDTH)
#if an item was chosen, return it
if index is None or len(names) == 0: return None
return names[index].description
:
여기에 관련 클래스와 기능은 다음과 같습니다!
당신은 다음과 같은 의미합니까 : 가 '항목이 선택되었다 # 만약, 그것을 \t를 돌려 지수가 없음 또는 LEN (이름) == 0 인 경우 : 없음에게 \t 반환 객체 반환하지'난 경우 미안 느리게 이해하고, 응답에 대해 대단히 감사합니다. –
좋아, 내가 할 수있는 한 최선을 다해 코드를 바꿨다. 조금 더 나아졌지만 지금은 'list'객체를 반환하면 'describe'속성이 없다. 아이디어 있니? –
'DEF description_menu (헤더) \t 글로벌 마우스 \t \t (X, Y) = (mouse.cx, mouse.cy) \t \t \t 이름 = 경우 개체에 대한 OBJ OBJ obj.x == X 및 Y와 obj.y == libtcod.map_is_in_fov (fov_map, obj.x, obj.y)] \t \t 복귀 이름 \t 경우 렌 (이름) == 0 \t 개 \t 옵션 = [ '아무것도 여기에 없다.'] 다른 \t : \t \t \t \t 지수 = 메뉴 \t \t 옵션 = [이름에 개체에 대한 object.name (헤더, 옵션, INVENTORY_WIDTH) \t \t # 항목이 선택된 경우 \t 색인이 없음 또는 len (이름) == 0 인 경우 반환 없음 \t 반환 이름' –