美文网首页
用Python和Pygame写游戏-从入门到精通(1)

用Python和Pygame写游戏-从入门到精通(1)

作者: 志者不俗 | 来源:发表于2019-06-13 19:56 被阅读0次

    用Python和Pygame写游戏-从入门到精通

    博客刚开,打算做一个Pygame的系列,翻译自Will McGugan的《Beginning Game Development with Python and Pygame –From Novice to Professional》,有兴趣的朋友可以搜一下,有英文版的PDF可以下载。其实也不是翻译,把精华摘出来,共同学习。

    看这个系列需要有Python的基础知识,虽然一开始想写一篇Python概要的,实在是很庞杂,而且有那么多好的Python基础教程,自己就不多插一脚了吧。入门的话,有Python入门,详尽的话,可以看看Python核心编程或者Python编程金典,然后IBM上的“可爱的Python”系列也很不错,可以扩展一下思维。

    OK,让我们开始吧~

    Pygame的历史

    Pygame是一个利用SDL库的写就的游戏库,SDL呢,全名Simple DirectMedia Layer,是一位叫做Sam Lantinga的大牛写的,据说他为了让Loki(致力于向Linux上移植Windows的游戏的一家大好人公司,可惜已经倒闭,唉好人不长命啊……)更有效的工作,创造了这个东东。

    SDL是用C写的,不过它也可以使用C++进行开发,当然还有很多其它的语言,Pygame就是Python中使用它的一个库。Pygame已经存在很多时间了,许多优秀的程序员加入其中,把Pygame做得越来越好。

    安装Pygame

    你可以从www.pygame.org下载Pygame,选择合适你的操作系统和合适的版本,然后安装就可以了(什么,你连Python都没有?您可能是不适合看这个系列了,不过如果执意要学,很好!快去www.python.org下载吧!)。 一旦你安装好,你可以用下面的方法确认下有没有安装成功:

    Python

    import pygame

    print pygame.ver

    1.9.1release

    你的版本可能和我不同,这没关系。我所翻译的这本书上的版本还是1.7.1的……所以如果有些过时的不合时宜的东西,千万不要客气请指出来!

    若说为什么要介绍这么一个“过时”的东西,真正的知识是不会过时的,只有技术才会。这里主要是依靠Pygame来介绍的游戏开发的方方面面,并不是说咱就可以靠这个做出什么伟大的游戏了(当然也不是说不可以)!

    另外说一下,就产品而言,Pygame更致力于2D游戏的开发,也就是说,你可以用Pygame写一个植物大战僵尸,但是写一个魔兽世界则相当困难……请不要做出鄙夷的目光,底层的东西永远是相通的,而且对于新手而言,从简单的2D入手才是正途。

    使用Pygame

    Pygame有很多的模块,下面是一张一览表:

    模块名功能

    pygame.cdrom访问光驱

    pygame.cursors加载光标

    pygame.display访问显示设备

    pygame.draw绘制形状、线和点

    pygame.event管理事件

    pygame.font使用字体

    pygame.image加载和存储图片

    pygame.joystick使用游戏手柄或者 类似的东西

    pygame.key读取键盘按键

    pygame.mixer声音

    pygame.mouse鼠标

    pygame.movie播放视频

    pygame.music播放音频

    pygame.overlay访问高级视频叠加

    pygame就是我们在学的这个东西了……

    pygame.rect管理矩形区域

    pygame.sndarray操作声音数据

    pygame.sprite操作移动图像

    pygame.surface管理图像和屏幕

    pygame.surfarray管理点阵图像数据

    pygame.time管理时间和帧信息

    pygame.transform缩放和移动图像

    有些模块可能在某些平台上不存在,你可以用None来测试一下。

    Python

    if pygame.font is None:

    print "The font module is not available!"

    exit()

    新的Hello World

    学程序一开始我们总会写一个Hello world程序,但那只是在屏幕上写了两个字,现在我们来点更帅的!写好以后会是这样的效果:

    Python

    #!/usr/bin/env python

    background_image_filename = 'sushiplate.jpg'

    mouse_image_filename = 'fugu.png'

    #指定图像文件名称

    import pygame

    #导入pygame库

    from pygame.locals import *

    #导入一些常用的函数和常量

    from sys import exit

    #向sys模块借一个exit函数用来退出程序

    pygame.init()

    #初始化pygame,为使用硬件做准备

    screen = pygame.display.set_mode((640, 480), 0, 32)

    #创建了一个窗口

    pygame.display.set_caption("Hello, World!")

    #设置窗口标题

    background = pygame.image.load(background_image_filename).convert()

    mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()

    #加载并转换图像

    while True:

    #游戏主循环

     for event in pygame.event.get():

     if event.type == QUIT:

     接收到退出事件后退出程序

     exit()

    screen.blit(background, (0,0))

        #将背景图画上去

        x, y = pygame.mouse.get_pos()

        #获得鼠标位置

        x-= mouse_cursor.get_width() / 2

        y-= mouse_cursor.get_height() / 2

        #计算光标的左上角位置

        screen.blit(mouse_cursor, (x, y))

        #把光标画上去

        pygame.display.update()

        #刷新一下画面

    这个程序需要两张图片,你可以在这篇文章最后的地方找到下载地址,虽然你也可以随便找两张。为了达到最佳效果,背景的 sushiplate.jpg应要有640×480的分辨率,而光标的fugu.png大约应为80×80,而且要有Alpha通道(如果你不知道这是 什么,还是下载吧……)。

    注意:代码中的注释我使用的是中文,如果执行报错,可以直接删除。

    游戏中我已经为每一行写了注释,另外如果打算学习,强烈建议自己动手输入一遍而不是复制粘贴!

    稍微讲解一下比较重要的几个部分:

    set_mode会返回一个Surface对象,代表了在桌面上出现的那个窗口,三个参数第一个为元祖,代表分 辨率(必须);第二个是一个标志位,具体意思见下表,如果不用什么特性,就指定0;第三个为色深。

    标志位功能

    FULLSCREEN创建一个全屏窗口

    DOUBLEBUF创建一个“双缓冲”窗口,建议在HWSURFACE或者OPENGL时使用

    HWSURFACE创建一个硬件加速的窗口,必须和FULLSCREEN同时使用

    OPENGL创建一个OPENGL渲染的窗口

    RESIZABLE创建一个可以改变大小的窗口

    NOFRAME创建一个没有边框的窗口

    convert函数是将图像数据都转化为Surface对象,每次加载完图像以后就应该做这件事件(事实上因为 它太常用了,如果你不写pygame也会帮你做);convert_alpha相比convert,保留了Alpha 通道信息(可以简单理解为透明的部分),这样我们的光标才可以是不规则的形状。

    游戏的主循环是一个无限循环,直到用户跳出。在这个主循环里做的事情就是不停地画背景和更新光标位置,虽然背景是不动的,我们还是需要每次都画它, 否则鼠标覆盖过的位置就不能恢复正常了。

    blit是个重要函数,第一个参数为一个Surface对象,第二个为左上角位置。画完以后一定记得用update更新一下,否则画面一片漆黑。

    这是一个最最大概的Pygame程序的印象,接下来我们会学习更多深层次的东西,并且把各条语句都真正读懂。

    相关文章

      网友评论

          本文标题:用Python和Pygame写游戏-从入门到精通(1)

          本文链接:https://www.haomeiwen.com/subject/sdsefctx.html