-
-
Save MrKioZ/c07b9377d20bab53af6ebcdfbdeabb64 to your computer and use it in GitHub Desktop.
| import pygame, pygame.font | |
| import random | |
| COLOR = (0, 200, 200) #The Color of the Matrix | |
| ZERO_ONE = False #Makes a rain of zeros and ones instead of random ASCII character | |
| def IsWritten(): | |
| defTemp = True | |
| for x in range((lettersOnScreen[0] / 2) - (len(str) / 2), (lettersOnScreen[0] / 2) + (len(str) / 2) + 1): | |
| if xHeads[x] == -1: | |
| defTemp = False | |
| return defTemp | |
| def getColor(fx,fy): | |
| defTemp=xHeads[fx]-fy | |
| if (maxCol>defTemp>0): | |
| return defTemp | |
| else: | |
| return maxCol-1 | |
| try: | |
| fo = open("indata.txt", "r+") | |
| str = fo.readline() | |
| # Close opend file | |
| fo.close() | |
| except: | |
| str = '' | |
| str = str.upper() # for better placement | |
| # Pygame init | |
| pygame.init() | |
| temp = pygame.display.Info() | |
| displLength = (temp.current_w, temp.current_h) | |
| surface = pygame.display.set_mode(displLength, pygame.FULLSCREEN) | |
| # Font init | |
| pygame.font.init() | |
| fontObj = pygame.font.Font(pygame.font.get_default_font(), 14) | |
| sampleLetter = fontObj.render('_', False, (0, 111, 0)) | |
| letterSize = (sampleLetter.get_width(), sampleLetter.get_height()) | |
| lettersOnScreen = (int(displLength[0] / letterSize[0]), int(displLength[1] / letterSize[1])) | |
| # color init | |
| colorList = [(255, 255, 255)] | |
| primeColors = len(colorList)+1 | |
| R,G,B = COLOR | |
| colorList += [(R+10, G+10, B+10)] * ((lettersOnScreen[1] - 10)) | |
| endColors = len(colorList) | |
| colorList += [(R-50 if R else 0, B-50 if B else 0, G-50 if G else 0),(R-100 if R else 0, B-100 if B else 0, G-100 if G else 0),(0, 0, 0)] | |
| endColors = len(colorList) - endColors+1 | |
| maxCol = len(colorList) | |
| # char generator | |
| letters = [[0 for _ in range(lettersOnScreen[1] + 1)] for _ in range(lettersOnScreen[0])] | |
| if ZERO_ONE: | |
| char = chr(random.randint(48, 49)) | |
| else: | |
| char = chr(random.randint(32, 126)) | |
| for y in range(lettersOnScreen[1] + 1): | |
| for x in range(lettersOnScreen[0]): | |
| letters[x][y] = [fontObj.render(char, False, colorList[col]) for col in range(maxCol)] | |
| if ZERO_ONE: | |
| char = chr(random.randint(48, 49)) | |
| else: | |
| char = chr(random.randint(32, 126)) | |
| # word write | |
| wordMode = False | |
| if len(str) > 0: | |
| wordMode = True | |
| for x in range((lettersOnScreen[0] / 2) - (len(str) / 2), | |
| (lettersOnScreen[0] / 2) + (len(str) / 2)): | |
| letters[x][lettersOnScreen[1] / 2] = [fontObj.render(str[x - ((lettersOnScreen[0] / 2) - (len(str) / 2))], | |
| False, (255, 255, 255)) | |
| for col in range(maxCol)] | |
| for y in range(lettersOnScreen[1] / 2 + 1, | |
| lettersOnScreen[1] + 1): | |
| for x in range((lettersOnScreen[0] / 2) - (len(str) / 2), | |
| (lettersOnScreen[0] / 2) + (len(str) / 2)): | |
| letters[x][y] = [fontObj.render(char, False, (0, 0, 0)) for col in range(maxCol)] | |
| char = chr(random.randint(32, 126)) | |
| if len(str) % 2 == 1: | |
| letters[(lettersOnScreen[0] / 2) + (len(str) / 2)][lettersOnScreen[1] / 2] = \ | |
| [fontObj.render(str[len(str) - 1], False, (255, 255, 255)) for col in range(maxCol)] | |
| for y in range(lettersOnScreen[1] / 2 + 1, | |
| lettersOnScreen[1] + 1): | |
| letters[(lettersOnScreen[0] / 2) + (len(str) / 2)][y] = \ | |
| [fontObj.render(char, False, (0, 0, 0)) for col in range(maxCol)] | |
| char = chr(random.randint(32, 126)) | |
| if wordMode: | |
| xHeads = [-1 for _ in range(lettersOnScreen[0] + 1)] | |
| else: | |
| xHeads = [0 for _ in range(lettersOnScreen[0] + 1)] | |
| # 1st loop - word write, no char switch | |
| notDone = True | |
| ticksLeft = lettersOnScreen[1] + maxCol | |
| while ticksLeft > 0 and (notDone) and (wordMode): | |
| for event in pygame.event.get(): | |
| if event.type == pygame.QUIT: | |
| notDone = False | |
| if event.type == pygame.KEYDOWN: | |
| notDone = False | |
| if IsWritten(): | |
| ticksLeft -= 1 | |
| if random.randint(1, 2) == 1: | |
| randomInt = random.randint(0, lettersOnScreen[0]) | |
| if wordMode: | |
| if xHeads[randomInt] == -1: | |
| xHeads[randomInt] = 1 | |
| if random.randint(1, 6): | |
| randomInt = random.randint((lettersOnScreen[0] / 2) - len(str), | |
| (lettersOnScreen[0] / 2) + len(str) + 1) | |
| if xHeads[randomInt] == -1: | |
| xHeads[randomInt] = 1 | |
| else: | |
| if xHeads[randomInt] == 0: | |
| xHeads[randomInt] = 1 | |
| for x in range(lettersOnScreen[0]): | |
| col = 0 | |
| counter = xHeads[x] | |
| while (counter > 0) and (col < maxCol): | |
| if (counter < lettersOnScreen[1] + 2) and (col < primeColors or | |
| col > (maxCol - endColors)): | |
| surface.blit(letters[x][counter - 1][col], (x * letterSize[0], | |
| (counter - 1) * letterSize[1])) | |
| col += 1 | |
| counter -= 1 | |
| if xHeads[x] > 0: | |
| xHeads[x] += 1 | |
| if xHeads[x] - maxCol > lettersOnScreen[1]: | |
| xHeads[x] = 0 | |
| pygame.display.update() | |
| clock = pygame.time.Clock() | |
| clock.tick(20) | |
| # word delete | |
| if len(str) % 2 == 1: | |
| strLen = int((lettersOnScreen[0] / 2) + (len(str) / 2) + 1) | |
| else: | |
| strLen = int((lettersOnScreen[0] / 2) + (len(str) / 2)) | |
| for x in range(int((lettersOnScreen[0] / 2) - (len(str) / 2)),strLen): | |
| letters[x][lettersOnScreen[1] / 2] = \ | |
| [fontObj.render(str[x - ((lettersOnScreen[0] / 2) - (len(str) / 2))], False, colorList[col]) | |
| for col in range(maxCol)] | |
| char = chr(random.randint(32, 126)) | |
| for y in range(int(lettersOnScreen[1] / 2 + 1), int(lettersOnScreen[1] + 1)): | |
| for x in range(int((lettersOnScreen[0] / 2) - (len(str) / 2)), int((lettersOnScreen[0] / 2) + (len(str) / 2) + 1)): | |
| letters[x][y] = [fontObj.render(char, False, colorList[col]) for col in range(maxCol)] | |
| char = chr(random.randint(32, 126)) | |
| # main matrix, has char switch | |
| while notDone: | |
| for event in pygame.event.get(): | |
| if event.type == pygame.QUIT: | |
| notDone = False | |
| if event.type == pygame.KEYDOWN: | |
| notDone = False | |
| if random.randint(1, 2) == 1: | |
| randomInt = random.randint(0, lettersOnScreen[0]) | |
| if xHeads[randomInt] <= 0: | |
| xHeads[randomInt] = 1 | |
| for x in range(lettersOnScreen[0]): | |
| col = 0 | |
| counter = xHeads[x] | |
| # main loop for redraw | |
| while (counter > 0) and (col < maxCol): | |
| if (counter < lettersOnScreen[1] + 2) and (col < primeColors or | |
| col > (maxCol - endColors)): | |
| surface.blit(letters[x][counter - 1][col], (x * letterSize[0], | |
| (counter - 1) * letterSize[1])) | |
| col += 1 | |
| counter -= 1 | |
| # charswirch | |
| randomInt = random.randint(1, maxCol - 1) | |
| charPosY = xHeads[x] - randomInt | |
| if (lettersOnScreen[1] - 1 > charPosY > 0): | |
| temp = letters[x][charPosY] | |
| randomX = random.randint(1, lettersOnScreen[0] - 1) | |
| randomY = random.randint(1,lettersOnScreen[1] - 1) | |
| surface.blit(letters[x][charPosY][maxCol - 1], (x * letterSize[0], | |
| charPosY * letterSize[1])) | |
| surface.blit(letters[randomX][randomY][maxCol - 1], (randomX * letterSize[0], | |
| randomY * letterSize[1])) | |
| # char swap | |
| letters[x][charPosY] = letters[randomX][randomY] | |
| letters[randomX][randomY] = temp | |
| surface.blit(letters[x][charPosY][randomInt], (x * letterSize[0], charPosY * letterSize[1])) | |
| surface.blit(letters[randomX][randomY][getColor(randomX,randomY)], | |
| (randomX * letterSize[0], randomY * letterSize[1])) | |
| # check if is out of screen | |
| if xHeads[x] > 0: | |
| xHeads[x] += 1 | |
| if xHeads[x] - maxCol > lettersOnScreen[1]: | |
| xHeads[x] = 0 | |
| pygame.display.update() | |
| clock = pygame.time.Clock() | |
| clock.tick(20) |
hello.its realy amazing but how can change color???
hello.its realy amazing but how can change color???
@pourilyya
You can change the color of it by changing the variable COLOR variable it's in RGB format
I tried that but I got this error
Traceback (most recent call last):
File "C:\Users\18043\PycharmProjects\Cool number thing\main.py", line 66, in
letters[x][y] = [fontObj.render(char, False, colorList[col]) for col in range(maxCol)]
File "C:\Users\18043\PycharmProjects\Cool number thing\main.py", line 66, in
letters[x][y] = [fontObj.render(char, False, colorList[col]) for col in range(maxCol)]
ValueError: invalid color argument
Would it be possible to make it take ASCII Art and make it "rain/fall" aka make the ASCII imagine look like it is melting off the screen?
@39324234792 to change the color modify the variable COLOR
MAX VALUES: (245,245,245) NOT 255
Hello,
What is the copyright for this code ?
Thank you for the response !
holy moly this is amazing