用Python和Pygame写游戏-从入门到精通(1)
From: http://eyehere.net/2011/python-pygame-novice-professional-1/
博客刚开,打算做一个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下载吧!)。 一旦你安装好,你可以用下面的方法确认下有没有安装成功:
1
2
3
|
>>> 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来测试一下。
1
2
3
|
if pygame.font is None :
print "The font module is not available!"
exit()
|
新的Hello World
学程序一开始我们总会写一个Hello world程序,但那只是在屏幕上写了两个字,现在我们来点更帅的!写好以后会是这样的效果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#!/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写游戏-从入门到精通(2)
本次使用的两张图片资源:
背景:sushiplate.jpg
光标:fugu.png
Related Posts
- 用Python和Pygame写游戏-从入门到精通(3)
- 用Python和Pygame写游戏-从入门到精通(8)
- 用Python和Pygame写游戏-从入门到精通(11)
- 用Python和Pygame写游戏-从入门到精通(4)
- 用Python和Pygame写游戏-从入门到精通(6)
- 用Python和Pygame写游戏-从入门到精通(10)
- 用Python和Pygame写游戏-从入门到精通(5)
- 用Python和Pygame写游戏-从入门到精通(2)
Random Posts
- 用Python和Pygame写游戏-从入门到精通(3)
- 教你如何在AdMob上日进斗金
- 用Python和Pygame写游戏-从入门到精通(10)
- 那些空格引发的血案
- 看轻音,学日语(5)
- 浏览器上的60FPS愤怒的小鸟
- 用Python和Pygame写游戏-从入门到精通(实战一:涂鸦画板1)
- 用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块1)
用Python和Pygame写游戏-从入门到精通(1)相关推荐
- python教程是用什么博客写的-用Python和Pygame写游戏-从入门到精通(目录)
目光博客一开始,就有一个将pygame好好介绍一遍的宏伟计划,历时四个月,在各位朋友的关怀鞭策下,如今(2011/8/26)理论学习的部分似乎已经都完成了,在次列一个目录,方便查询.介绍还不是很全,下 ...
- python游戏开发框架_用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块1)...
游戏是为了什么而存在的?Bingo,是为了娱乐~ 在这个最高主题之前,技术啥的什么都无所谓! 前一段时间,有位姓刘的网友用Pygame写了个俄罗斯方块,在用py2exe打包的时候遇到一些问题,和我交流 ...
- 用Python和Pygame写游戏-从入门到精通
博客刚开,打算做一个Pygame的系列,翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novi ...
- python用户界面游戏_用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块2)...
我们接着来做这个整死人不偿命的俄罗斯方块. 代码组织和名词约定 上一次我们稍微整理了一下游戏运行的框架,这里需要整理一下python代码的框架,一个典型的pygame脚本结构如下: 其中,lib为py ...
- 用python和pygame写游戏_用Python和Pygame写游戏-从入门到精通(6)
掌握了小小的像素,我们可以使用更加复杂一点的东西了,对,就是图像,无数的像素的集合~还记得上次我们为了生成的一张图片,花了无数时间,还好一般游戏不会在游戏的过程中动态生成图像,都是将画好的作为资源封装 ...
- python游戏代码示例_用Python和Pygame写游戏-从入门到精通(Sprite篇)
这又是Pygame教程系列的一个--OVA篇,类似于py2exe篇一样,额外写的,也许不是pygame游戏开发必须的东西,但是知道了绝对大有裨益.因此友情大放送~ 看pygame模块介绍的时候,细心的 ...
- 用Python和Pygame写游戏-从入门到精通(16)
经历了长年的艰苦卓绝的披星戴月的惨绝人寰的跋山涉水,我们终于接近了AI之旅的尾声(好吧,实际上我们这才是刚刚开始).这一次真正展示一下这几回辛勤工作的结果,最后的画面会是这个样子: 下面给出完整代码( ...
- 用Python和Pygame写游戏-从入门到精通(6)学习笔记
虽然是基础,这里还是要罗嗦一下,之前说的RBG图像,在游戏中我们往往使用RGBA图像,这个A是alpha,也就是表示透明度的部分,值也是0~255,0代表完全透明,255是完全不透明,而像100这样的 ...
- python编写赛车游戏单机版_用Python和Pygame写游戏-从入门到精通(20)
声音是游戏中必要的元素之一,音效可以给予用户良好的反馈体验.赛车的时候可以听到振奋人心的启动时的引擎声和刹车时轮胎摩擦声,射击游戏中枪支弹药的音效和呐喊助威的嗓音,无一不是让人热血沸腾的要因. 宛若电 ...
最新文章
- CS131-专题7:图像特征(SIFT算法)
- Windows DDK介绍,选择和安装
- 【LeetCode OJ】Same Tree
- 面试官:说说Kafka处理请求的全流程
- 国拨经费约31.48亿!科技部发布科技创新2030 —“脑科学与类脑研究”重大项目2021年度项目申报指南
- springboot怎么替代jsp_如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧...
- 云计算被视为继计算机,8+第八章+计算机网络技术分析.ppt
- 科技领袖技术大亨们被指是现代强盗:不仅赚钱还想垄断
- java生成docx_用java新建一系列文件.docx
- 英伟达新研究:“狗生猫,猫生万物”的多模态无监督图像转换
- Javascript: IE中命名函数直接量的Bug?
- C语言计算器详细教程(四则运算、小数、括号)
- 【十次方】Springboot中使用Redis做缓存
- Ubuntu16.04桌面版pxe启动实现自动安装
- iOS调用手机振动和铃声
- BACnet/IP网关如何采集楼宇集中控制系统数据
- 错误集锦:在安装docker的时候,发现无法安装(没有可用软件包 docker-ce。 错误:无须任何处理)
- Mac Outlook左侧文件夹不见了,怎么处理?
- 计算机考研2018大纲,2018计算机考研大纲原文.pdf
- java面试专题(商城面试问题)
热门文章
- power bi函数_在Power BI中的行上使用聚合函数
- leetcode 746. 使用最小花费爬楼梯(dp)
- leetcode336. 回文对(字典树)
- sphinx 项目根目录_如何使用Sphinx工具记录Django项目
- linux:使用python脚本监控某个进程是否存在(不使用crontab)
- Andrew Ng机器学习(一):线性回归
- 2017.9.15 postgresql批量插入造成冲突后执行更新
- centos 7.0防火墙导致vagrant端口映射失败
- MySql的用户权限
- RESTful API 设计指南 (转)