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+1if 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+=30pygame.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.posif 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.posif 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_speedyInit+=y_speedwindows.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 = TruedefaultDirect = upimgx_speed = 0y_speed = -1if ch == 's':is_move = TruedefaultDirect = downimgx_speed = 0y_speed = 1if ch == 'a':is_move = TruedefaultDirect = leftimgx_speed = -1y_speed = 0if ch == 'd':is_move = TruedefaultDirect = rightimgx_speed = 1y_speed = 0if event.type==pygame.KEYUP:is_move = False

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

pygame的使用及进阶相关推荐

  1. python爬取小说章节信息用pygame进行数据显示_爬虫不过如此(python的Re 、Requests、BeautifulSoup 详细篇)...

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 爬虫的本质就是一段自动抓取互联网信息的程序,从网络获取 ...

  2. python3 用pygame 简单建一个飞船模型

    本文所用到的ship.bmp和alien.bmp的下载   链接: https://pan.baidu.com/s/1Dn5yaQGZLIsN0BohM8PzoA  密码: 38ie 第一部分:认识p ...

  3. 飞船向上飞pygame用k_up_十分钟就能用Python教你开发出一个迷你打飞机的游戏

    Python是一门非常简单的语言,快速入门之后可以做很多事情!比如爬虫啊,数据分析啊,自动化运维啊,机器学习,量化分析等等! 但是入门到进阶的过程有时会非常痛苦,如果有一些好玩有趣的例子就好了.比如通 ...

  4. 从入门到进阶,Python程序员必看的6本书籍!

    前言 入门容易.薪水高是人们学习Python的动力,而理论知识和实践经验是高薪的先决条件.如何快速学习 Python 技术拿高薪?有的人选择参加培训,一步到位,有的人因为时间和经济因素选择自学.不过学 ...

  5. 大爽pygame入门教程 第一节 基础知识

    作者自我介绍:大爽歌, b站小UP主 ,编程1对1辅导老师 本节掌握要点: 文本, 图形, 键鼠事件,动态展示. 一.实现基础窗口 0 - 新建文件 新建001.py文件,内容如下 import py ...

  6. 年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库

    我是 环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环 ...

  7. pygame 图像--键盘上下左右

    将图像初始在窗口中心位置, 不然就会初始在左上角 # 初始窗口中心 ship_rect.center = screen_rect.center 监控键盘 上下左右 import sys import ...

  8. python进阶版《植物大战僵尸》

    欢迎加入我们卧虎藏龙的python讨论qq群:996113038 还记得公众号之前推过的简单版植物大战僵尸吗 戳我回顾 那个时候啊 我们只有豌豆和向日葵 连僵尸都只有最简单的僵尸 就像是没充钱的玩家 ...

  9. Python进阶的好途径——游戏开发

    "人生苦短,我用Python".这句戏言真实反映了Python语言的江湖地位.那么,要快速上手和进阶Python编程,有什么好途径呢?我推荐游戏开发. 游戏开发激发学习热情 作为一 ...

最新文章

  1. 【419天】跃迁之路——程序员高效学习方法论探索系列(实验阶段176-2018.03.31)...
  2. java中ThreadPool的介绍和使用
  3. Java中带标签的break,continue
  4. 实战课堂:为什么更换存储之后一切正常但RAC集群启动不了?
  5. Java尖刀系列3:堆
  6. php 三菱plc,三菱plc编程
  7. extremecomponents相关大全
  8. 理解PPAPI的设计
  9. Rush Leetcode
  10. 深究embedding层
  11. linux判断三个数大小程序,几个shell程序设计小知识(shell常识部分)
  12. Python3.6安装PyQt5的方法
  13. 【Scala-spark.mlib】分布式矩阵——分布式计算的基石与利器
  14. 【TP5.1】商品列表加载
  15. l05173芯片针脚图_汽车常见易损芯片
  16. 使用少量数据去除神经网络中的水印 -- WILD
  17. 3DMAX如何打开mat文件
  18. html+css+javascript代码编程规范之CSS
  19. 如何用MASM5.0
  20. 利用ArcCatalog建立Geodatabse空间数据库

热门文章

  1. 解决关于 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 异常的原因
  2. sample markdown
  3. 机器学习~从入门到精通(一)knn算法数据集处理训练模型
  4. 紫影龙的编程日记 —— 字符串处理技术
  5. mysql 二级索引
  6. 实现一个迷你版的RPC
  7. 3.1、PHP面向对象简单介绍
  8. NOIP2012 开车旅行
  9. iphone手写签名设置_如何更改“从我的iPhone发送”签名和其他邮件设置
  10. java使用多线程导出excel