赞
踩
外星人游戏来源于《Python编程:从入门到实践》一书,由pygame实现。游戏中,玩家共有3艘飞船,每次使用一艘,放在游戏界面底部,通过键盘左右键控制飞船左右移动,控制界面上有几个外星人,可以左右移动和下移。玩家控制飞船移动并发送子弹,当子弹击中外星人时,玩家可以一定的分数,当外星人与飞船碰撞时,当前飞船毁坏,玩家使用剩余的飞船继续进行游戏,当所有飞船都毁坏时,游戏结束。整个游戏过程中,玩家的分数将被显示和保存。 此外,本项目中对于多个外星人对象和子弹对象的处理没有使用书上的sprite,而是用list进行处理。 博客记录了在实现过程中的一些收获,如pygame的使用。
Pygame于2000年10月开始。六个月后发布了pygame 1.0版。作者Pete Shinners作为多年的C程序员,几乎同时发现了Python和SDL。SDL由Sam Lantinga创建,与DirectX相比,SDL是用于控制多媒体的跨平台C库。它已用于数百种商业和开源游戏。两个项目的简洁性和直接性给Pete Shinners留下了深刻的印象,不久之后Pete Shinners意识到将Python和SDL混合在一起是一个有趣的提议。
Pete Shinners发现了一个正在进行的完全相同的小项目PySDL。PySDL由Mark Baker创建,是SDL作为Python扩展的直接实现。该接口比通用的SWIG包装更干净,但是Pete Shinners觉得它强制使用了“ C风格”的代码。PySDL的突然去世促使Pete Shinners进行自己的新项目。
注意,pygame的版本要和python的版本对应。
- import pygame
- pygame.init()
导入pygame后,首先要做的是初始化。
Pygame有一个显示Surface。这基本上是在屏幕上可见的图像,并且该图像由像素组成。更改这些像素的主要方法是调用blit()函数。这会将像素从一个图像复制到另一个图像上。pygame中移动图像,是在将图像绘制到新位置之前,“擦除”旧图像。通过快速擦除图像并在新位置重新绘制图像,实现了运动的“幻觉”。
要将对象放置在屏幕上,我们需要告诉blit()函数将图像放置在何处。在pygame中,我们始终将位置传递为(X,Y)坐标。这表示右侧的像素数,向下表示放置图像的像素数。界面的左上角的是坐标系的原点(0,0)。向右稍微移动将是(10,0),然后向右向下移动将是(10,10)。Pygame带有一个方便的容器来存储这些坐标,它是Rect。Rect在这些坐标中基本上表示一个矩形区域。
在屏幕上绘制一个图像后,玩家并不能立即看到图像的更改,需要对界面进行更新才能看到,常用的更新函数有:
- pygame.display.update()
- pygame.display.flip()
Pygame中最重要的部分是Surface。Surface可以理解为一张空白的纸,在纸上你可以做很多事情,如画线,颜色填充,复制图像以及设置或读取单个像素的颜色。
Surface具有不同的种类,可以通过不同的函数创建
(1)游戏显示界面
pygame.display.set_mode()
上述代码将创建一个特殊的Surface,即“display surface”表示screen,无论你做什么,它会出现在用户的屏幕上。你只能有一个,这是SDL限制,不是pygame的。
(2)图像Surface
image.load()
上述代码创建一个图像surface。
(3)文本Surface
font.render()
上述代码创建一个文本surface,在pygame中,想要在界面上显示文本,需要将文本渲染(render)成surface才行。
(4)空的Surface
Surface()
(1)surface位置控制
Rect在pygame中发挥着重要作用,可以控制每个surface显示的位置。Pygame的效率之所以如此高, 一个原因是它让你能够像处理矩形(rect 对象) 一样处理游戏元素。每个surface都可以调用函数
get_rect()
获得其对应的rect,rect中包含属性:right,left,top,bottom,center,centerx,centery。通过调整属性的值,可以实现在不同的位置显示图像。要将游戏元素居中, 可设置相应rect 对象的属性center 、 centerx 或centery 。要让游戏元素与屏幕边缘对齐, 可使用属性top 、 bottom 、 left 或right ; 要调整游戏元素的水平或垂直位置, 可使用属性x 和y , 它们分别是相应矩形左上角的 x 和 y 坐标。
(2)绘制矩形
游戏场景中,有时需要使用矩形图形,可以直接创建rect对象,并调用函数将其显示
pygame.draw.rect
pygame可以获取鼠标、键盘以及其他游戏设备的输入,如:
- event.type==pygame.KEYDOWN
- event.key==pygame.K_RIGHT
- event.type==pygame.MOUSEBUTTONDOWN
type对应事件的类型,如按下键盘,松开键盘,key对应键盘按下的键值。
上述部分是在实现外星人入侵项目时,需要了解的pygame内容,由于自己在实现的过程中没有使用sprite,未列出sprite的内容,更多的信息可以从官网获取:https://www.pygame.org/docs/
pygame显示
代码主要包括外星人类、飞船类、子弹类、游戏场景设置类、游戏状态控制类、按钮类、记分牌类。游戏的开始、重置需要鼠标点击按钮,飞船的移动和发射子弹需要键盘输入。详细内容可以参见
游戏代码链接:https://github.com/wzyzyw/python_learning/tree/master/alien_game
实现的游戏效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。