forked from studywolf/blog
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added PyGame examples described in blog post
- Loading branch information
Showing
12 changed files
with
369 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import numpy as np | ||
import pygame | ||
import pygame.locals | ||
|
||
from armpart import ArmPart | ||
|
||
black = (0, 0, 0) | ||
white = (255, 255, 255) | ||
|
||
pygame.init() | ||
|
||
width = 500 | ||
height = 500 | ||
display = pygame.display.set_mode((width, height)) | ||
fpsClock = pygame.time.Clock() | ||
|
||
upperarm = ArmPart('upperarm.png', scale=.7) | ||
|
||
base = (width / 2, height / 2) | ||
|
||
while 1: | ||
|
||
display.fill(white) | ||
|
||
ua_image, ua_rect = upperarm.rotate(.01) | ||
ua_rect.center += np.asarray(base) | ||
ua_rect.center -= np.array([np.cos(upperarm.rotation) * upperarm.offset, | ||
-np.sin(upperarm.rotation) * upperarm.offset]) | ||
|
||
display.blit(ua_image, ua_rect) | ||
pygame.draw.circle(display, black, base, 30) | ||
|
||
# check for quit | ||
for event in pygame.event.get(): | ||
if event.type == pygame.locals.QUIT: | ||
pygame.quit() | ||
sys.exit() | ||
|
||
pygame.display.update() | ||
fpsClock.tick(30) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
import numpy as np | ||
import pygame | ||
import pygame.locals | ||
|
||
from armpart import ArmPart | ||
|
||
black = (0, 0, 0) | ||
white = (255, 255, 255) | ||
|
||
pygame.init() | ||
|
||
width = 750 | ||
height = 750 | ||
display = pygame.display.set_mode((width, height)) | ||
fpsClock = pygame.time.Clock() | ||
|
||
upperarm = ArmPart('upperarm.png', scale=.7) | ||
forearm = ArmPart('forearm.png', scale=.8) | ||
hand = ArmPart('hand.png', scale=1.0) | ||
|
||
origin = (width / 2, height / 2) | ||
|
||
while 1: | ||
|
||
display.fill(white) | ||
|
||
# rotate our joints | ||
ua_image, ua_rect = upperarm.rotate(.03) | ||
fa_image, fa_rect = forearm.rotate(-.02) | ||
h_image, h_rect = hand.rotate(.03) | ||
|
||
# generate (x,y) positions of each of the joints | ||
joints_x = np.cumsum([0, | ||
upperarm.scale * np.cos(upperarm.rotation), | ||
forearm.scale * np.cos(forearm.rotation), | ||
hand.length * np.cos(hand.rotation)]) + origin[0] | ||
joints_y = np.cumsum([0, | ||
upperarm.scale * np.sin(upperarm.rotation), | ||
forearm.scale * np.sin(forearm.rotation), | ||
hand.length * np.sin(hand.rotation)]) * -1 + origin[1] | ||
joints = [(int(x), int(y)) for x,y in zip(joints_x, joints_y)] | ||
|
||
def transform(rect, base, arm_part): | ||
rect.center += np.asarray(base) | ||
rect.center += np.array([np.cos(arm_part.rotation) * arm_part.offset, | ||
-np.sin(arm_part.rotation) * arm_part.offset]) | ||
|
||
transform(ua_rect, joints[0], upperarm) | ||
transform(fa_rect, joints[1], forearm) | ||
transform(h_rect, joints[2], hand) | ||
# transform the hand a bit more because it's weird | ||
h_rect.center += np.array([np.cos(hand.rotation), | ||
-np.sin(hand.rotation)]) * -10 | ||
|
||
display.blit(ua_image, ua_rect) | ||
display.blit(fa_image, fa_rect) | ||
display.blit(h_image, h_rect) | ||
|
||
# check for quit | ||
for event in pygame.event.get(): | ||
if event.type == pygame.locals.QUIT: | ||
pygame.quit() | ||
sys.exit() | ||
|
||
pygame.display.update() | ||
fpsClock.tick(30) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
import numpy as np | ||
import pygame | ||
import pygame.locals | ||
|
||
from armpart import ArmPart | ||
|
||
black = (0, 0, 0) | ||
white = (255, 255, 255) | ||
arm_color = (50, 50, 50, 200) # fourth value specifies transparency | ||
|
||
pygame.init() | ||
|
||
width = 750 | ||
height = 750 | ||
display = pygame.display.set_mode((width, height)) | ||
fpsClock = pygame.time.Clock() | ||
|
||
upperarm = ArmPart('upperarm.png', scale=.7) | ||
forearm = ArmPart('forearm.png', scale=.8) | ||
hand = ArmPart('hand.png', scale=1.0) | ||
|
||
line_width = 15 | ||
line_upperarm = pygame.Surface((upperarm.scale, line_width), pygame.SRCALPHA, 32) | ||
line_forearm = pygame.Surface((forearm.scale, line_width), pygame.SRCALPHA, 32) | ||
line_hand = pygame.Surface((hand.scale, line_width), pygame.SRCALPHA, 32) | ||
|
||
line_upperarm.fill(arm_color) | ||
line_forearm.fill(arm_color) | ||
line_hand.fill(arm_color) | ||
|
||
origin = (width / 2, height / 2) | ||
|
||
while 1: | ||
|
||
display.fill(white) | ||
|
||
# rotate our joints | ||
ua_image, ua_rect = upperarm.rotate(.03) | ||
fa_image, fa_rect = forearm.rotate(-.02) | ||
h_image, h_rect = hand.rotate(.03) | ||
|
||
# generate (x,y) positions of each of the joints | ||
joints_x = np.cumsum([0, | ||
upperarm.scale * np.cos(upperarm.rotation), | ||
forearm.scale * np.cos(forearm.rotation), | ||
hand.length * np.cos(hand.rotation)]) + origin[0] | ||
joints_y = np.cumsum([0, | ||
upperarm.scale * np.sin(upperarm.rotation), | ||
forearm.scale * np.sin(forearm.rotation), | ||
hand.length * np.sin(hand.rotation)]) * -1 + origin[1] | ||
joints = [(int(x), int(y)) for x,y in zip(joints_x, joints_y)] | ||
|
||
def transform(rect, base, arm_part): | ||
rect.center += np.asarray(base) | ||
rect.center += np.array([np.cos(arm_part.rotation) * arm_part.offset, | ||
-np.sin(arm_part.rotation) * arm_part.offset]) | ||
|
||
transform(ua_rect, joints[0], upperarm) | ||
transform(fa_rect, joints[1], forearm) | ||
transform(h_rect, joints[2], hand) | ||
# transform the hand a bit more because it's weird | ||
h_rect.center += np.array([np.cos(hand.rotation), | ||
-np.sin(hand.rotation)]) * -10 | ||
|
||
display.blit(ua_image, ua_rect) | ||
display.blit(fa_image, fa_rect) | ||
display.blit(h_image, h_rect) | ||
|
||
# rotate arm lines | ||
line_ua = pygame.transform.rotozoom(line_upperarm, | ||
np.degrees(upperarm.rotation), 1) | ||
line_fa = pygame.transform.rotozoom(line_forearm, | ||
np.degrees(forearm.rotation), 1) | ||
line_h = pygame.transform.rotozoom(line_hand, | ||
np.degrees(hand.rotation), 1) | ||
# translate arm lines | ||
lua_rect = line_ua.get_rect() | ||
transform(lua_rect, joints[0], upperarm) | ||
lua_rect.center += np.array([-lua_rect.width / 2.0, -lua_rect.height / 2.0]) | ||
|
||
lfa_rect = line_fa.get_rect() | ||
transform(lfa_rect, joints[1], forearm) | ||
lfa_rect.center += np.array([-lfa_rect.width / 2.0, -lfa_rect.height / 2.0]) | ||
|
||
lh_rect = line_h.get_rect() | ||
transform(lh_rect, joints[2], hand) | ||
lh_rect.center += np.array([-lh_rect.width / 2.0, -lh_rect.height / 2.0]) | ||
|
||
display.blit(line_ua, lua_rect) | ||
display.blit(line_fa, lfa_rect) | ||
display.blit(line_h, lh_rect) | ||
|
||
# draw circles at joints for pretty | ||
pygame.draw.circle(display, black, joints[0], 30) | ||
pygame.draw.circle(display, arm_color, joints[0], 12) | ||
pygame.draw.circle(display, black, joints[1], 20) | ||
pygame.draw.circle(display, arm_color, joints[1], 7) | ||
pygame.draw.circle(display, black, joints[2], 15) | ||
pygame.draw.circle(display, arm_color, joints[2], 5) | ||
|
||
# check for quit | ||
for event in pygame.event.get(): | ||
if event.type == pygame.locals.QUIT: | ||
pygame.quit() | ||
sys.exit() | ||
|
||
pygame.display.update() | ||
fpsClock.tick(30) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
import numpy as np | ||
import pygame | ||
|
||
class ArmPart: | ||
""" | ||
A class for storing relevant arm segment information. | ||
""" | ||
def __init__(self, pic, scale=1.0): | ||
self.base = pygame.image.load(pic) | ||
# some handy constants | ||
self.length = self.base.get_rect()[2] | ||
self.scale = self.length * scale | ||
self.offset = self.scale / 2.0 | ||
|
||
self.rotation = 0.0 # in radians | ||
|
||
def rotate(self, rotation): | ||
""" | ||
Rotates and re-centers the arm segment. | ||
""" | ||
self.rotation += rotation | ||
# rotate our image | ||
image = pygame.transform.rotozoom(self.base, np.degrees(self.rotation), 1) | ||
# reset the center | ||
rect = image.get_rect() | ||
rect.center = (0, 0) | ||
|
||
return image, rect | ||
|
||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
import pygame | ||
import pygame.locals | ||
|
||
white = (255, 255, 255) | ||
|
||
pygame.init() | ||
|
||
display = pygame.display.set_mode((300, 300)) | ||
fpsClock = pygame.time.Clock() | ||
|
||
image = pygame.image.load('pic.png') | ||
|
||
while 1: | ||
|
||
display.fill(white) | ||
|
||
image = pygame.transform.rotate(image, 1) | ||
rect = image.get_rect() | ||
|
||
display.blit(image, rect) | ||
|
||
# check for quit | ||
for event in pygame.event.get(): | ||
if event.type == pygame.locals.QUIT: | ||
pygame.quit() | ||
sys.exit() | ||
|
||
pygame.display.update() | ||
fpsClock.tick(30) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
import pygame | ||
import pygame.locals | ||
|
||
white = (255, 255, 255) | ||
|
||
pygame.init() | ||
|
||
display = pygame.display.set_mode((300, 300)) | ||
fpsClock = pygame.time.Clock() | ||
|
||
image = pygame.image.load('pic.png') | ||
|
||
while 1: | ||
|
||
display.fill(white) | ||
|
||
image = pygame.transform.rotate(image, 1) | ||
rect = image.get_rect() | ||
rect.center = (150, 150) | ||
|
||
display.blit(image, rect) | ||
|
||
# check for quit | ||
for event in pygame.event.get(): | ||
if event.type == pygame.locals.QUIT: | ||
pygame.quit() | ||
sys.exit() | ||
|
||
pygame.display.update() | ||
fpsClock.tick(30) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import pygame | ||
import pygame.locals | ||
|
||
white = (255, 255, 255) | ||
|
||
pygame.init() | ||
|
||
display = pygame.display.set_mode((300, 300)) | ||
fpsClock = pygame.time.Clock() | ||
|
||
image = pygame.image.load('pic.png') | ||
radians = 0 | ||
|
||
while 1: | ||
|
||
display.fill(white) | ||
|
||
radians += .5 | ||
|
||
rotated_image = pygame.transform.rotate(image, radians) | ||
rect = rotated_image.get_rect() | ||
rect.center = (150, 150) | ||
|
||
display.blit(rotated_image, rect) | ||
|
||
# check for quit | ||
for event in pygame.event.get(): | ||
if event.type == pygame.locals.QUIT: | ||
pygame.quit() | ||
sys.exit() | ||
|
||
pygame.display.update() | ||
fpsClock.tick(30) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
import pygame | ||
import pygame.locals | ||
|
||
white = (255, 255, 255) | ||
|
||
pygame.init() | ||
|
||
display = pygame.display.set_mode((300, 300)) | ||
fpsClock = pygame.time.Clock() | ||
|
||
image = pygame.image.load('pic.png') | ||
degrees = 0 | ||
|
||
while 1: | ||
|
||
display.fill(white) | ||
|
||
degrees += 1 | ||
|
||
rotated = pygame.transform.rotozoom(image, degrees, 1) | ||
rect = rotated.get_rect() | ||
rect.center = (150, 150) | ||
|
||
display.blit(rotated, rect) | ||
|
||
# check for quit | ||
for event in pygame.event.get(): | ||
if event.type == pygame.locals.QUIT: | ||
pygame.quit() | ||
sys.exit() | ||
|
||
pygame.display.update() | ||
fpsClock.tick(30) |