Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/python-matrix-v2/main.py
5925 views
1
import pygame as pg
2
import random
3
4
class MatrixLetters:
5
def __init__(self, app):
6
self.app = app
7
# self.letters = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ0123456789"
8
# self.font_size = 10
9
# self.font = pg.font.SysFont('arial', self.font_size, bold=True)
10
11
self.letters = [chr(int('0x30a0', 16) + i) for i in range(1, 95)]
12
self.font_size = 10
13
# self.font = pg.font.SysFont('ms mincho', self.font_size, bold=True)
14
self.font = pg.font.Font('MS Mincho.ttf', self.font_size, bold=True)
15
16
self.columns = app.WIDTH // self.font_size
17
self.drops = [1 for i in range(0, self.columns)]
18
19
def draw(self):
20
for i in range(0, len(self.drops)):
21
char = random.choice(self.letters)
22
char_render = self.font.render(char, False, (255,255,0))
23
pos = i * self.font_size, (self.drops[i] - 1) * self.font_size
24
self.app.surface.blit(char_render, pos)
25
if self.drops[i] * self.font_size > app.HEIGHT and random.uniform(0,1) > 0.975:
26
self.drops[i] = 0
27
self.drops[i] = self.drops[i] + 1
28
29
def run(self):
30
self.draw()
31
32
33
class MatrixApp:
34
def __init__(self): # инициализация приложения
35
self.RES = self.WIDTH, self.HEIGHT = 1000, 700
36
pg.init()
37
self.screen = pg.display.set_mode(self.RES) # отображаемый экран
38
self.surface = pg.Surface(self.RES, pg.SRCALPHA) # поверхность отрисовки
39
self.clock = pg.time.Clock() # для отслеживания времени
40
self.matrixLetters = MatrixLetters(self) # экземпляр класса наших букв
41
42
def draw(self): # закраска раб. поверхности и нанесем на гл. экран
43
self.surface.fill((0,0,0,10))
44
self.matrixLetters.run()
45
self.screen.blit(self.surface, (0,0))
46
47
def run(self): # главн. цикл программы
48
while True:
49
self.draw() # отрисовка экрана
50
[exit() for i in pg.event.get() if i.type == pg.QUIT]
51
pg.display.flip() # обновление поверхности
52
self.clock.tick(50) # установка кадров
53
54
if __name__ == '__main__':
55
app = MatrixApp()
56
app.run()
57
58