from random import random

class Orb(object):
	# Орба с параметром координаты y.
	def __init__(self,y=0):
		self.y = y

class Constellation(object):
	def __init__(self, arg, num):
	# arg - функция расчёта нулевого положения группы шариков.
		self.y = arg
		self.num = num
		self.i = 0
		
		self.orb1 = Orb()
		self.orb2 = Orb()
	
	def redraw(self):
	# Псевдофункция отрисовки шариков.
	# Один рисуется выше центра, второй — ниже.
		self.orb1.y = self.y() + 50
		self.orb2.y = self.y() - 50
		self.print_locations() #ну и выводим их координаты, ведь ничего не рисуется
	
	def print_locations(self):
	# Вывод координаты кнопки.
		print("Constelaltion"+str(self.num)+" orb1 is located at "+str(self.orb1.y))
		print("Constellation"+str(self.num)+" orb2 is located at "+str(self.orb2.y))
		
class Cave(object):
	def __init__(self):
		# Пещера какой-то высоты.
		self.height = 1000
		self.formations()
		self.create_constellations()
		
	def formations(self):
		# Четыре нароста, рисумых от верха и низа окна.
		# Предположим, что они разнесены по оси Х.
		self.stalactite1 = self.height - 100
		self.stalactite2 = self.height - 150
		self.stalagmite1 = 200
		self.stalagmite2 = 300
		
	def grow(self, age1, age2):
		# Увеличиваем наши наросты.
		self.stalactite1 -= 100 * (age1/1000)
		self.stalactite2 -= 150 * (age2/1000)
		self.stalagmite1 += 200 * (age1/1000)
		self.stalagmite2 += 300 * (age2/1000)
	
	def create_constellations(self):
		# Создаём 2 "созвездия", центры которых должны быть в середине между
		# двумя соответствующими наростами.
		# Каждое созвездие внути себя содержит вбитую в себя функцию определния
		# положения своего центра! Мне не нужно думать, какое, куда и 
		# на сколько двигать каждый раз, когда это нужно сделать. Я просто
		# вызываю функцию определения своего положения для каждого из них.
		self.constellation1 = Constellation(lambda: (self.stalactite1-self.stalagmite1)/2, '1')
		self.constellation2 = Constellation(lambda: (self.stalactite2-self.stalagmite2)/2, '2')
		self.constellations = [self.constellation1, self.constellation2]
		for constellation in self.constellations:
			constellation.redraw()
		
	def age(self):
		# Проходят года, сталактиты растут. Если повезёт, растут оба. 
		# Если не повезёт — один.
		if random() >= 0.5:
			self.grow(250, 250)
		else:
			if random() >= 0.5:
				self.grow(250,0)
			else:
				self.grow(0,250)
		# Обновляем созвездия и рисуем их в новых местах, согласно изменению
		# размеров наростов.
		for constellation in self.constellations:
			constellation.redraw()
			
	def time_machine(self):
		# Возвращаемся в прошлое! Опять же, не всегда получается настроить
		# машину времени правильно, поэтому и уменьшаются наросты случайно
		if random() >= 0.5:
			self.grow(-250, -250)
		else:
			if random() >= 0.5:
				self.grow(-250,0)
			else:
				self.grow(0,-250)
		# Обновляем созвездия и рисуем их в новых местах, согласно изменению
		# размеров наростов.
		for constellation in self.constellations:
			constellation.redraw()

print("Зашли в пещеру. ОП-па, что это? Орбы какие-то летают")
cave = Cave()
print("Решаем посидеть чуток, 250 лет примерно")
cave.age()
print("Ещё посидим, куда спешить-то, орбы красивые летают")
cave.age()
print("Ой, раньше лучше было. Док, заводи!")
cave.time_machine()
print("Ну, может в этой параллельной вселенной по-лучше разростутся")
cave.age()
print("Не, всё хуйня, давай по новой")
cave.formations()
cave.create_constellations()