从这篇文章开始,就开始编写这个小游戏了,可能有人会问,作为面向零基础的人的入门文章,刚开始就编写游戏是不是太着急了,是不是先讲一些加减乘除,顺序结构、选择结构、循环结构之类的东西(基础知识),然后再编写游戏比较好。
我是这样计划的,就是在解释游戏代码的过程中,遇到什么基础知识,就停下来讲什么基础知识,这样这些基础知识就显得不那么枯燥。不管怎么说,我觉得零基础的人应该是能看懂接下来的内容的,不妨试试。
顺便说一句,这个游戏的代码,是我从Python Crash Course这本书里看来的。
好,正式开始写游戏的程序了,我们在C:\Users\Administrator\下面新建一个文件夹,取名叫做“chengxudaima”(程序代码-_-b),然后使用Sublime新建一个文件,保存在这个文件夹中,文件名叫做youxi.py。在这个程序文件中,敲进以下这些代码:
一共有15行,代码其实一共就9行。
图片不好的地方是没办法复制粘贴代码,访问这里(这个网站叫做Github)有一个可以复制粘贴的版本。
顺便说两句Github,Github其实就相当于百度网盘,嗯,好吧,高级百度网盘。Github还有一个和它关系最密切的软件,叫做git,我计划在之后写一些介绍git的文章。
哦,对了,为了让程序可以顺利运行,还需要在 chengxudaima 这个文件夹下面放一个名字叫做“jiantou.bmp”的图片,图片的内容就是一个箭头-_-b,是拿来做飞船用的:
可以自己用Windows自带的画图软件画一个就OK了,注意不能画太大,拖动画布大小,设定成120乘100左右比较好。注意下图的红色方框,显示的就是画布的大小,也就是保存出来的图片的大小:
如果直接运行现在这个程序的话(py youxi.py),屏幕上会出现这样一个窗口一闪而过:
也就是说这个窗口闪现一下,然后自己又立刻关闭了。后面会讲怎么不让这个窗口关掉(还会讲怎么控制这个“飞船”移动,怎么让飞船发射子弹,等等)。
接下来我们就来从头解释一下前面的9行程序都是什么意思。
第一行
import pygame
就是说要引入pygame这个东西(import是导入的意思),类似于“计算机编程入门之一”里面最后那一段说的那样,你想要使用变量a,就要先敲一下 a = 1,如果没有这么做,比如直接敲字母c,那么python会告诉你c还没有定义呢,如下图:
就像上图中的一样,直接输入c然后回车,会提示“name 'c' is not defined”,意思就是c还没有定义过。
同样的,如果上来直接就使用pygame这个名称的话,程序也会报错,说pygame这个名字还没有定义呢。需要先有这个第一行,把pygame这个名称引入进来,然后后面才能正常使用这个名称。你可以试着删除掉这个第一行“import pygame”,然后运行一下程序(py youxi.py),看一下报的错。
其实也可以我们自己定义一些名称,然后把它import(引入)进来,后面会讲到怎么做这件事。
好,接下来是第二行,
pygame.init()
这里立刻就用到了刚才引入的pygame这个东西,后面加了.init(),注意那个点,我们来仔细解释一下它。
现代的主流编程语言基本都有这个东西,就是一个名称(一个“东西”)是可以“点”的,比如说假设我有一个名称(一个“东西”)叫做liudehua(刘德华-_-b),那么liudehua.height得到的结果就是刘德华的身高,liudehua.birthday得到的就是刘德华的生日,liudehua.company得到的就是刘德华所在的公司。
再比方说刘德华的妻子叫做朱丽倩,那么liudehua.wife就是朱丽倩,liudehua.wife.birthday得到的就是朱丽倩的生日,等等。
再比方说刘德华可以唱歌,我们请刘德华唱一首“忘情水”把,那么就是liudehua.sing("wangqingshui"),这句运行之后,(比方说)屏幕上就可以打印出忘情水的歌词。
“点”后面可以接的东西一共有两种,一种是不带括号的,一种是带括号的,不带括号的叫做变量,带括号的叫做函数,变量返回的是某个值(比如刘德华的身高,体重,生日等等),而函数是去做某一件事,比如唱歌。
带了括号,就可以往括号里面写东西了,比如我不想听忘情水了,我想听另一首叫做“中国人”的歌,好,那就liudehua.sing("zhongguoren"),这样(比方说)屏幕上就打印出中国人的歌词。
后面会讲到怎么来生成属于你自己的可以“点”的东西。
回到刚才的这一行:
pygame.init()
这个.init()就是一个函数,init是初始化的意思,这句的意思就是我要开始运行游戏了,pygame你先准备一下,检查一下你所在的这台电脑。当然好像网上也有人说即使不写这句,后面的代码其实也能正常运行,不过还是强烈建议把这句写上。
下一行:
screen = pygame.display.set_mode((1000, 400))
这行的意思就是造出一个1000乘400的显示窗口出来,未来游戏就会在这个显示窗口里面出现,pygame.display.set_mode就类似于前面的liudehua.wife.birthday。当然set_mode是一个函数,参数是(1000, 400)。
下一行:
feichuan_image = pygame.image.load('jiantou.bmp')
就是把刚才画好的箭头图片'jiantou.bmp'读进来,放到变量feichuan_image(飞船图像)里面(假设这个箭头就是一艘飞船,以后还会发射子弹),
接下来:
feichuan_rect = feichuan_image.get_rect()
rect是长方形的意思,get_rect()就获得了这个“飞船图像”的“长方形”,储存在等号左边的feichuan_rect里面,这个长方形有什么用呢,看下面几行就知道了:
feichuan_rect.centerx = 270
这是把这个“长方形”的centerx(也就是中心点的x值)定为270,前面说了,窗口是1000乘400,所以总的x是1000,270也就是1000的27%,就是在中间偏左一点的位置。就像下面这幅图表示的:
图1下一句:
print(feichuan_rect)
是在控制台(黑色的框)里打出一些数据,我们先不管它,看下一句:
screen.blit(feichuan_image, feichuan_rect)
blit()这个函数带了2个参数,用逗号分开,feichuan_image在第7行定义了,就是飞船的图片,feichuan_rect在第8行定义了,又在第9行做了一点修改,就是飞船的“长方形”。
所以screen.blit(feichuan_image, feichuan_rect)这句的意思就是把飞船的图片“画到”飞船的长方形所定义的那个位置上去,飞船长方形的x值已经被你定义成270了,所以飞船就被画到了前面图1所在的位置。
最后一句:
pygame.display.flip()
是必须写的,写了这一句,前面所有的你“画”的东西才能被显示出来。
现在不好的地方是运行这个程序的时候窗口就出现了大概1秒钟,然后立刻就关掉了,下一篇文章我们讲怎么让窗口能不关掉。
网友评论