SHOW:
|
|
- or go back to the newest paste.
| 1 | # CIRCLE DEMO | |
| 2 | ||
| 3 | # By Jaseman - 22nd August 2012 | |
| 4 | ||
| 5 | import os, random, pygame; from pygame.locals import * | |
| 6 | from math import sin, cos, pi | |
| 7 | pygame.init(); clock = pygame.time.Clock() | |
| 8 | os.environ['SDL_VIDEO_WINDOW_POS'] = 'center' | |
| 9 | pygame.display.set_caption("Circle Demo")
| |
| 10 | screen=pygame.display.set_mode((800,600),0,32) | |
| 11 | ||
| 12 | bk=pygame.Surface((800,600)); bk.fill((0,64,0)) | |
| 13 | dot=pygame.Surface((4,4)); dot.set_colorkey([0,0,0]) | |
| 14 | pygame.draw.circle(dot,(255,255,255),(2,2),2,0) | |
| 15 | ||
| 16 | - | smlradius = 60; bigradius = 120; points = 160 |
| 16 | + | smlradius = 60; bigradius = 120; points = 90 |
| 17 | # Variable Arrays To Store X&Y points for a small and big circle | |
| 18 | smcx = []; smcy = []; bgcx = []; bgcy = [] | |
| 19 | ||
| 20 | - | # Calculate the X&Y points and put values into the array |
| 20 | + | # Calculate the X&Y points and put values into the array |
| 21 | angleStep = pi *2 / points | |
| 22 | for a in range(0,points): | |
| 23 | smcx.append(sin(a * angleStep)*smlradius) | |
| 24 | smcy.append(cos(a * angleStep)*smlradius) | |
| 25 | bgcx.append(sin(a * angleStep)*bigradius) | |
| 26 | bgcy.append(cos(a * angleStep)*bigradius) | |
| 27 | ||
| 28 | a=0; b=0 # Points a & b will be moving points of the circles | |
| 29 | - | a=points-1; b=0 # Points a & b will be moving points of the circles |
| 29 | + | c=0; d=0 # Points for sine and cosine waves |
| 30 | cx=800/2; cy=600/2 # Centre of the screen | |
| 31 | r=random.randint; pdl=pygame.draw.line # Abbreviations for commands | |
| 32 | ||
| 33 | - | run=1 |
| 33 | + | run = 1 |
| 34 | while run == 1: | |
| 35 | ||
| 36 | screen.blit(bk,(0,0)) # Draw the background surface | |
| 37 | screen.blit(dot,(cx-2,cy-2)) # Centrepoint | |
| 38 | - | rcol=r(0,255); gcol=r(0,255);bcol=r(0,255) # Random Red Green Blue |
| 38 | + | |
| 39 | # Draw the circle | |
| 40 | - | # A line from point 'a' on small circle to point 'a' on big circle |
| 40 | + | screen.blit(dot, (bgcx[a]+cx-2,bgcy[a]+cy-2)) |
| 41 | - | pdl(bk,[rcol,gcol,bcol],(smcx[a]+cx,smcy[a]+cy),(bgcx[a]+cx,bgcy[a]+cy)) |
| 41 | + | screen.blit(dot, (smcx[a]+cx-2,smcy[a]+cy-2)) |
| 42 | - | rcol=r(0,255); gcol=r(0,255);bcol=r(0,255) |
| 42 | + | screen.blit(dot, (bgcx[b]+cx-2,bgcy[b]+cy-2)) |
| 43 | screen.blit(dot, (smcx[b]+cx-2,smcy[b]+cy-2)) | |
| 44 | - | # A line from Centrepoint to point 'b' on small circle |
| 44 | + | rcol=r(0,255); gcol=r(0,255); bcol=r(0,255) |
| 45 | - | pdl(bk,[rcol,gcol,bcol],(cx-2,cy-2),(smcx[b]+cx,smcy[b]+cy)) |
| 45 | + | pdl(bk,[rcol,gcol,bcol],(bgcx[a]+cx-2,bgcy[a]+cy-2),(smcx[a]+cx-2,smcy[a]+cy-2)) |
| 46 | pdl(bk,[rcol,gcol,bcol],(bgcx[b]+cx-2,bgcy[b]+cy-2),(smcx[b]+cx-2,smcy[b]+cy-2)) | |
| 47 | - | # Some dots to highlight points 'a' & 'b' on both circles |
| 47 | + | pdl(bk,[rcol,gcol,bcol],(smcx[a]+cx-2,smcy[a]+cy-2),(smcx[b]+cx-2,smcy[b]+cy-2)) |
| 48 | - | screen.blit(dot,(smcx[a]+cx-2,smcy[a]+cy-2)) |
| 48 | + | |
| 49 | - | screen.blit(dot,(bgcx[a]+cx-2,bgcy[a]+cy-2)) |
| 49 | + | # Constrained points (Fixed X or Y) |
| 50 | - | screen.blit(dot,(smcx[b]+cx-2,smcy[b]+cy-2)) |
| 50 | + | screen.blit(dot, (bgcx[a]+cx-2,cy-bigradius-14)) |
| 51 | screen.blit(dot, (bgcx[b]+cx-2,cy+bigradius+10)) | |
| 52 | - | # Another circle offset to the right with horizontal lines |
| 52 | + | screen.blit(dot, (smcx[a]+cx-2,cy-bigradius-34)) |
| 53 | - | rcol=r(0,255); gcol=r(0,255);bcol=r(0,255) |
| 53 | + | screen.blit(dot, (smcx[b]+cx-2,cy+bigradius+30)) |
| 54 | - | pdl(bk,[rcol,gcol,bcol],(smcx[a]+cx+250,smcy[a]+cy),(smcx[b]+cx+250,smcy[b]+cy)) |
| 54 | + | screen.blit(dot, (cx-bigradius-14,bgcy[a]+cy-2)) |
| 55 | - | screen.blit(dot,(smcx[a]+cx+250,smcy[a]+cy)) |
| 55 | + | screen.blit(dot, (cx-bigradius-34,smcy[a]+cy-2)) |
| 56 | - | screen.blit(dot,(smcx[b]+cx+250,smcy[b]+cy)) |
| 56 | + | screen.blit(dot, (cx+bigradius+14,bgcy[b]+cy-2)) |
| 57 | - | screen.blit(dot,(bgcx[a]+cx+250,bgcy[a]+cy)) |
| 57 | + | screen.blit(dot, (cx+bigradius+34,smcy[b]+cy-2)) |
| 58 | - | screen.blit(dot,(bgcx[b]+cx+250,bgcy[b]+cy)) |
| 58 | + | pdl(bk,[rcol,gcol,bcol],(bgcx[a]+cx-2,cy-bigradius-14),(smcx[a]+cx-2,cy-bigradius-34)) |
| 59 | pdl(bk,[rcol,gcol,bcol],(bgcx[b]+cx-2,cy+bigradius+10),(smcx[b]+cx-2,cy+bigradius+30)) | |
| 60 | - | # Offset dots with fixed x or y points |
| 60 | + | pdl(bk,[rcol,gcol,bcol],(cx-bigradius-14,bgcy[a]+cy-2),(cx-bigradius-34,smcy[a]+cy-2)) |
| 61 | - | screen.blit(dot,(240,smcy[a]+cy-2)) |
| 61 | + | pdl(bk,[rcol,gcol,bcol],(cx+bigradius+14,bgcy[b]+cy-2),(cx+bigradius+34,smcy[b]+cy-2)) |
| 62 | - | screen.blit(dot,(200,bgcy[a]+cy-2)) |
| 62 | + | |
| 63 | - | screen.blit(dot,(smcx[a]+cx-2,460)) |
| 63 | + | # Ellipse (Big and Small Radius points mixed) |
| 64 | - | screen.blit(dot,(bgcx[a]+cx-2,500)) |
| 64 | + | screen.blit(dot, (bgcx[a]+cx-2+bigradius+160,smcy[a]+cy-2)) |
| 65 | screen.blit(dot, (smcx[a]+cx-2-bigradius-160,bgcy[a]+cy-2)) | |
| 66 | - | # Offset dots using a combo of small and big circle points (Ellipse) |
| 66 | + | |
| 67 | - | screen.blit(dot,(bgcx[a]+cx-2,smcy[b]+cy-2-220)) |
| 67 | + | screen.blit(dot, (cx-2+bigradius+160,cy-2)) |
| 68 | - | screen.blit(dot,(smcx[a]+cx-2-320,bgcy[b]+cy-2)) |
| 68 | + | screen.blit(dot, (cx-2-bigradius-160,cy-2)) |
| 69 | pdl(bk,[rcol,gcol,bcol],(cx-2+bigradius+160,cy-2),(bgcx[a]+cx-2+bigradius+160,smcy[a]+cy-2)) | |
| 70 | - | clock.tick(100); pygame.display.update(); a=a-1; b=b+1 |
| 70 | + | pdl(bk,[rcol,gcol,bcol],(cx-2-bigradius-160,cy-2),(smcx[a]+cx-2-bigradius-160,bgcy[a]+cy-2)) |
| 71 | - | if a<=1: a=points-1 # Restart the loop for point A |
| 71 | + | |
| 72 | - | if b>=points-1: b=1 # Restart the loop for point B |
| 72 | + | # Sine and Cosine Waves |
| 73 | screen.blit(dot, (c,smcy[a]+cy-2-bigradius-100)) | |
| 74 | c=c+1 | |
| 75 | if c>=800: c=0 | |
| 76 | screen.blit(dot, (smcx[a]+cx-2-bigradius-100,d)) | |
| 77 | d=d+1 | |
| 78 | if d>=600: d=0 | |
| 79 | ||
| 80 | clock.tick(200); pygame.display.update(); a=a-1; b=b+1 | |
| 81 | if b>=points: b=0 | |
| 82 | if a==-1: a=points-1 |