Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame
- import random
- from pygame.locals import *
- from pygame.mixer import Sound, get_init, pre_init
- import os
- from array import array
- import math
- from time import sleep
- import time
- SCREEN_WIDTH = random.randint(400, 750)
- SCREEN_HEIGHT = random.randint(400, 750)
- SCREEN_CAPTION = random.choice(('какдила какдила', 'паша техник пишет биты здесь', 'понятие драйв', 'мне кажется, это маша михайленко', 'разбулятор', 'бильбоа', 'генератор случайного чего-то', 'подарок на др маши',
- '[вс т авитьтекст_)', 'рэпер фейс', 'набор для творчества0', 'весёлые картинки с муз сопровождением'))
- COLOR_MIN = random.randint(0, 50)
- COLOR_MAX = random.randint(150, 255)
- COLOR_DELTA = random.randint(10, 50)
- RADIUS_MIN = random.randint(1, 10)
- RADIUS_MAX = random.randint(30, 75)
- RADIUS_DELTA = random.randint(5, 15)
- NOTE_MIN = random.randint(50, 150)
- NOTE_DELTA = random.randint(10, 50)
- NOTE_MAX = random.randint(1000, 2000)
- NOTE_BASS = random.randint(NOTE_MIN, (NOTE_MAX - NOTE_MIN) // 2)
- NOTE_DRUM = random.randint(NOTE_BASS, NOTE_BASS + (NOTE_MAX - NOTE_BASS) // 2)
- NOTE_SYNTH = random.randint(NOTE_DRUM + (((NOTE_MAX - NOTE_DRUM) // 3) * 2), NOTE_MAX)
- class Note(Sound):
- def __init__(self, frequency, volume=1):
- self.frequency = frequency
- Sound.__init__(self, self.build_samples())
- self.set_volume(volume)
- def build_samples(self):
- period = int(round(get_init()[0] / self.frequency))
- samples = array("h", [0] * period)
- amplitude = 2 ** (abs(get_init()[1]) - 1) - 1
- for time in range(period):
- if time < period / 2:
- samples[time] = amplitude
- else:
- samples[time] = -amplitude
- return samples
- def change_color(color):
- color0 = color[0]
- color1 = color[1]
- color2 = color[2]
- color0 = min(max(color0 + random.randint(-COLOR_DELTA,
- COLOR_DELTA), COLOR_MIN), COLOR_MAX)
- color1 = min(max(color1 + random.randint(-COLOR_DELTA,
- COLOR_DELTA), COLOR_MIN), COLOR_MAX)
- color2 = min(max(color2 + random.randint(-COLOR_DELTA,
- COLOR_DELTA), COLOR_MIN), COLOR_MAX)
- return (color0, color1, color2)
- def change_radius(radius):
- radius_new = min(max(radius + random.randint(-RADIUS_DELTA,
- RADIUS_DELTA), RADIUS_MIN), RADIUS_MAX)
- return radius_new
- def change_note(note_old):
- note_new = min(
- max(NOTE_MIN, note_old + random.randint(-NOTE_DELTA, +NOTE_DELTA)), NOTE_MAX)
- return note_new
- pre_init(44100, -16, 1, 1024)
- pygame.init()
- screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
- pygame.display.set_caption(SCREEN_CAPTION)
- background = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT))
- background = background.convert()
- background.fill((0, 0, 0))
- color = (random.randint(COLOR_MIN, COLOR_MAX), random.randint(
- COLOR_MIN, COLOR_MAX), random.randint(COLOR_MIN, COLOR_MAX))
- startPos = (0, 0)
- radius = random.randint(RADIUS_MIN, RADIUS_MAX)
- note = random.randint(NOTE_MIN, NOTE_MAX)
- while True:
- Note(note, volume=2).play(1)
- note = change_note(note)
- pressed = pygame.key.get_pressed()
- if pressed[K_c]:
- background.fill((0, 0, 0))
- color = (random.randint(COLOR_MIN, COLOR_MAX), random.randint(
- COLOR_MIN, COLOR_MAX), random.randint(COLOR_MIN, COLOR_MAX))
- radius = random.randint(RADIUS_MIN, RADIUS_MAX)
- note = random.randint(NOTE_MIN, NOTE_MAX)
- for i in pygame.event.get():
- if i.type == pygame.QUIT or pressed[pygame.K_q]:
- exit()
- elif i.type == pygame.MOUSEMOTION:
- endPos = pygame.mouse.get_pos()
- if pygame.mouse.get_pressed() == (1, 0, 0):
- if startPos[0] > endPos[0]:
- note = max(1, note - abs(startPos[1] - endPos[1]))
- # if startPos[1] < endPos[1]:
- # note = min(2500, note + abs(startPos[0] - endPos[0]))
- pygame.draw.line(background, color,
- startPos, endPos, radius)
- elif pygame.mouse.get_pressed() == (0, 0, 1):
- pygame.draw.line(background, (0, 0, 0), startPos, endPos, 10)
- startPos = endPos
- screen.blit(background, (0, 0))
- color = change_color(color)
- radius = change_radius(radius)
- pygame.display.flip()
- Note(NOTE_BASS, volume=0.3).play(1)
- Note(NOTE_DRUM, volume=0.3).play(1)
- Note(NOTE_SYNTH, volume=0.7).play(1)
- NOTE_SYNTH += 1
- if NOTE_SYNTH == NOTE_MAX:
- NOTE_SYNTH = NOTE_MIN
- time.sleep(1 / random.randint(35, 120))
Advertisement
Add Comment
Please, Sign In to add comment