[python从入门到实践] chap12 武装飞船

1.创建Pygame窗口以及响应用户输入

alien_invasion.py

import sys
import pygame

def run_game():
	#初始化游戏并创建一个屏幕对象
	pygame.init()
	screen = pygame.display.set.mode((1200,800))
	pygame.dispaly.set_caption("Alien Invasion")

	#开始游戏的主循环
	while True:

		#监视键盘和鼠标事件
		for event in pygame.event.get():
			if event.type == pygame.QUIT:
				sys.exit()

		#让最近绘制的屏幕可见
		pygame.dispaly.flip()

run_game()
2.创建settings类包含对游戏的设置
3.添加图片

最好的是bmp图
在Pygame中,原点(0,0)位于屏幕左上角,向右下方移动时,坐标值将增大。在1200×800 的屏幕上,原点位于左上角,而右下角的坐标为(1200, 800)。

4.重构:模块game_functions

一开始将代码编写得尽可能简单,并在项目越来越复杂时进行重构。

5.驾驶飞船

相应按键
每当用户按键时,都将在Pygame中注册一个事件。事件都是通过方法pygame.event.get()获 取的,因此在函数check_events()中,我们需要指定要检查哪些类型的事件。每次按键都被注册 为一个KEYDOWN事件。

持续移动
我们将让游 戏检测pygame.KEYUP事件,以便玩家松开右箭头键时我们能够知道这一点;然后,我们将结合使 用KEYDOWN和KEYUP事件,以及一个名为moving_right的标志来实现持续移动。

左右移动

调整飞船的速度
可以在Settings类中添加属性 ship_speed_factor,用于控制飞船的速度
通过将速度设置指定为小数值,可在后面加快游戏的节奏时更细致地控制飞船的速度。然而, rect的centerx等属性只能存储整数值,因此我们需要对Ship类做些修改

限制飞船的活动范围
重构check_events()

6.简单小结

alien_invasion.py
主文件alien_invasion.py创建一系列整个游戏都要用到的对象:存储在ai_settings中的设置、 存储在screen中的主显示surface以及一个飞船实例。文件alien_invasion.py还包含游戏的主循环, 这是一个调用check_events()、ship.update()和update_screen()的while循环。
要玩游戏《外星人入侵》,只需运行文件alien_invasion.py。其他文件(settings.py、 game_functions.py、ship.py)包含的代码被直接或间接地导入到这个文件中。

settings.py
文件settings.py包含Settings类,这个类只包含方法__init__(),它初始化控制游戏外观和飞 船速度的属性。

game_functions.py
文件game_functions.py包含一系列函数,游戏的大部分工作都是由它们完成的。函数 check_events()检测相关的事件,如按键和松开,并使用辅助函数check_keydown_events()和check_keyup_events()来处理这些事件。就目前而言,这些函数管理飞船的移动。模块 game_functions还包含函数update_screen(),它用于在每次执行主循环时都重绘屏幕。

ship.py
文件ship.py包含Ship类,这个类包含方法__init__()、管理飞船位置的方法update()以及在 屏幕上绘制飞船的方法blitme()。表示飞船的图像存储在文件夹images下的文件ship.bmp中

7.射击

添加子弹设置
首先,更新settings.py,在其方法__init__()末尾存储新类Bullet所需的值

创建Bullet类

将子弹存储到编组中
定义Bullet类和必要的设置后,就可以编写代码了,在玩家每次按空格键时都射出一发子弹。 首先,我们将在alien_invasion.py中创建一个编组(group),用于存储所有有效的子弹,以便能够 管理发射出去的所有子弹。

到12.8.4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值