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()