python没有pygame_「Python学习笔记」Pygame 使用简介 1

1 安装Pygame

24ece408727b86824c6086c6ff606c9b.png
53b1948d7471a83ffc4e298ace7221a9.png

Pygame并不是Python所附带的,需要下载安装,下载地址如下:

(注意要根据你的操作系统版本和Python版本进行选择,如我的是32位系统安装的是python3.7,所以我选择了pygame-1.9.6-cp37-cp37m-win32.whl)

https://pypi.org/project/pygame/#files

下载完毕后,

使用pip install命令进行安装。

安装完毕后,可以使用import pygame进行测试,出现如下提示,表示安装成功。

491acea6e6907b89f57305ff553819ef.png

pygame安装成功

2 Pygame中的Hello World

Pygame不能再交互式shell中工作,因此,我们只能编写Pygame程序,并且不能通过交互式shell每次给Pygame发送一条指令。

Pygame程序也不使用input()函数。这里没有文本输入和输出。相反,程序通过把图形和文本绘制到窗口,在一个窗口中显示输出内容。通过调用事件,Pygame程序接收来自键盘和鼠标的输入。

3 Hello World的源代码

在文件编辑器中输入如下代码(也可使用jupyer notebook或jupyter lab),并且把它保存为pygameHelloWorld.py。

5cab370ed5c477703d5041d1738ff2b9.png
53670f9832b600e4d0efda94b243d768.png

4 运行Hello World程序

当我们运行这个程序时,我们会看到一个新的窗口出现,如下图所示:

9e5feb65b1b5d07cc0329d608ccf3a38.png

使用窗口而不是控制台的好处就是,文本可以出现在窗口中的任意地方,而不是只能出现在之前已经打印的文本的后面。文本可以是任意的颜色和大小。窗口就像一块褐色的油画布,我们可以在上面绘制任何图形。

4.1 导入Pygame模块

导入pygame模块,便可在程序中调用pygame的函数。第二行代码导入了pygame.locals模块,这个模块包含了许多将要在Pygame中用到的常量。

如果在程序中使用的是from sys import *导入语句,而不是import sys导入语句,那么在代码中要使用exit()调用该函数,而不是使用sys.exit()。但是,在大多数时候,使用完整的函数名称会更好,因为这样可以知道函数是在哪个模块中。

4.2 pygame.init()函数

在导入pygame模块,并且在调用任何其他的Pygame函数之前,所有Pygame程序都必须先调用pygame.init()函数。这项工作是Pygame必须的初始化步骤。

5 字体和pygame.font.SysFont()函数

在使用控制台进行文本打印时,用于显示文本的颜色、大小和字体完全取决于操作系统设置。Python程序不能修改字体,但是Pygame可以以计算机上的任何字体来绘制文本。

Font对象的render()方法

3484e887e35aa5b384bfbf3973b8fb2e.png

存储在变量basicFont中的Font对象有一个叫做render()的方法。这个方法将返回一个Surface对象,文本就绘制于其上。render()的第一个i而参数是要绘制的文本的字符串。第2个参数是指是否要抗锯齿的一个Boolean值。

6 属性

392b261dc824096c17ce397e21562951.png

pygame.Rect数据类型(简称Rect)表示特定大小和位置的矩形区域。调用函数pygame.Rect()来创建一个新的Rect对象。参数是表示左上角的XY坐标的证书,后面跟随着宽度和高度,都是以像素为单位。

带有参数的这个函数看上去是这样的:pygame.Rect(left, top, width, height)。

就像方法是与对象相关的函数一样属性(attribute)是与对象相关的变量。Rect数据类型有许多属性,用来描述它所表示的矩形。下表为myRect的一个Rect对象的属性的列表。

47998f0f42f390ada16026580e70670e.png

7 Pygame的绘制函数

7.1 pygame.draw.polygon()函数

绘制多边形

2bdab0caf737c515e7dbe56956208203.png

pygame.draw.polygon()函数可以绘制你指定的任意的多边形。参数一次为:

  • 要在其上绘制多边形的Surface对象;
  • 多边形的颜色;
  • 由要依次绘制的点的XY坐标的元组所构成的一个元组。最后一个元组将自动连接到第一个元组以完成该形状;
  • 可选项,表示多边形边线条的狂赌的整数值。没有这个选项的话,多边形将会被填充。

7.2 pygame.draw.line()函数

绘制直线

319c710566f33900506b38bc5a14c2cb.png

参数依次是:

  • 要在其上绘制直线的Surface对象;
  • 直线的颜色;
  • 包含直线的一端的XY坐标的两个整数的一个元组;
  • 包含直线的另一端的XY坐标的两个整数的一个元组;
  • 可选项,表示线条的宽度的整数值。

