Форум сайта python.su
Здравствуйте, уважаемые!
Есть у меня задача создать описание поля боя, по типу поля в игре Heroes III. Возможно я думаю в неправильном направлении, но именно для этого и пишу на форум чтобы найти приемлемый вариант.
Я представляю это как некий класс в котором будет описание границ каждого шестиугольника на поле. Из которого я смогу брать информацию о границах для последующего использования скажем как-то так:
class battelfield(object): def __init__(self): self.a = (1,1,"b","f") # и так далее со всеми ячейками self.b = (1,2,"a","c")
Отредактировано m1r42 (Окт. 31, 2022 08:35:57)
Офлайн
Не знаю правильно ли это будет, но наверное разобрался как это сделать:
locals().get("имя переменной")
Офлайн
m1r42Думаю, ты не сможешь пока что написать эту игру ни с классами, ни без классов, так как ты ещё слишком мало знаешь.
Есть у меня задача создать описание поля боя, по типу поля в игре Heroes III. Возможно я думаю в неправильном направлении, но именно для этого и пишу на форум чтобы найти приемлемый вариант.
m1r42Есть функции setattr() и getattr(), ими можно формировать имя атрибута из строки.
Как значение переменной превратить в имя переменной?
>>> setattr <built-in function setattr> >>> getattr <built-in function getattr> >>> >>> getattr(1, 'bit_length') <built-in method bit_length of int object at 0x7f706b3f3400> >>> >>> getattr('a', 'upper') <built-in method upper of str object at 0x7f706b4b6b58> >>>
Отредактировано py.user.next (Окт. 31, 2022 09:05:20)
Офлайн
Думал, что победил, но оказалось что locals() не содержит нужных мне переменных класса. Тупик.
Офлайн
py.user.nextНе хочу вступать в дискуссию о моих возможностях. Думаю, форум существует совсем не для этого. За ответ по сути дела благодарю.
Думаю, ты не сможешь пока что написать эту игру ни с классами, ни без классов, так как ты ещё слишком мало знаешь.
Классы в питоне нужны для того, чтобы писать реализацию, которая спроектирована в объектно-ориентированной парадигме программирования. Поэтому если ты даже можешь написать слово class в питоне, создать этот класс и даже создать экземпляр этого класса, от этого ты не будешь уметь работать с классами так, как это нужно делать. Поэтому все твои потуги закончатся ничем и ты запомнишь только то, как делать не надо.
Поэтому максимум, что ты можешь сделать, - это перейти в процедурную парадигму программирования и начать с процедурок, которые работают с глобальными данными.
Там развитие идёт так: сначала изучаешь процедурную парадигму программирования, потом изучаешь структурную парадигму программирования, потом изучаешь объектно-ориентированную парадигму программирования, после этого можно изучать функциональную парадигму программирования, а потом ещё остальные тоже изучить не помешает. Изучаешь их друг за другом.
Офлайн
py.user.nextСпасибо огромное!
Есть функции setattr() и getattr(), ими можно формировать имя атрибута из строки.
class battlefield(object): def __init__(self): self.a = (1,1,"b","f") self.b = (1,2,"a","c") bt = battlefield() print(getattr(bt, bt.a[2]))
Офлайн
Первые результаты:
class battlefield(object): def __init__(self): self.a = (1,1,"b") self.b = (1,2,"a","c") self.c = (1,3,"b","d") self.d = (1,4,"c","e") self.e = (1,5,"d") class soldier(object): def __init__(self): self.attack = 1 self.protection = 1 self.power = 10 self.position = "" self.speed = 2 bt = battlefield() unit_first = soldier() unit_first.position = "a" unit_second = soldier() unit_second.position = "e" print("позиция первого юнита ",unit_first.position) print("границы ячейки ", getattr(bt, unit_first.position)) print("позиция первого юнита ",unit_second.position) print("границы ячейки ", getattr(bt, unit_second.position)) print("ходит первый юнит, скорость ", unit_first.speed) for i in range(0,unit_first.speed): print ("ход ", i) unit_first.position = getattr(bt, unit_first.position)[2] print("позиция первого юнита ",unit_first.position) print("границы ячейки ", getattr(bt, unit_first.position))
Офлайн