首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

零基础Python原型编程03

上节课我介绍了如何用Python编写第一个程序——在屏幕上显示“Hello World!”文本。通过完成这个简单的程序,大家应该对用Python生成图形界面的过程有了一定的了解。不过,只显示一行文字实在没什么意思,接下来的两节课我将教大家如何用Python绘制基础图形,并在此基础上创建一个简单的屏幕保护界面。

1. 基础程序

首先让我们回顾一下Pygame的基础程序,它几乎出现在每一个Pygame程序中:

import pygame,sys

from pygame.locals import*

pygame.init()

(全局变量声明及初始化)

while True:

if event.type in (QUIT, KEYDOWN):

sys.exit()

(功能程序)

前四行代码用于初始化pygame并创建窗口(上节课已经讲过了),在这部分程序之后,通常是一组全局变量的声明(或者说全局变量的“定义”)。上节课我说过“赋值”是给一个值命名的过程,这个“名字”其实就是所谓的“变量(名)”。而“初始化”就是给还没有值的变量一个值。因此,“赋值”和“初始化”的本质是相同的——都是将“值”和“名字”绑定起来。当然,后者多了一层“开始”的意思。

知识点:全局变量与局部变量

“全局变量”是相对于“局部变量”来说的,顾名思义,前者的有效范围要大于后者。全局变量的有效范围是整个程序,如果你定义了一个“blue”变量表示颜色“0,0,255”,那么无论程序运行到函数中还是循环内,只要你使用“blue”就会获得值“0,0,255”。

局部变量则不同,如果你在某个函数中定义了一个变量“red”,那么只有此函数中的代码能使用这个变量,而在其他代码中“red”这个名字是没有意义的。

关于全局变量和局部变量,你可以这样理解:全局变量是WiFi,在哪个屋子都可以用;局部变量是电视,在客厅可以看,换个屋子就不行了。

这里需要注意的是,全局变量的初始化应该放在游戏循环(即“While True”)之前——否则每次循环都将重置这些变量。通常这是不应该的(因为我们希望这些变量帮助我们“记住”一些值的改变结果),除非你真的希望它们在每次循环中都刷新。

循环一开始是一个“按键即退出”的设置,在这里我们还是先不管它。之后就是实现我们需求功能的程序,最后一行命令将输出内容更新到显示屏上。

在之后的课程中,以上程序的大框架是不变的,我便不会再反复讨论。全局变量的初始化部分我称为“初始化部分”,“While True”循环中的部分,我称为“游戏循环”,尤指上述“功能程序”部分。

2. 画一个圆

Pygame提供了强大的工具包,使得绘制基础图形变得非常容易。比如,想绘制一个圆,你只需要在游戏循环中加入一行程序,它的格式如下:

这些参数的示意图如下:

在初始化部分,我们可以定义一些变量:

yellow=255,255,0#黄色

position=300,250#圆心坐标 x=300,y=250

radius=100#半径设为100

width=10#边框线宽设为10

然后,我们就可以在游戏循环中加入如下程序,它会在名为screen的窗口中距左边框300,距上边框250的位置绘制一个半径为100的黄色圆圈,宽为10(注:线宽为0时表示绘制一个实心圆)。

screen.fill((0,0,200))#绘制背景

可以看到,在画圆前我还插入了一行程序,它表示“用(0,0,200)这个颜色填满名为“screen”的窗口”。这其实是在绘制屏幕的“背景”,因此上面的程序是在蓝色的背景上画了一个黄色的圆圈。此处要注意的是,代码是逐行执行的,也就是说下面代码绘制的图案会覆盖上面代码的图案。因此,必须先画背景,否则圆就会因被背景盖住而显示不出来了。

运行程序(如何运行程序的相关步骤见上节课),结果如下图所示。

知识点:坐标系

Pygame中的“位置”是用坐标表示的,如(300,200),单位是“像素”。Pygame的坐标系与我们熟悉的四象限坐标系不同,它的原点是屏幕的左上角,横坐标向屏幕右侧不断增大,而纵坐标向屏幕下方逐渐增大(如下图所示)。因此,(0,0)表示屏幕左上顶点,(300,200)则表示距离屏幕左边界300像素,距离屏幕上边界200像素的点。

技巧1:变量 or 值?

当然,此例中我们完全可以使用数值来替换变量(代码如下),并得到相同的显示结果。

使用变量还是数值完全是个人的选择。不过,变量的好处是,当你在初始化部分定义了一个全局变量(如yellow),那么你在后续图形中都可以直接使用yellow来给出相应的颜色值,这比每次绘图都要回忆并输入表示黄色的三个数字要方便多了。因此,对于要反复使用的值,建议使用变量,而对于很少使用的值,直接把值填上去就可以了。另外,变量的设置是很灵活的。它可以代替一个“数字组”(如yellow=255,255,0),也可以仅代表其中一个数字。比如我们先定义了a=255,那么在绘制圆时用“(a,a,0)”表示颜色也是可以。

技巧2:变量命名

变量的命名也是很讲究的。通常我们使用一组小写字母或数字来表示一个变量(如“abc123”),同时允许加入下划线(如“abc_123”)。在命名时,一定要注意这个名字要能够清晰地反映出变量的意义。此处推荐使用完整的单词,比如用“yellow”表示黄色,“car”表示小汽车等等。对于相似的物体,比如红车、黄车,我们使用下划线隔开两个单词——如“red_car”和“yellow_car”。如果红车有两辆,我们可以再加入数字,如“red_car1”、“red_car2”。

后面讲函数时我也会说到,函数名也应该使用与函数作用相关的单词来命名。比如,用来移动物体的函数,我们使用“move”作为函数名,而苹果我们使用“apple”作为变量名。如此一来,“移动苹果”的代码就成了“move(apple)”——阅读代码就像阅读英文句子一样顺畅——无论是写代码还是读代码,这都是非常有帮助的。

记住,千万不要因为觉得输入麻烦就给变量一个毫无意义的名字。随着程序越来越复杂,我们可能要面对几十甚至几百个变量,到时候你根本就分不清“abc”代表什么,“t12”又代表什么——到那时你反复确认变量名的时间将远远大于你多敲几个字母的时间。同时,好的变量名也让他人更容易且更快速地理解你的代码。因此,一定要在一开始就养成好的命名习惯——这既是对自己的负责,也是对他人的负责。

好了,关于变量就讨论这么多。为了节省篇幅,在本节后续部分及下节课中,我将直接使用数值来绘制图形。但请记住,无论何时,你都可以在初始化部分定义一些全局变量,并在绘图时调用它们。

3. 画一个矩形 / 正方形

绘制矩形的命令格式和参数示意图如下:

第三个参数包含四个数字,前两个数字表示横纵坐标,第三个数字表示矩形的宽(即水平方向的长度),第四个数字表述矩形的高(即垂直方向的长度)。因此,如果你想在(300,250)的位置画一个宽200,高100,边框宽10的黄色矩形,可以用下面的程序:

运行程序,会得到如下显示:

与圆同理,边框宽度为0时绘制的是实心矩形。另外,如果你想画一个正方形,只要把宽和高设为相等的值就可以了。

本节课我讨论了圆和矩形的绘制方法,并介绍了变量和坐标系的相关知识及技巧。下一节课我们来看看如何用Python绘制直线与弧线。

(本文为原创文章,欢迎分享,转载请与作者联系,谢谢!)

如果你在学习中遇到了问题,欢迎留言讨论~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180920G1YNZT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券