7.3 pygame.draw.circle()函数

绘制圆形

b2c650364fdd0107aa9f34a345c8b364.png

参数依次如下:

  • 要在其上绘制直线的Surface对象;
  • 圆的颜色;
  • 表示圆心的XY坐标的两个整数的一个元组;
  • 表示圆的半径(也就是大小)的整数值;
  • 可选项。表示线的宽度的一个整数值。宽度值为0,表示填充圆。

7.4 pygame.draw.ellipse()函数

绘制椭圆

e0a1822a1040f22cce976b1eb30c1353.png

参数依次如下:

  • 要在其上绘制直线的Surface对象;
  • 椭圆的颜色;
  • 传递分别表示椭圆的左上角的X和Y坐标以及椭圆的宽和高的4个整数的一个元组;
  • 可选项。表示线的宽度的一个整数值。宽度值为0,表示填充椭圆。

7.5 pygame.draw.rect()函数

绘制矩形

8cb23ef671a79e6864c863cca8994706.png

pygame.draw.rect()函数将要绘制一个矩形。第3个参数是包含了表示矩形的左上角的X和Y坐标,以及矩形的宽和高的4个整数的一个元组。也可以给第3个参数传递一个Rect对象,而不是传递4个整数的一个元组。

7.6 pygame.PixelArray数据类型

7f29978863a9ac8bb7e23e9aa6f5a048.png

第48行创建了一个pygame.PixelArray对象。PixelArray对象是一个颜色元组的列表组成的一个列表,这些颜色元组表示传递给它的Surface对象。

第48行把windowSurface作为参数传递给pygame.PixelArray()函数调用,所以在第49行把BLACK分配给pixArray[480][380],将会把坐标为(480, 380)的像素改变为一个黑色像素。Pygame将这个改变自动更新到windowSurface对象。

PixelArray对象中的第一个索引是X坐标,第二个索引是Y坐标。PixelArray对象使得在一个PixelArray对象上将单独像素设置为特定颜色变得很容易。

第50行删除了PixelArray对象,这是因为从一个Surface对象创建PixelArray对象,将会锁定这个Surface对象。锁定意味着该Surface对象不能调用blit()函数。要解锁这个Surface对象,必须用del操作符PixeArray对象。如果忘记了删除PixelArray对象,机会得到一条错误信息:

pygame.error:Surfaces must not be locked during blit

7.7 pygame.display.update()函数

f3d90b3c65a779a63ecb3c7384fe3856.png

在Pygame中,在调用pygame.display.update()函数之前,并不会真的将任何内容绘制到屏幕上。这是因为在屏幕上绘制要比在计算机内存中的Surface对象上绘图慢。在每次调用了绘图函数之后,并不希望更新到屏幕上,只有在所有绘制函数都调用完后,才想要一次性更新屏幕。

8 事件和游戏循环

Pygame程序不断地运行叫做游戏循环(game loop)的一个循环。在这个程序中,游戏循环中的所有代码行每秒钟都会执行100次左右。

游戏循环是不断地查看新事件、更新窗口地状态并在屏幕上绘制窗口地一个循环。事件(event)是pygame.event.Event数据类型地对象,任何时候,当用户按下一个按键、点击或移动鼠标或使得其他一些其他事件发生地时候,Pygame都会创建该对象。

9647dfafe3c277241e0bf66c1df0a407.png

第59行是游戏循环的开始。把while语句的条件设置为True,所以它会永远循环。退出循环的唯一方式是,有一个事件导致了程序终止。

8.1 pygame.event.get()函数

b279d8721912a76dd91bdb7086024338.png

调用pygame.event.get()函数检索自从上次调用pygame.event.get()后所生成的任何新的pygame.event.Event对象。这些事件会以Event对象的一个列表的形式。所有Event对象都有一个叫做type的属性,它告诉我们事件是什么类型。

第60行有一个for循环,遍历了pygame.event.get()所返回的列表中的每一个Event对象。如果事件的type属性等于常量QUIT那么我们就知道用户已经关闭了窗口并且想要终止程序。

当用户点击程序窗口的关闭按钮时,Pygame创建了QUIT事件。如果关闭了计算机并尝试终止所有运行的程序,也会产生该事件。无论什么原因产生了QUIT事件,都应该终止程序。

8.2 pygame.quit()函数

26d201e43848d1d1dcf889ce519193c8.png

如果已经产生了QUIT事件,程序就应该调用pygame.quit()和sys.exit()。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值