pygame的使用及进阶

pygame的使用

Pygame是跨平台Python模块,专为电子游戏设计,包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚。
在这里插入图片描述

最小游戏开发框架

import pygame,sys#导入pygame模块
pygame.init()##初始化,相当于告诉系统我要开发游戏了
##游戏窗口大小,参数是一个元组
windows=pygame.display.set_mode((600,400))
##设置字幕
pygame.display.set_caption("杨国平的小游戏")
##背景颜色填充
windows.fill((255,255,255))##参数是个三元组
pygame.display.flip()##第一次刷新页面
##pygame.display.update()第一次以后的刷新
while True:
    for event in pygame.event.get():##监听事件
        if event.type==pygame.QUIT:
            sys.exit()

加载图片&显示图片

import pygame,sys
pygame.init()
##游戏窗口大小
windows=pygame.display.set_mode((600,400))
##字幕
pygame.display.set_caption("杨国平的小游戏")
##背景颜色填充
windows.fill((255,255,255))
##-------游戏开始页面静态效果
##1.加载图片(只是放到了内存中)
image1=pygame.image.load("java3.jpg")
##缩放及旋转(将加载进内存的图片做形状上的处理)
##此方法不能按比例缩放
new1=pygame.transform.scale(image1,(200,150))
##按比例缩放及角度旋转(将加载进内存的图片做形状上的处理)
##第二个参数是角度,第三个是占原图的百分之多少
new2=pygame.transform.rotozoom(image1,45,0.7)
##2.渲染图片(这才是将图片搞到页面上(windows))
windows.blit(new1,(0,0))##每调用一次该方法都会渲染一张图
windows.blit(new2,(200,0))
##操作图片
w,h=image1.get_size()##获取图片的宽高
##3.刷新显示页面
pygame.display.flip()##第一次刷新页面
##pygame.display.update()第一次以后的刷新
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()

显示图形

import pygame,sys
pygame.init()
##游戏窗口大小
windows=pygame.display.set_mode((600,400))
pygame.display.set_caption("杨国平的小游戏")
windows.fill((255,255,255))
##pygame.draw相当于一个画笔
##画直线(画在哪,颜色,起点,终点,像素)
pygame.draw.line(windows,(255,0,0),(50,100),(100,400),2)
##画折线(画在哪,颜色,是否平滑,点集,像素)
pygame.draw.lines(windows,(0,255,0),True,[(10,300),(100,160),(500,100),(150,400)],2)
##画圆最后一个参数如果不写,默认是0,填充,第三个参数是圆心,第四个参数是半径
pygame.draw.circle(windows,(10,50,150),(100,100),100,1)
##画矩形(第四个参数是左上角顶点的坐标和矩形的宽,高)
pygame.draw.rect(windows,(255,200,100),(100,100,100,200),1)
##椭圆(矩形的内切,所以参数与矩形一样)
pygame.draw.ellipse(windows,(255,0,100),(100,100,100,200),1)
##弧线,第四个参数是开始弧度,第五个参数是结束弧度
pygame.draw.arc(windows,(0,0,0),(100,100,100,200),0,3.1415926/3,3)
#3.刷新显示页面
pygame.display.flip()##第一次刷新页面
##pygame.display.update()第一次以后的刷新
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()

在这里插入图片描述

显示文字

import pygame,sys
pygame.init()
##游戏窗口大小
windows=pygame.display.set_mode((600,400))
pygame.display.set_caption("杨国平的小游戏")
windows.fill((255,255,255))
##1.获取字体对象(相当于一支画笔)
font=pygame.font.Font("C:\\Windows\\Fonts\\FZSTK.TTF",30)
##2.获取文字对象
##第三个参数是字体颜色,第四个参数是字体背景
text=font.render("游戏你好",True,(255,0,0),(255,255,0))
##渲染,这个跟图片渲染一样
windows.blit(text,(0,0))
##操作文字
w,h=text.get_size()
windows.blit(text,(600-w,400-h))
##缩放及旋转,与图片一样
new1=pygame.transform.scale(text,(200,100))
new2=pygame.transform.rotozoom(text,45,0.5)
windows.blit(new1,(300,100))
windows.blit(new2,(100,200))
##3.刷新显示页面
pygame.display.flip()##第一次刷新页面
##pygame.display.update()第一次以后的刷新
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()

