素材提取
链接:https://pan.baidu.com/s/1Kb9xRrbHTM7yTvLdESI6xg
提取码:dkqi
初识pygame
这是一个可控制的鸭子在画面中移动的例子:
import pygame
import sys
from pygame.locals import *
#初始化pygame
pygame.init()
size = width,height =800,500
speed = [-2 ,1]
bg = (255,255,255)
#创建指定大小的窗口
screen = pygame.display.set_mode(size)
#设置窗口标题
pygame.display.set_caption("这是我pygame的第一个尝试")
#加载图片
cat = pygame.image.load("duck.jpg")
#获取图像的位置矩形
position = cat.get_rect()
l_head = cat
r_head = pygame.transform.flip(cat,True,False)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
cat =l_head
speed = [-1,0]
if event.key == pygame.K_RIGHT:
cat = r_head
speed = [1,0]
if event.key == pygame.K_UP:
speed = [0,-1]
if event.key == pygame.K_DOWN:
speed = [0,1]
#移动图像
position = position.move(speed)
if position.left < 0 or position.right > width:
#翻转图像
cat = pygame.transform.flip(cat,True,False)
#反向移动
speed[0] = -speed[0]
if position.top < 0 or position.bottom > height:
speed[1] = -speed[1]
#填充背景
screen.fill(bg)
#更新图像
screen.blit(cat,position)
#更新界面
pygame.display.flip()
#延迟10毫秒
pygame.time.delay(10)
界面显示用户当前操作,并记录在文件中:
import pygame
import sys
#初始化pygame
pygame.init()
size = width,height =800,500
screen = pygame.display.set_mode(size)
pygame.display.set_caption("黑客帝国")
bg = (0,0,0)
position = 0
font = pygame.font.Font(None,20)
line_height = font.get_linesize()
screen.fill(bg)
f = open("record.txt","w")
while True:
for event in pygame.event.get():
f.write(str(event) + '\n')
if event.type == pygame.QUIT:
f.close()
sys.exit()
screen.blit(font.render(str(event),True,(0,255,0)),(0,position))
position += line_height
if position > height:
position = 0
screen.fill(bg)
pygame.display.flip()
这是一个最终版的小乌龟移动例子:
import pygame
import sys
from pygame.locals import *
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load("music.ogg")
pygame.mixer.music.set_volume(0.1)
pygame.mixer.music.play(-1)
# 获得当前显示器支持的分辨率
size = pygame.display.list_modes()
size_i = 3
width, height = size[size_i]
# speed_x 和 speed_y 用于控制速度
speed_x, speed_y = 1, 1
# 控制小乌龟方向
dir_x, dir_y = -1, 0
# 设置透明度
transparent = 255
clock = pygame.time.Clock()
screen = pygame.display.set_mode(size[size_i])
pygame.display.set_caption("FishC Demo")
fullscreen = False
# 设置放大缩小比率
ratio = 1.0
# 为了避免多次缩放导致图片模糊
# 设置 obg 为原始背景图,background 为实际使用背景图
obg = pygame.image.load("background.jpg")
background = obg
# 同上
oturtle = pygame.image.load("turtle.png")
turtle = oturtle
oturtle_rect = oturtle.get_rect()
position = turtle_rect = oturtle_rect
l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)
def blit_alpha(target, source, location, opacity):
x = location[0]
y = location[1]
temp = pygame.Surface((source.get_width(), source.get_height())).convert()
temp.blit(target, (-x, -y))
temp.blit(source, (0, 0))
temp.set_alpha(opacity)
target.blit(temp, location)
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
if event.type == MOUSEBUTTONDOWN:
# 鼠标按键分别表示增加、恢复、减少游戏速度
if event.button == 1:
if speed_x < 30 and speed_y < 30:
speed_x += 1
speed_y += 1
if event.button == 2:
speed_x, speed_y = 1, 1
if event.button == 3:
if speed_x > 0 and speed_y > 0:
speed_x -= 1
speed_y -= 1
# 鼠标滚轮往上、下滚修改小乌龟透明度
if event.button == 4:
if transparent < 255:
transparent += 5
if event.button == 5:
if transparent > 0:
transparent -= 5
if event.type == KEYDOWN:
# 控制小乌龟移动方向(方向键)
if event.key == K_LEFT:
dir_x = -1
dir_y = 0
turtle = l_head
if event.key == K_RIGHT:
dir_x = 1
dir_y = 0
turtle = r_head
if event.key == K_UP:
dir_y = -1
dir_x = 0
if event.key == K_DOWN:
dir_y = 1
dir_x = 0
# 放大、缩小屏幕(CTRL + B、S)
if event.key == K_b and event.mod & KMOD_CTRL:
if size[size_i] != size[0]:
size_i -= 1
width, height = size[size_i]
screen = pygame.display.set_mode(size[size_i])
background = pygame.transform.scale(obg, size[size_i])
if event.key == K_s and event.mod & KMOD_CTRL:
if size[size_i] != size[-1]:
size_i += 1
width, height = size[size_i]
screen = pygame.display.set_mode(size[size_i])
background = pygame.transform.scale(obg, size[size_i])
# 全屏(F11)
if event.key == K_F11:
fullscreen = not fullscreen
if fullscreen:
width, height = size[0]
screen = pygame.display.set_mode(size[0], FULLSCREEN | HWSURFACE)
background = pygame.transform.scale(obg, size[0])
else:
width, height = size[size_i]
screen = pygame.display.set_mode(size[size_i])
background = pygame.transform.scale(obg, size[size_i])
# 放大、缩小小乌龟(=、-),空格恢复原始尺寸
if event.key == K_EQUALS or event.key == K_MINUS or event.key == K_SPACE:
# 最大只能放大一倍,缩小50%
if event.key == K_EQUALS and ratio < 2:
ratio += 0.1
if event.key == K_MINUS and ratio > 0.5:
ratio -= 0.1
if event.key == K_SPACE:
ratio = 1
turtle = l_head = pygame.transform.smoothscale(oturtle, (
int(oturtle_rect.width * ratio), int(oturtle_rect.height * ratio)))
r_head = pygame.transform.flip(turtle, True, False)
if dir_x == 1:
turtle = r_head
turtle_rect = turtle.get_rect()
position.width, position.height = turtle_rect.width, turtle_rect.height
# 移动小乌龟
position = position.move(dir_x * speed_x, dir_y * speed_y)
if position.left < 0 or position.right > width:
# 翻转图像
turtle = pygame.transform.flip(turtle, True, False)
# 反方向移动
dir_x = -dir_x
# 防止小乌龟卡在边缘
if position.right > width:
position[0] = width - turtle_rect.width
else:
position[0] = 0
if position.top < 0 or position.bottom > height:
dir_y = -dir_y
if position.bottom > height:
position[1] = height - turtle_rect.height
else:
position[1] = 0
screen.blit(background, (0, 0))
blit_alpha(screen, turtle, position, transparent)
pygame.display.flip()
clock.tick(30)
pygame的图形绘制
1.矩形绘制:rect(Surface,color,Rect,width=0)
import pygame
import sys
from pygame.locals import *
pygame.init()
WHITE = (255,255,255)
BLACK = (0,0,0)
size = width , height = 640 , 480
screen = pygame.display.set_mode(size)
pygame.display.set_caption("master_Z")
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
screen.fill(WHITE)
pygame.draw.rect(screen,BLACK,(50,50,150,50),0)
pygame.draw.rect(screen, BLACK, (250, 50, 150, 50), 1)
pygame.draw.rect(screen, BLACK, (450, 50, 150, 50), 10)
pygame.display.flip()
clock.tick(10)
2.多边形绘制:polygon(Surface,color,pointlist,width=0)
import pygame
import sys
from pygame.locals import *
pygame.init()
WHITE = (255,255,255)
GREEN = (0,255,0)
points = [(200,100),(250,50),(300,100),(350,50),(400,100),(300,200)]
size = width , height = 640 , 480
screen = pygame.display.set_mode(size)
pygame.display.set_caption("master_Z")
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
screen.fill(WHITE)
pygame.draw.polygon(screen,GREEN,points,0)
pygame.display.flip()
clock.tick(10)
3.绘制圆形:circle(Surface,color,pos,radius,width=0)
import pygame
import sys
from pygame.locals import *
pygame.init()
WHITE = (255,255,255)
RED = (255,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
size = width , height = 640 , 480
screen = pygame.display.set_mode(size)
pygame.display.set_caption("master_Z")
position = size[0]//2 , size[1]//2
r = 50
moving = False
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
if event.type == MOUSEBUTTONDOWN:
if event.button == 4:
r += 5
elif event.button == 5 and r > 5:
r -= 5
elif event.button == 1:
moving = True
if event.type == MOUSEBUTTONUP:
moving = False
if moving:
position = pygame.mouse.get_pos()
screen.fill(WHITE)
pygame.draw.circle(screen, RED, position, r, 1)
pygame.draw.circle(screen, GREEN, position, r*2, 1)
pygame.draw.circle(screen, BLUE, position, r*3, 1)
pygame.display.flip()
4.绘制椭圆形:ellipse(Surface,color,Rect, width=0)
import pygame
import sys
from pygame.locals import *
pygame.init()
BLACK = (0,0,0)
WHITE = (255,255,255)
size = width , height = 640 , 480
screen = pygame.display.set_mode(size)
pygame.display.set_caption("master_Z")
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
screen.fill(WHITE)
pygame.draw.ellipse(screen, BLACK, (100, 100, 400, 100), 1)
pygame.draw.ellipse(screen, BLACK, (250, 100, 100, 100), 1)
pygame.display.flip()
5.绘制弧线:arc(Surface,color,Rect,start_angle,stop_angle,width=1)
import pygame
import sys
from math import *
from pygame.locals import *
pygame.init()
BLACK = (0,0,0)
WHITE = (255,255,255)
size = width , height = 640 , 480
screen = pygame.display.set_mode(size)
pygame.display.set_caption("master_Z")
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
screen.fill(WHITE)
pygame.draw.arc(screen, BLACK, (100, 100, 400, 100), 0, pi, 1)
pygame.draw.arc(screen, BLACK, (250, 100, 100, 100), pi, 2*pi, 1)
pygame.display.flip()
6.绘制线段:line(Surface,color,start_pos,end_pos,width=1)
lines(Surface,color,closed,pointlist,width=1)
抗锯齿
aaline(Surface,color,startpos,endpos,blend=1)
aalines(Surface,color,closed,pointlist,blend=1)