翻译自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

2

3

>>>importpygame

>>>printpygame.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()

1

2

3

ifpygame.fontisNone:

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()

#刷新一下画面

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'

#指定图像文件名称

importpygame

#导入pygame库

frompygame.localsimport*

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

fromsysimportexit

#向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()

#加载并转换图像

whileTrue:

#游戏主循环

foreventinpygame.event.get():

ifevent.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. python七彩同心圆_用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏---七彩同心圆 用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便 ...

  2. python经典教程游戏_使用pygame制作经典小游戏:五子棋

    准备 python基础相关准备: pygame的基础知识,参考目光博客的"用Python和Pygame写游戏-从入门到精通" 安装python 3.8.0 在python官网下载, ...

  3. cmd小游戏_使用pygame制作Flappy bird小游戏

    原文链接: [Python]使用Pygame做一个Flappy bird小游戏(一)​mp.weixin.qq.com 最近看到很多大佬用强化学习玩Flappy bird.所以打算也上手玩一玩,但是苦 ...

  4. 用74l138实现一个一位全减器_用pygame实现一个简单的五子棋游戏

    准备 python基础相关准备: pygame的基础知识,参考目光博客的"用Python和Pygame写游戏-从入门到精通" 安装python 3.8.0 在python官网下载, ...

  5. python拼图游戏_Python加pyGame实现的简单拼图游戏实例

    import pygame, sys, random from pygame.locals import * # 一些常量 WINDOWWIDTH = 500 WINDOWHEIGHT = 500 B ...

  6. python编程制作接金币游戏_pygame学习笔记(6):完成一个简单的游戏

    学了这么长时间的Pygame,一直想写个游戏实战一下.看起来很简单的游戏,写其来怎么这么难.最初想写个俄罗斯方块,想了很长时间如何实现,想来想去,也没写出来,于是干脆下载别人的代码来读.后来,要想写一 ...

  7. rust如何在木板上上传图片_通过编写一个简单的游戏来学习 Rust | Linux 中国

    导读:你可以尝试以多种语言编程一个简单的游戏来开始编程之路. 本文字数:4068,阅读时长大约: 5分钟 https://linux.cn/article-12979-1.html 作者:Moshe ...

  8. 用python 编写一个简单的游戏

    This blog will memory my work and process with the interesting skill. 用python 编写一个简单的游戏 这是一个非常简单的游戏, ...

  9. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

最新文章

  1. java8中的函数式数据处理
  2. [Hadoop in China 2011] HBase在淘宝平台上的应用和改进经验
  3. 网络爬虫中Jsoup请求url
  4. 图书管理系统详细设计说明书_书城管理系统不同模块在图书管理中体现不同作用...
  5. 武汉加油!武大本科生用Python敲出樱花绽放,满屏春天太浪漫
  6. 【算法】Huffman编码(数据结构+算法)
  7. LA 6538 Dinner Coming Soon DP
  8. CenturyLink设定NG-PON2部署阶段 业务、无线回程为初始服务目标
  9. idea全局主题_IntelliJ IDEA好看的主题设置(支持自定义)
  10. 最详细教学--实现win10 多用户同时远程登录内网机--win10+frp+rdpwrap+阿里云服务器
  11. 二分法求函数的解(函数零点)
  12. 录制软件Bandicam安装教程
  13. 浙江大学-机器学习-ppt截图
  14. Data URL实现用户头像上传
  15. 如何打造高绩效的研发团队
  16. USACO 1.4 Mother's Milk 母亲的牛奶(经典的dfs倒水问题)
  17. MapGuide开发手记(一)安装Mapguide与示例程序
  18. 爬虫网易云音乐,热评,词云,prettytable。
  19. Linux目录与管理
  20. 去中心化身份一般见解

热门文章

  1. Flink Operator之CoGroup、Join以及Connect
  2. 大一新生开发的小工具火了!不一样的 Python 编程体验,还是可视化的那种
  3. 统计学最全脑图,你只管打开它,剩下的交给「卧槽」
  4. shiny html5代码,javascript – Shiny:如何正确包含Shiny HTML
  5. android压缩图片不失真,Android压缩图片到100K以下并保持不失真的高效方法 - feicien的博客 - eoe移动开发者社区...
  6. 手机经常提示找不到服务器,为什么我的手机显示无法连接到服务器
  7. stm32f4 输出pwm波_stm32的pwm输出代码及注释
  8. 以太网速率怎么手动设置_OPENWRT-KOOLSHARE软路由,一级/单臂/二级/旁软路由设置单臂路由联网教程...
  9. 深度学习:神经网络,softmax + cross entropy,非tensorflow方式
  10. 数据结构与算法:Python语言描述