在这里插入图片描述

动画原理

动画就是一帧一帧的图片连起来的,每一帧的图片差别很小,人的肉眼看着就是一个连贯的效果。

import pygame,sys
pygame.init()
WIN_WIDTH=600
WIN_HIGH=400
# #游戏窗口大小
windows=pygame.display.set_mode((WIN_WIDTH,WIN_HIGH))
pygame.display.set_caption("杨国平的小游戏")
windows.fill((255,255,255))
# #1.加载图片
# image1 = pygame.image.load("java3.jpg")
y = 100
r = 30
pygame.draw.circle(windows,(255,0,0),(150,y),r,1)
# windows.blit(image1,(0,0))
#3.刷新显示页面
pygame.display.flip()##第一次刷新页面
##pygame.display.update()第一次以后的刷新
num=0
d=0
y_speed=1
while True:
    num=num+1
    if num%1000==0:##让刷新速度慢下来
        pygame.draw.circle(windows,(255,255,255),(150,y),r,1)##将上一帧用白色边框的圆覆盖掉
        y=y+y_speed##控制移动
        if y>=WIN_HIGH-r:##碰到下边框速度就相反
           y_speed=y_speed*(-1)
        if y<=r:##碰到上边框速度就相反
            y_speed = y_speed * (-1)
        # r=r+1##控制缩放
        pygame.draw.circle(windows, (255, 0, 0), (150, y), r, 1)
        ##旋转动画
        # windows.fill((255, 255, 255))
        # d+=1
        # new_image=pygame.transform.rotozoom(image1,d,1)
        # windows.blit(new_image,(0,0))
        pygame.display.update()##第一次后的刷新页面
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()

事件检测

我做了两个案例,一个是监听键盘事件输出该按键的值,二是监听鼠标移动事件用随机颜色画圆。

import pygame,sys
from random import  randint
pygame.init()
WIN_WIDTH=600
WIN_HIGH=400
# #游戏窗口大小
windows=pygame.display.set_mode((WIN_WIDTH,WIN_HIGH))
pygame.display.set_caption("杨国平的小游戏")
windows.fill((255,255,255))
##1.获取字体对象
font=pygame.font.Font("C:\\Windows\\Fonts\\FZSTK.TTF",30)
pygame.display.flip()
x=0
while True:
    for event in pygame.event.get():
        # if event.type==pygame.MOUSEBUTTONDOWN:
        #     a = randint(0, 255)
        #     b = randint(0, 255)
        #     c=randint(0,255)
        #     x,y=event.pos
        #     pygame.draw.circle(windows,(a,b,c),(x,y),20,1)
        #     pygame.display.update()
        if event.type==pygame.MOUSEMOTION:##监听鼠标移动
            a = randint(0, 255)##产生随机颜色的三元组
            b = randint(0, 255)
            c=randint(0,255)
            x,y=event.pos##获取鼠标移动的坐标
            pygame.draw.circle(windows,(a,b,c),(x,y),20,0)##在获取的坐标上画圆
            pygame.display.update()
        if event.type==pygame.KEYDOWN:
            ##2.获取文字对象
            text = font.render(chr(event.key), True, (255, 0, 0), (255, 255, 0))  ##第三个参数是字体颜色,第四个参数是字体背景
            ##渲染
            windows.blit(text, (x, 0))
            x+=30
            pygame.display.update()
        if event.type==pygame.QUIT:
            sys.exit()

在这里插入图片描述

按钮点击

我做的案例是在规定范围里点击确定和取消,按钮会有不同的颜色变化!

