分享一个在Twitter上的一个少年编写的python小游戏,程序要从娃娃抓起啊! 你可曾想过如何创建视频游戏吗?它不像你想象的那么复杂! 在本教程中,您将创建一个简单的游戏叫做兔子和獾,在这里作为英雄的兔子要保卫城堡反击进攻的獾群。 写这个游戏,你将使用Python。 Python是一种计算机编程语言。我们就本教程选择Python,Python是一种易于上手、有趣而且很容易学的语言。 然后回到这里,准备开始—— 有一场小兔子和獾之间的战争即将发生。继续阅读将加入战争吧!
开始: 安装Python如果你想在Windows电脑上尝试本教程,你需要安装Python,记住以下安装的版本是2.7.3版本!运行完安装程序后,在开始菜单程序文件夹中会有IDLE,运行IDL。 如果操作正确的话,你将会看到类似输出: Python 2.7.3 (v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwinType "help", "copyright", "credits" or "license" for more information.>>>注意:如果你想退出Python提示窗(三个尖括号提示:>>>),你可以通过在提示窗里输入exit()或按Ctrl+D。 一旦你在Python提示窗了,测试Python是否正常工作的话输入print 1+1,然后按回车或换行,它将输出2。你已经写了你的第一个Python程序。 现在你知道Python工作正常,为使用Python写游戏你需要安装PyGame。 PyGame是一个使写游戏变简单的Python库,它提供如图像处理、声音回放等你可以很容易添加都游戏中的功能。 下载你系统适合的PyGame,确认你下载的是一个Python2.7对应的版本。 要检验PyGame安装是否正确的话,打开IDLE或通过终端运行Python,在Python提示符处输入import pygame,如果回车后没有输出的话你安装成功了。 如果,另一方面,输出了下附类似错误,PyGame没有正确安装。 Python 2.7.2 (default, Jun 20 2012, 16:23:33) [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> import pygameTraceback (most recent call last): File "<stdin>", line 1, in <module>ImportError: No module named pygame>>>如果你遇到类似的错误,在论坛上发出来我将帮助你让它正常。从文件运行Python代码虽然你可以在Python提示符下运行短的Python代码,但如果你工作在一个大的程序(比如游戏)里,你可能想要将你的代码保存到一个文件,这样你就不必一遍又一遍地键入它了。 有几种方法可以运行Python程序文件。一种方法是使用一个纯文本编辑器,不如记事本(Windows)或TextEdit(Mac)。打开一个新的文本文件,输入你的Python代码(像print 1 + 1)。然后保存它为asXXX.py(XXX可以是任何描述性的文件名称)。 使用Windows的话,通过双击这个文件来运行它。在Mac上,打开终端,输入python,然后拖动你保存的文件到终端窗口并按Enter。 另一种方法是键入代码类到IDLE,也就是你在这个教程中需要做的方式。运行IDLE - 只需在终端输入IDLE。 然后选择文,然后选择File\New Window,会出现一个你可以输入代码的文本编辑器窗口。你可以通过File\Save保存你更改的代码,通过运行Run\Run Module(F5)运行代码。 请注意运行菜单只在你已有一个文件在编辑器窗口打开时有效。
添加游戏资源你几乎已经可以开始创建你的游戏了。但没有一些震撼的图像和声音效果的游戏又算什么呢?我已经收集了游戏所需要的所的图形和声音效果并把它们压缩成了一个ZIP存档,你可以在这里下载。 下载文件后,在你的硬盘上创建一个游戏使用的文件夹,将resources文件夹解压到这个文件夹中,这样你的游戏文件夹有了名为resources的子文件夹,各种资源在resources文件夹里面分组显示如下: 兔子和獾的游戏你已经准备就绪。
第一步:(编写简单的)Hello Bunny(嘿,兔子)运行IDLE开发环境,向上一节提到的那样,打开一个新的文本编辑窗。在编辑窗键入以下代码: # 1 - Import libraryimport pygamefrom pygame.locals import * # 2 - Initialize the gamepygame.init()width, height = 640, 480screen=pygame.display.set_mode((width, height))
# 3 - Load imagesplayer = pygame.image.load("resources/images/dude.png")
# 4 - keep looping throughwhile 1:
# 5 - clear the screen before drawing it again screen.fill(0)
# 6 - draw the screen elements screen.blit(player, (100,100))
# 7 - update the screen pygame.display.flip()
# 8 - loop through the events for event in pygame.event.get():
# check if the event is the X button
if event.type==pygame.QUIT:
# if it is quit the game
pygame.quit()
exit(0)把它保存到你的游戏目录下(即资源子目录)并命名为itgame.py。 让我们逐段分析以上代码: 1. 导入PyGame库。这一步让你在你的程序中使用来自库中的函数。 2. 初始化PyGame并设置显示窗口。 3. 加载你想要给bunny使用的图片。 4. 循环执行以下缩进的代码。 5. 在绘图前,将屏幕填充成黑色。 6. 将之前加载进来的bunny图片以100*100的大小显示在屏幕上。 7. 更新屏幕。 8. 检查任何新事件如果有的话,否则转到退出命令,退出程序。 注意:根据PyGame的文档,你不需要调用pygame.quit()因为解析器关闭时会自动调用它。然而,至少在Mac OS上,这个游戏会在退出时挂起除非pygame.quite被调用。 如果现在运行这段代码(在Idle菜单栏点击 “Run\Run Module"),你应该可以看到一个如下所示的屏幕: 耶,兔子就显示在屏幕上了,并准备做动作! 但是只有一只兔子显示在一个黑漆漆的屏幕上,这个游戏看起来很吓人且很孤单。接下来要做的就是稍微美化一下咯。
第二步:添加布景我们首先给游戏场景添加背景图片,可以通过调用一组screen.blit()来完成背景添加。 在代码的#3 小节,载入角色图像之后添加下面的代码: grass = pygame.image.load("resources/images/grass.png")castle = pygame.image.load("resources/images/castle.png")这些代码载入图片然后赋给指定的变量,然后把它们画到屏幕上。但如果你检查草地的图片,你会发现它没有覆盖整个640 x 480的屏幕,所以你必须平铺使草地的图片完全覆盖屏幕。 在#6小节的开始(把兔子画在屏幕上之前),添加以下代码到game.py: for x in range(width/grass.get_width()+1):
for y in range(height/grass.get_height()+1):
screen.blit(grass,(x*100,y*100))screen.blit(castle,(0,30))screen.blit(castle,(0,135))screen.blit(castle,(0,240))screen.blit(castle,(0,345 ))正如你所见,首先把x坐标通过for循环递增,在这个循环中再把y坐标循环递增,并且将草地画在使用循环生成的x、y坐标上。紧接着的一组代码只是将城堡画在屏幕上。 你现在运行这个程序,你会看到像如下的结果: 从现在开始,变得好看点了!
第三步:让兔子动起来下面你需要添加一些真正的游戏元素,比如让兔子响应键盘的按键。 要做到这一点,你需要实现好一个方法记录哪一个键在某一时刻被按下。你可以简单的使用一个数组保存在游戏需要使用的键的按下状态。 添加如下代码到game.py的#2小节结束(在你设了屏幕高和宽度之后): keys = [False, False, False, False]playerpos=[100,100]这段代码是非常明了。数组keys按WASD的顺序记录它们的状态。数组的每个元素对应一个键,第一个是W,第二个是A等等。 playerpos变量定义程序开始绘制游戏角色的起始位置。因为这个游戏将移动游戏角色到不同的位置,设置一个储存角色位置的变量,然后便可以简单地将角色绘制到这个位置。 现在你需要修改现有的代码来绘制角色,使用新的playerpos变量,将# 6的程序: screen.blit(player, (100,100))改为: screen.blit(player, playerpos)接下来,基于哪些按键被按下更新键数组,PyGame通过添加event.key事件使检测按键很容易实现。 在# 8检测event.type==pygame.QUIT之后,添加这些代码(如果有块缩进的话使用与pygame.QUIT相同的缩进级): if event.type == pygame.KEYDOWN: if event.key==K_w:
keys[0]=True
elif event.key==K_a:
keys[1]=True elif event.key==K_s:
keys[2]=True elif event.key==K_d:
keys[3]=Trueif event.type == pygame.KEYUP:
if event.key==pygame.K_w:
keys[0]=False elif event.key==pygame.K_a:
keys[1]=False elif event.key==pygame.K_s:
keys[2]=False elif event.key==pygame.K_d:
keys[3]=False哇!这里有很多行代码,如果你把它按If语句拆分也不是很复杂的。 看到这里,不禁觉得长江后浪推前浪啊!python作为编程语言,不仅仅能开发游戏还能进行软件测试,关于向自学python的可以加入python群:583677663,一起交流成长~
|