fork download
  1. from random import random
  2.  
  3. class Orb(object):
  4. # Орба с параметром координаты y.
  5. def __init__(self,y=0):
  6. self.y = y
  7.  
  8. class Constellation(object):
  9. def __init__(self, arg, num):
  10. # arg - функция расчёта нулевого положения группы шариков.
  11. self.y = arg
  12. self.num = num
  13. self.i = 0
  14.  
  15. self.orb1 = Orb()
  16. self.orb2 = Orb()
  17.  
  18. def redraw(self):
  19. # Псевдофункция отрисовки шариков.
  20. # Один рисуется выше центра, второй — ниже.
  21. self.orb1.y = self.y() + 50
  22. self.orb2.y = self.y() - 50
  23. self.print_locations() #ну и выводим их координаты, ведь ничего не рисуется
  24.  
  25. def print_locations(self):
  26. # Вывод координаты кнопки.
  27. print("Constelaltion"+str(self.num)+" orb1 is located at "+str(self.orb1.y))
  28. print("Constellation"+str(self.num)+" orb2 is located at "+str(self.orb2.y))
  29.  
  30. class Cave(object):
  31. def __init__(self):
  32. # Пещера какой-то высоты.
  33. self.height = 1000
  34. self.formations()
  35. self.create_constellations()
  36.  
  37. def formations(self):
  38. # Четыре нароста, рисумых от верха и низа окна.
  39. # Предположим, что они разнесены по оси Х.
  40. self.stalactite1 = self.height - 100
  41. self.stalactite2 = self.height - 150
  42. self.stalagmite1 = 200
  43. self.stalagmite2 = 300
  44.  
  45. def grow(self, age1, age2):
  46. # Увеличиваем наши наросты.
  47. self.stalactite1 -= 100 * (age1/1000)
  48. self.stalactite2 -= 150 * (age2/1000)
  49. self.stalagmite1 += 200 * (age1/1000)
  50. self.stalagmite2 += 300 * (age2/1000)
  51.  
  52. def create_constellations(self):
  53. # Создаём 2 "созвездия", центры которых должны быть в середине между
  54. # двумя соответствующими наростами.
  55. # Каждое созвездие внути себя содержит вбитую в себя функцию определния
  56. # положения своего центра! Мне не нужно думать, какое, куда и
  57. # на сколько двигать каждый раз, когда это нужно сделать. Я просто
  58. # вызываю функцию определения своего положения для каждого из них.
  59. self.constellation1 = Constellation(lambda: (self.stalactite1-self.stalagmite1)/2, '1')
  60. self.constellation2 = Constellation(lambda: (self.stalactite2-self.stalagmite2)/2, '2')
  61. self.constellations = [self.constellation1, self.constellation2]
  62. for constellation in self.constellations:
  63. constellation.redraw()
  64.  
  65. def age(self):
  66. # Проходят года, сталактиты растут. Если повезёт, растут оба.
  67. # Если не повезёт — один.
  68. if random() >= 0.5:
  69. self.grow(250, 250)
  70. else:
  71. if random() >= 0.5:
  72. self.grow(250,0)
  73. else:
  74. self.grow(0,250)
  75. # Обновляем созвездия и рисуем их в новых местах, согласно изменению
  76. # размеров наростов.
  77. for constellation in self.constellations:
  78. constellation.redraw()
  79.  
  80. def time_machine(self):
  81. # Возвращаемся в прошлое! Опять же, не всегда получается настроить
  82. # машину времени правильно, поэтому и уменьшаются наросты случайно
  83. if random() >= 0.5:
  84. self.grow(-250, -250)
  85. else:
  86. if random() >= 0.5:
  87. self.grow(-250,0)
  88. else:
  89. self.grow(0,-250)
  90. # Обновляем созвездия и рисуем их в новых местах, согласно изменению
  91. # размеров наростов.
  92. for constellation in self.constellations:
  93. constellation.redraw()
  94.  
  95. print("Зашли в пещеру. ОП-па, что это? Орбы какие-то летают")
  96. cave = Cave()
  97. print("Решаем посидеть чуток, 250 лет примерно")
  98. cave.age()
  99. print("Ещё посидим, куда спешить-то, орбы красивые летают")
  100. cave.age()
  101. print("Ой, раньше лучше было. Док, заводи!")
  102. cave.time_machine()
  103. print("Ну, может в этой параллельной вселенной по-лучше разростутся")
  104. cave.age()
  105. print("Не, всё хуйня, давай по новой")
  106. cave.formations()
  107. cave.create_constellations()
Success #stdin #stdout 0.06s 11984KB
stdin
Standard input is empty
stdout
Зашли в пещеру. ОП-па, что это? Орбы какие-то летают
Constelaltion1 orb1 is located at 400.0
Constellation1 orb2 is located at 300.0
Constelaltion2 orb1 is located at 325.0
Constellation2 orb2 is located at 225.0
Решаем посидеть чуток, 250 лет примерно
Constelaltion1 orb1 is located at 400.0
Constellation1 orb2 is located at 300.0
Constelaltion2 orb1 is located at 268.75
Constellation2 orb2 is located at 168.75
Ещё посидим, куда спешить-то, орбы красивые летают
Constelaltion1 orb1 is located at 362.5
Constellation1 orb2 is located at 262.5
Constelaltion2 orb1 is located at 268.75
Constellation2 orb2 is located at 168.75
Ой, раньше лучше было. Док, заводи!
Constelaltion1 orb1 is located at 400.0
Constellation1 orb2 is located at 300.0
Constelaltion2 orb1 is located at 325.0
Constellation2 orb2 is located at 225.0
Ну, может в этой параллельной вселенной по-лучше разростутся
Constelaltion1 orb1 is located at 362.5
Constellation1 orb2 is located at 262.5
Constelaltion2 orb1 is located at 325.0
Constellation2 orb2 is located at 225.0
Не, всё хуйня, давай по новой
Constelaltion1 orb1 is located at 400.0
Constellation1 orb2 is located at 300.0
Constelaltion2 orb1 is located at 325.0
Constellation2 orb2 is located at 225.0