import pygame,sys
pygame.init()
##游戏窗口大小
WIDTH=400
HIGH=600
windows=pygame.display.set_mode((WIDTH,HIGH))
pygame.display.set_caption("杨国平的小游戏")
##背景颜色填充
windows.fill((255,255,255))
pygame.display.flip()
font=pygame.font.Font("C:\\Windows\\Fonts\\FZSTK.TTF",30)
##画第一个确定按钮,在矩形上画确定
bx1,by1,bw,bh=30,100,100,50
pygame.draw.rect(windows,(255,0,0),(bx1,by1,bw,bh))
text1=font.render("确定",True,(255,255,255))
tw1,th1=text1.get_size()
tx1=bx1+bw/2-tw1/2
ty1=by1+bh/2-th1/2
windows.blit(text1,(tx1,ty1))
##画第二个按钮
bx2,by2=30,200
pygame.draw.rect(windows,(0,255,0),(bx2,by2,bw,bh))
text2=font.render("取消",True,(255,255,255))
tw2,th2=text1.get_size()
tx2=bx2+bw/2-tw2/2
ty2=by2+bh/2-th2/2
windows.blit(text2,(tx2,ty2))
pygame.display.update()
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
        if event.type==pygame.MOUSEBUTTONDOWN:##监听点击
            mx,my=event.pos
            if bx1 <= mx <=bx1 + bw and by1 <= my <= by1 + bh:##判断点击的位置
                pygame.draw.rect(windows,(200,200,200),(bx1,by1,bw,bh))##重新画一个灰色背景
                text1=font.render("确定",True,(255,255,255))##灰色背景写上字
                windows.blit(text1,(tx1,ty1))
                pygame.display.update()
            if bx2 <= mx <=bx2 + bw and by2 <= my <= by2 + bh:
                pygame.draw.rect(windows,(200,200,200),(bx2,by2,bw,bh))
                text2=font.render("取消",True,(255,255,255))
                windows.blit(text2,(tx2,ty2))
                pygame.display.update()
        if event.type==pygame.MOUSEBUTTONUP:##监听松鼠标
            mx, my = event.pos
            if bx1 <= mx <= bx1 + bw and by1 <= my <= by1 + bh:##判断送鼠标范围
                pygame.draw.rect(windows, (255, 0, 0), (bx1, by1, bw, bh))##再变回原来的颜色
                text1 = font.render("确定", True, (255, 255, 255))##再写上原来的字
                windows.blit(text1, (tx1, ty1))
                pygame.display.update()
            if bx2 <= mx <= bx2 + bw and by2 <= my <= by2 + bh:
                pygame.draw.rect(windows, (0, 255, 0), (bx2, by2, bw, bh))
                text2 = font.render("取消", True, (255, 255, 255))
                windows.blit(text2, (tx2, ty2))
                pygame.display.update()

在这里插入图片描述
点击按钮背景会变为灰色,一松开就变回原来的颜色!!

按住不放

这个案例是监听键盘wsad,也就是游戏里面上下左右键,然后游戏界面的箭头会更改,若按住鼠标不放,则会一直向该方向移动!!

import pygame,sys
pygame.init()
##游戏窗口大小
WIDTH=800
HIGH=1200
windows=pygame.display.set_mode((WIDTH,HIGH))
pygame.display.set_caption("杨国平的小游戏")
##背景颜色填充
windows.fill((255,255,255))
pygame.display.flip()
##先把上下左右的箭头图片加入到内存
upimg=pygame.image.load("上.png")
downimg=pygame.image.load("下.png")
leftimg=pygame.image.load("左.png")
rightimg=pygame.image.load("右.png")
##初始化为向上的箭头,及初始化坐标
defaultDirect=upimg
xInit,yInit=200,400
windows.blit(defaultDirect,(xInit,yInit))
pygame.display.flip()
is_move=False#是否移动
x_speed=0
y_speed=0
while True:
    if is_move:
        windows.fill((255,255,255))
        xInit+=x_speed
        yInit+=y_speed
        windows.blit(defaultDirect, (xInit, yInit))
        pygame.display.update()
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            sys.exit()
        if event.type==pygame.KEYDOWN:
           ch = chr(event.key)
           if ch == 'w':##监听按键是否为wsad,若是,则改为要移动,并且修改对应的图片,然后更改x_speed,y_speed的值,然后程序回到if is_move,则执行里面的内容,一直执行,一直将图渲染到windows,由于横纵坐标在变,于是位置就按按键方向走。
               is_move = True
               defaultDirect = upimg
               x_speed = 0
               y_speed = -1
           if ch == 's':
               is_move = True
               defaultDirect = downimg
               x_speed = 0
               y_speed = 1
           if ch == 'a':
               is_move = True
               defaultDirect = leftimg
               x_speed = -1
               y_speed = 0
           if ch == 'd':
               is_move = True
               defaultDirect = rightimg
               x_speed = 1
               y_speed = 0
        if event.type==pygame.KEYUP:
            is_move = False

在这里插入图片描述

【注】由于动画效果无法完全由截图表现,请自行运行代码查看效果,图片可找我要!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值