Анимация падающего снега (Python 3.8.5)
У меня есть класс, который вызывается из 2-х разных объектов одновременно, но он выполняется по очереди.
import os
import time
import random
Limiter = 24
os.system("cls")
class SnowObject:
def MovePosition(self):
global Limiter
for i in range(Limiter):
print("\n" * int(i) + " " * int(self.Ypos) + str(self.Mesh))
time.sleep(float(self.Time))
os.system("cls")
def __init__(self,Time,Ypos,Mesh):
self.Time = Time
self.Ypos = Ypos
self.Mesh = Mesh
Snow_1 = SnowObject(0.5,random.randint(0,80),"*")
Snow_1.MovePosition()
Snow_2 = SnowObject(0.5,random.randint(0,80),"*")
Snow_2.MovePosition()
input()
Мой код делает анимацию из (print'а) снежинки. И мне понадобился черновик кода, который будит вызываться для каждой снежинки и я обратился к ютубу. Мне подсказали использовать class, но он работает не так как я хочу...
Переменные:
Limiter - лимит, который будет использован в for.
Time- время для time.sleep.
Ypos - координата Y. Позиция для Mesh по координате Y.
Mesh - что будет отображаться на экране (В моем случае - это "*").
Ответы (1 шт):
Автор решения: Edward Grachev
→ Ссылка
Для того что бы пустить несколько снежинок можно использовать threading
import os
import time
import random
from threading import Thread
Limiter = 24
os.system("cls")
class SnowObject:
def MovePosition(self):
global Limiter
for i in range(Limiter):
print("\n" * int(i) + " " * int(self.Ypos) + str(self.Mesh))
time.sleep(float(self.Time))
os.system("cls")
def __init__(self,Time,Ypos,Mesh):
self.Time = Time
self.Ypos = Ypos
self.Mesh = Mesh
Snow_1 = SnowObject(0.5,random.randint(0,80),"*")
th = Thread(target=Snow_1.MovePosition)
th.start()
Snow_2 = SnowObject(0.5,random.randint(0,80),"*")
th_2 = Thread(target=Snow_2.MovePosition)
th_2.start()
input()
Или вместо
Snow_1 = SnowObject(0.5,random.randint(0,80),"*")
th = Thread(target=Snow_1.MovePosition)
th.start()
Snow_2 = SnowObject(0.5,random.randint(0,80),"*")
th_2 = Thread(target=Snow_2.MovePosition)
th_2.start()
Использовать:
for _ in range(5):
Thread(target= SnowObject(0.5,random.randint(0,80),"*").MovePosition).start()