2014-01-04 1 views
0

Я пытаюсь создать текстовую игру, используя Python. Я настроил функцию радара(), но в настоящее время единственным способом ее использования является то, что игрок вводит аргументы непосредственно в консоль. Я хочу, чтобы программа обнаружила, какой автомобиль пилотирует игрок, и передавать любые атрибуты этого транспортного средства, которые должны передаваться автоматически, без того, чтобы игрок набирал их.Как автоматически передать аргументы функции на определенные объекты

Например Вместо игрока, имеющего ввести «a.radar ([100.100.100], 100)» для того, чтобы использовать функцию радара() Я хочу, чтобы игрок только нужно ввести «радар» , и все другие параметры, которые будут переданы автоматически. Как я могу это сделать? Должен ли я полностью перестроить этот код?

Мой код:

class Mobilesuits: 
    #class global variables/methods here 
    instances = [] #grid cords here 
    def __init__(self,armor,speed,name,description,cockpit_description,\ 
       radar_range, coordinates): 
     Mobilesuits.instances.append(self) 
     self.armor=armor 
     self.speed=speed 
     self.name=name 
     self.description=description 
     self.cockpit_description=cockpit_description 
     self.radar_range=radar_range 
     self.coordinates=coordinates 


    def radar(self, coordinates, radar_range): 
     for i in range(len(a.instances)): 
      cordcheck=a.instances[i].coordinates 
      if cordcheck == coordinates: 
       pass 
      elif (abs(cordcheck[0]-coordinates[0]) <= radar_range) and \ 
       (abs(cordcheck[1]-coordinates[1]) <= radar_range) and \ 
       (abs(cordcheck[2]-coordinates[2]) <= radar_range): 
       print("%s detected at %s ") %(a.instances[i].description, a.instances[i].coordinates) 



a=Mobilesuits(100,100,"Leo","leo desc","dockpit desc",100,[100,100,100]) 
b=Mobilesuits(100,100,"Leo","leo desc","dockpit desc",100,[300,100,100]) 
c=Mobilesuits(100,100,"Leo","leo desc","dockpit desc",100,[100,150,100]) 

a.radar([100,100,100], 100) 
+0

'печать ("% s обнаружено at% s ")% (a.instances [i] .description, a.instances [i] .cordinates) '- вы на Python 2. Не помещайте круглые скобки вокруг строки, которую вы передаете, чтобы напечатать. – user2357112

ответ

2

Есть программа принять вход с функцией raw_input:

user_input = raw_input() 

, а затем сделать что-то на основе ввода:

if user_input == "some_command": 
    do_something(appropriate, variables) 

Например,

if user_input == "radar": 
    a.radar([100,100,100], 100) 

Возможно, вы также захотите изменить способ, которым метод radar принимает аргументы. Похоже, что хотя бы один из аргументов coordinates или radar_range должен исходить из соответствующих атрибутов self. Например, если радар мобильного костюма должен автоматически использовать собственные координаты мобильного доспеха и диапазон радара, вы могли бы написать метод следующим образом:

def can_detect(self, other): 
    for own_coord, other_coord in zip(self.coordinates, other.coordinates): 
     if abs(own_coord - other_coord) > self.radar_range: 
      return False 
    return True 

def radar(self): 
    for other in Mobilesuits.instances: 
     if other is not self and self.can_detect(other): 
      print "%s detected at %s" % (other.description, other.coordinates) 
+0

+1 Я думаю, что это то, что ищет ОП. –

+0

Это именно то, что я искал.Я многому научился с вашего вклада. Спасибо! –

0

ли это как сделать встроенные команды.

Look, str() Функция только специализированный вызов __str__ функция. object класс имеет значение по умолчанию __str__, и если вы не используете p3k, str() имеет некоторую логику для объектов без __str__.

В конце концов, str() МОЖЕТ встроенный выглядеть следующим образом (концептуально, реализация, вероятно, совсем другое):

def str(obj): 
    try: 
     return obj.__str__() 
    except AttributeError: 
     return default_behaviour(obj) 

Вы можете сделать что-то так.

Вам понадобится функция, которая вернет объект пользователя (скажем, в игре есть 3 игрока: A, B и C, где A контролируется пользователем; вам понадобится функция get_user_player(), которая должна вернуть экземпляр экземпляра.

Затем вам нужно реализовать ваш argumentless radar функцию:.

def radar(): 
    return get_user_player().radar() 

Теперь звонить в radar() приведет к автоматическому нахождения экземпляра под контролем пользователя и вызывающего радара на него

Смежные вопросы