kopia lustrzana https://github.com/villares/sketch-a-day
				
				
				
			
		
			
				
	
	
		
			140 wiersze
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			140 wiersze
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day
 | 
						|
SKETCH_NAME = "s268"  # 20180923
 | 
						|
 | 
						|
import pygame  # install Pygame https://www.pygame.org
 | 
						|
import pygame.gfxdraw
 | 
						|
from random import choice
 | 
						|
from random import randint
 | 
						|
 | 
						|
gliphs = [lambda x, y, s: rect(x, y, s, s),
 | 
						|
          lambda x, y, s: ellipse(x, y, s, s),
 | 
						|
          lambda x, y, s: triangle(x - s, y, x - s, y + s, x, y + s),
 | 
						|
          lambda x, y, s: triangle(x + s, y, x + s, y - s, x, y - s),
 | 
						|
          ]
 | 
						|
 | 
						|
def setup():
 | 
						|
    size(700, 700)
 | 
						|
    rectMode(CENTER)
 | 
						|
 | 
						|
 | 
						|
def draw():
 | 
						|
    background(250)
 | 
						|
    # ensamble of 5 , on grid also order=5
 | 
						|
    fill(120, 120, 200)
 | 
						|
    grid(width/2, height/2, 5, 120, ensamble, 5)
 | 
						|
    noLoop()
 | 
						|
 | 
						|
 | 
						|
def ensamble(ex, ey, order):
 | 
						|
    for _ in range(order):
 | 
						|
        order, spacing, side = randint(3, 11), 12, 6
 | 
						|
        x, y = randint(-6, 5) * side, randint(-6, 5) * side
 | 
						|
        grid(ex+x, ey+y, order, spacing, choice(gliphs), side)
 | 
						|
 | 
						|
 | 
						|
def grid(x, y, order, spacing, function, *args):
 | 
						|
    xo, yo = (x - order * spacing / 2, y - order * spacing / 2)
 | 
						|
    for i in range(order):
 | 
						|
        gx = spacing/2 + i * spacing
 | 
						|
        for j in range(order):
 | 
						|
            gy = spacing/2 + j * spacing
 | 
						|
            function(xo + gx, yo + gy, *args)
 | 
						|
 | 
						|
 | 
						|
# Now stuff to make it easier to port from Processing to Pygame
 | 
						|
 | 
						|
def triangle(x0, y0, x1, y1, x2, y2):
 | 
						|
    # This draws a triangle
 | 
						|
    pygame.gfxdraw.filled_trigon(screen, int(x0), int(y0), int(x1), int(y1), int(x2), int(y2), current_fill)
 | 
						|
    pygame.gfxdraw.trigon(screen, int(x0), int(y0), int(x1), int(y1), int(x2), int(y2), current_stroke)
 | 
						|
 | 
						|
# def line(x1, y1, x2, y2):
 | 
						|
#    pygame.draw.aaline(screen, current_fill, [x1, y1], [x2, y2], stroke_weight)
 | 
						|
 | 
						|
def rect(x, y, w, h):
 | 
						|
    if _rect_mode == CENTER:
 | 
						|
        x -= w/2
 | 
						|
        y -= h/2
 | 
						|
    pygame.gfxdraw.box(screen, (int(x), int(y), int(w), int(h)), current_fill)
 | 
						|
    pygame.gfxdraw.rectangle(screen, (int(x), int(y), int(w), int(h)), current_stroke)
 | 
						|
 | 
						|
def ellipse(x, y, w, h):
 | 
						|
    x -= w/2
 | 
						|
    y -= h/2
 | 
						|
    pygame.gfxdraw.filled_ellipse(screen, int(x), int(y), int(w/2), int(h/2), current_fill)
 | 
						|
    pygame.gfxdraw.ellipse(screen, int(x), int(y), int(w/2), int(h/2), current_stroke)
 | 
						|
 | 
						|
def background(r, g=None, b=None):
 | 
						|
    if g and b:
 | 
						|
        screen.fill((r, g, b))
 | 
						|
    else:
 | 
						|
        screen.fill((r, r, r))
 | 
						|
 | 
						|
def fill(r, g=None, b=None):
 | 
						|
    global current_fill
 | 
						|
    if g and b:
 | 
						|
        current_fill = (r, g, b)
 | 
						|
    else:
 | 
						|
        current_fill = (r, r, r)
 | 
						|
 | 
						|
def size(w, h):
 | 
						|
    global width, height
 | 
						|
    width, height = w, h
 | 
						|
 | 
						|
def noLoop():
 | 
						|
    global _pause
 | 
						|
    _pause = True
 | 
						|
 | 
						|
def loop():
 | 
						|
    global _pause
 | 
						|
    _pause = False
 | 
						|
    
 | 
						|
def rectMode(c):
 | 
						|
    _rect_mode = c
 | 
						|
        
 | 
						|
 | 
						|
def run():
 | 
						|
    global CENTER, CORNER, _rect_mode
 | 
						|
    _rect_mode = CORNER = 0
 | 
						|
    CENTER = 3
 | 
						|
    global width, height, screen, current_fill, current_stroke, stroke_weight, _pause
 | 
						|
    # Initialize the game engine
 | 
						|
    pygame.init()
 | 
						|
    current_fill = (255, 255, 255)
 | 
						|
    current_stroke = (0, 0, 0)
 | 
						|
    stroke_weight = 1
 | 
						|
    width, height = 100, 100
 | 
						|
    _done = False
 | 
						|
    _pause = False
 | 
						|
 | 
						|
    setup()
 | 
						|
 | 
						|
    # Set the height and width of the screen
 | 
						|
    screen = pygame.display.set_mode([width, height])
 | 
						|
    pygame.display.set_caption(SKETCH_NAME)
 | 
						|
    clock = pygame.time.Clock()
 | 
						|
    draw()
 | 
						|
    # Loop until the user clicks the close button.
 | 
						|
    while not _done:
 | 
						|
        # This limits the while loop to a max of 10 times per second.
 | 
						|
        # Leave this out and we will use all CPU we can.
 | 
						|
        clock.tick(10)
 | 
						|
 | 
						|
        for event in pygame.event.get():  # User did something
 | 
						|
            if event.type == pygame.QUIT:  # If user clicked close
 | 
						|
                _done = True  # Flag that we are _done so we exit this loop
 | 
						|
            if event.type == pygame.KEYDOWN:
 | 
						|
                    _pause = not _pause
 | 
						|
        # All drawing code happens after the for loop and but
 | 
						|
        # inside the main while _done==False loop.
 | 
						|
        # Draw on screen
 | 
						|
        if not _pause:
 | 
						|
            draw()
 | 
						|
        # Go ahead and update the screen with what we've drawn.
 | 
						|
        # This MUST happen after all the other drawing commands.
 | 
						|
        pygame.display.flip()
 | 
						|
    # Be IDLE friendly
 | 
						|
    pygame.quit()
 | 
						|
 | 
						|
run()
 |