2016-02-20 56 views
0

我试图让使用MUD-PI一个MUD,我被困在制作室包含怪物和具有kill命令知道是什么怪物来计算Python的泥杀功能

这里的攻击是我的代码kill命令

`elif command == "kill": 

     if players[id]["room"]["enemy"] == 'True': 
      if players[id]["room"]["monsterName"].hp >= 0: 
       mud.send_message(id,"You attack %s for %d damage" % (players[id]["room"]["monsterName"], players[id]["ATK"])) 
       players[id]["room"]["monsterName"].hp -= players[id]["ATK"] 
      else: 
       players[id]["room"]["monsterName"].death() 
     else: 
      mud.send_message(id,"You dont see a monster")] 

,代码为客房

#import monsters 
from Monsters import * 
# structure defining the rooms in the game. Try adding more rooms to the game! 
rooms = { 
    "Tavern": { 
     "description": "You're in a cozy tavern warmed by an open fire.", 
     "exits": { "outside": "Outside" }, 
    }, 
    "Outside": { 
     "description": "You're standing outside a tavern. there is a troll.", 
     "exits": { "inside": "Tavern" }, 
     "enemy": 'True', 
     "monsterName": troll, 
    } 
} 

终于怪物代码

#monsters 

import sys,random,os,time 

#Troll 
class Troll(): 
    def __init__(self): 
     self.name = "Troll" 
     self.ATK = 2 
     self.hp = 10 
     self.max_hp = 10 

    def death(self): 
     mud.send_message(id,"you killed the troll") 
     self.hp = self.max_hp 


troll = Troll() 

当我试图在当前的代码,我得到这个错误:

if players[id]["room"]["enemy"] == 'True': 
TypeError: string indices must be integers, not str 

我想知道是什么原因造成这个错误,如果可能的话,我怎么能得到这个工作,我想要的方式。

编辑:我得到了这个工作,但当我在游戏中使用命令它出来这样(你攻击)3点伤害 我想说你攻击房间里的怪物的名字。

这里是我的编辑代码

elif command == "kill": 
      rm = rooms[players[id]["room"]] 

      if rm["enemy"] == 'yes': 
       if rm["monsterName"].hp >= 0: 
        mud.send_message(id,"You attack %s for %d damage" % (rm["monsterName"], players[id]["ATK"])) 
        rm["monsterName"].hp -= players[id]["ATK"] 
       else: 
        rm["monsterName"].death() 
      else: 
       mud.send_message(id,"You dont see a monster") 

我想也杀改变命令杀死[monsterName]在这种情况下,巨魔,我想这样做这样

elif command == "kill": 
      mn = params.lower() 
      rm = rooms[players[id]["room"]] 
      if rm["enemy"] == 'yes': 

       if mn in rm["monsterName"]: 
        monster = rm["monsterName"] 
        if monster.hp >= 0: 
         mud.send_message(id,"You attack %s for %d damage" % (rm["monsterName"], players[id]["ATK"])) 
         monster.hp -= players[id]["ATK"] 
        else: 
         monster.death() 
       else: 
        mud.send_message(id, "you dont see a %s" % mn) 
      else: 
       mud.send_message(id, "you dont see an enemy") 

但是当我尝试使用它时,出现此错误

if mn in rm["monsterName"]: 
TypeError: argument of type 'instance' is not iterable 

回答

0

您已将enemy关键rooms数据结构(即,字典),但是当你访问players[id]["room"]["enemy"]访问rooms数据结构 - 您正在访问players,并在playersroom值是一个字符串 - 的名字房间。所以你不能要求它的“敌人”指数,因为这将是没有意义的,这是错误的来源string indices must be integers, not str

要修复该错误代码,因为它是目前设计的,你必须找到房间里的球员在,然后访问房间的“敌人”的值,并以类似的方式找到了monsterName值。

+0

当我尝试你的建议,但它的工作,但巨魔的名字出来作为 3点伤害 – Arcxes

+0

@Arcxes,这个网站的工作方式,它是更好的要求较小,自包含的问题比把所有的问题都放在一个题目下,用一个通用的标题,比如“Python mud kill function”。目前你的问题很难遵循,没有人能猜到你从标题中提出的问题。我建议你接受我的答案,如果它回答你的问题,然后将这个新问题分解成一个更具描述性题目的新问题。 – georgek

+0

好的感谢和抱歉,即时通讯此新网站accountwise – Arcxes