外星人入侵笔记

1.开始游戏项目

(1)创建pygame窗口以及相应用户输入
alien_invasion.py:

方法run_game():
初始化游戏并创建一个屏幕对象(pygame.init()、screen、pygame.display.set_caption())

开始游戏主循环(while True):
监视键盘和鼠标事件(event)
让绘制的屏幕可见(pygame.display.flip())
调用方法run_game()

(2)设置背景色
每次循环时都重绘屏幕(bgcolor、screen.fill())

(3)创建设置类Settings
settings.py:
屏幕设置(self.screen_width、self.screen_height、self.bg_color)

为创建Settings实例并使用它来访问设置,对alien_invasion.py进行修改:
初始化pygame,设置和屏幕对象(添加ai_settings,screen)

2.添加飞船图像
游戏中几乎可以使用任何类型的图像文件,但使用位图(.bmp)文件最为简单,因为pygame默认加载位图。
选择图像时,尽可能选择背景透明的图像,这样可使用图像编辑器将其背景设置成任何颜色。

(1)创建Ship类
ship.py:

方法 init():
初始化飞船并设置其初始位置(self.screen)
加载飞船图像并获取其外接矩形(self.image、self.rect、self.screen)
将每艘新飞船放在屏幕底部中央(self.rect.centerx,self.rect.bottom)

方法blitme():
在指定位置绘制飞船(self.screen.blit())

(2)在屏幕上绘制飞船
创建一艘飞船
调用方法ship.blitme()
这时运行,将看到飞船位于空游戏屏幕底部中央

3.重构:模块game_function

(1)函数check_events()
将相应按键和鼠标事件移动至此
在aliens_invasion.py中调用

(2)函数update_screen()
将 更新模块的代码 移动至此
主模块中调用update_screen()

4.驾驶飞船
每当用户按键时,都在pygam中注册一个KEYDOWN事件,事件都是通过方法pygame.event.get()获取的

(1)响应按键
game_fuctions.py:
函数check_event()中,在时间循环中添加elif模块,以便pygame检测到KEYDOWN事件

alien_invasion.py中调用check_events(ship)

(2)允许不断移动
ship.py:
设置移动标志self.moving_right
添加update()方法:
根据移动位置调整飞船位置

game_fuctions.py:
玩家按下右箭头时将moving_right设置为True,并在松开时将其设置为False
添加elif模块,让pygame检测到KEYUP事件
alien_invasion.py的while循环调用ship.update()方法

此时运行alien_invasion.py并按住右箭头键,飞船将不断右移,直至松开为止

(3)左右移动
ship.py:
init()中添加向左移动标志self.moving_left
添加if模块,根据移动标志调整飞船位置

game_fuctions.py:
check_events(ship)中设置响应向左按键和鼠标的事件

此时运行alien_invasion.py,将能够不断地左右移动飞船,如果同时按下左右箭头,飞船将纹丝不动

(4)调整飞船速度
settings.py:
添加飞船的速度属性ship_speed_factor

ship.py:
init()中初始化一个ai_settings的属性
在飞船的属性center中存储小数值,
更新飞船的center值,而不是rect。
根据self.center更新rect对象

alien_invasion.py:
创建Ship实例时,需要传入实参ai_settings、screen

(5)限制飞船的活动范围
ship.py:
对移动标志进行if判断时添加self.rect.right和self.rect.left,即要保证外接矩形的右边缘的x坐标小于屏幕右边缘,左边缘的x坐标要保证大于0

(6)重构check_events()
将check_events()的代码放在两个函数中,一个处理KEYDOWN事件,一个处理KEYUP事件

5.射击
(1)添加子弹设置
settings.py:
init()方法存储新类Bullet所需的值,包括bullet_width,bullet_height,bullet_color,bullet_speed_factor

(2)创建Bullet类
它是一个对飞船发射的子弹进行管理的类,继承了我们从模块pygame.sprite中导入的sprite类,通过使用精灵将游戏中相关的元素编组,进而同时操作编组中的所有元素<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值