Python实现外星人入侵游戏

1.项目说明

        外星人游戏来源于《Python编程:从入门到实践》一书,由pygame实现。游戏中,玩家共有3艘飞船,每次使用一艘,放在游戏界面底部,通过键盘左右键控制飞船左右移动,控制界面上有几个外星人,可以左右移动和下移。玩家控制飞船移动并发送子弹,当子弹击中外星人时,玩家可以一定的分数,当外星人与飞船碰撞时,当前飞船毁坏,玩家使用剩余的飞船继续进行游戏,当所有飞船都毁坏时,游戏结束。整个游戏过程中,玩家的分数将被显示和保存。 此外,本项目中对于多个外星人对象和子弹对象的处理没有使用书上的sprite,而是用list进行处理。 博客记录了在实现过程中的一些收获,如pygame的使用。

2.pygame

2.1pygame历史

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 Ba​​ker创建,是SDL作为Python扩展的直接实现。该接口比通用的SWIG包装更干净,但是Pete Shinners觉得它强制使用了“ C风格”的代码。PySDL的突然去世促使Pete Shinners进行自己的新项目。

2.2pygame安装

官网安装

非官方windows系统安装

注意,pygame的版本要和python的版本对应。

2.3pygame使用

2.3.1导入和初始化

import pygame
pygame.init()

导入pygame后,首先要做的是初始化。

2.3.2移动图像和显示机制

Pygame有一个显示Surface。这基本上是在屏幕上可见的图像,并且该图像由像素组成。更改这些像素的主要方法是调用blit()函数。这会将像素从一个图像复制到另一个图像上。pygame中移动图像,是在将图像绘制到新位置之前,“擦除”旧图像。通过快速擦除图像并在新位置重新绘制图像,实现了运动的“幻觉”

要将对象放置在屏幕上,我们需要告诉blit()函数将图像放置在何处。在pygame中,我们始终将位置传递为(X,Y)坐标。这表示右侧的像素数,向下表示放置图像的像素数。界面的左上角的是坐标系的原点(0,0)。向右稍微移动将是(10,0),然后向右向下移动将是(10,10)。Pygame带有一个方便的容器来存储这些坐标,它是Rect。Rect在这些坐标中基本上表示一个矩形区域。

在屏幕上绘制一个图像后,玩家并不能立即看到图像的更改,需要对界面进行更新才能看到,常用的更新函数有:

pygame.display.update()
pygame.display.flip()

2.3.3Surface

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

2.3.4Rect

(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

 

2.3.5获取事件

pygame可以获取鼠标、键盘以及其他游戏设备的输入,如:

event.type==pygame.KEYDOWN
event.key==pygame.K_RIGHT
event.type==pygame.MOUSEBUTTONDOWN

type对应事件的类型,如按下键盘,松开键盘,key对应键盘按下的键值。

上述部分是在实现外星人入侵项目时,需要了解的pygame内容,由于自己在实现的过程中没有使用sprite,未列出sprite的内容,更多的信息可以从官网获取:https://www.pygame.org/docs/

2.4小结

pygame显示

 

3.游戏代码和结果

代码主要包括外星人类、飞船类、子弹类、游戏场景设置类、游戏状态控制类、按钮类、记分牌类。游戏的开始、重置需要鼠标点击按钮,飞船的移动和发射子弹需要键盘输入。详细内容可以参见

游戏代码链接:https://github.com/wzyzyw/python_learning/tree/master/alien_game

实现的游戏效果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值