Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞 ...

打印 上一主题 下一主题

主题 904|帖子 904|积分 2712

系列文章目录

第一章:武装飞船

07调整飞船速度

08限制飞船活动范围

一、代码及演示

1.修改settings

修改文件:settings.py
点击查看代码
  1. #渗透小红帽python的学习之路
  2. #外星人入侵小游戏
  3. #创建设置类Setting()
  4. #存储外星人入侵小游戏的所有设置的类
  5. class Setting():
  6.     def __init__(self): #__init__ 注意是两个短下划线
  7.         # 屏幕设置
  8.         self.screen_width = 1200
  9.         self.screen_height = 800
  10.         self.bg_color = (230, 230, 230)
  11.         self.ship_speed_factor = 1.5 #飞船速度设置为1.5,则移动时每次移动1.5像素
  12.         # 因为rect的centerx等属性只能存储整数值,所以需要对ship类做修改
复制代码

2.修改ship

修改文件:ship.py
点击查看代码
  1. #渗透小红帽python的学习之路
  2. #外星人入侵小游戏
  3. #ship.py
  4. #管理飞船行为的类
  5. import pygame
  6. class Ship():
  7.     def __init__(self,ai_settings,screen):
  8.         #参数screen用来指定将飞船绘制到什么地方
  9.         #参数ai_settings让飞船能获取到速度设置
  10.         self.screen = screen
  11.         #加载飞船图片并获取其外接矩形
  12.         self.ai_settings = ai_settings
  13.         self.image = pygame.image.load('F:/PythonProject/pythongame/images/ship.bmp')
  14.         #复制图片路径后需要将斜杠改为反斜杠
  15.         self.rect = self.image.get_rect()
  16.         self.screen_rect = screen.get_rect()
  17.         #将每艘新飞船放在屏幕中间
  18.         self.rect.centerx = self.screen_rect.centerx
  19.         self.rect.bottom = self.screen_rect.bottom
  20.         #在飞船的属性centerx中存储小数值
  21.         self.center = float(self.rect.centerx)
  22.         # 移动标志,玩家按下右箭头键时,将标志设为true,松开时重新设置为false
  23.         self.moving_right = False
  24.         self.moving_left = False
  25.     # 方法update()检查标志状态,标志为true时调整飞船位置
  26.     def update(self):
  27.         #更新飞船的center值,而不是rect
  28.         #在修改self.center的值前检查飞船的位置
  29.         if self.moving_right and self.rect.right < self.screen_rect.right:
  30.             self.center += self.ai_settings.ship_speed_factor
  31.         if self.moving_left and self.rect.left > 0:
  32.             self.center -= self.ai_settings.ship_speed_factor
  33.         #根据self.center更新rect的对象
  34.         self.rect.centerx = self.center
  35.     def blitme(self):
  36.         # 在指定位置绘制飞船
  37.         self.screen.blit(self.image, self.rect)
复制代码

3.修改alien_invasion

修改文件:alien_invasion.py
点击查看代码
  1. #渗透小红帽python的学习之路
  2. #外星人入侵小游戏
  3. #创建pygame窗口以及响应用户输入
  4. import sys
  5. #模块sys用来退出游戏
  6. import pygame
  7. from settings import Setting
  8. #导入刚创建的设置类
  9. from ship import Ship
  10. #导入管理飞船行为的类
  11. import game_functions as gf
  12. def run_game():
  13.     pygame.init() #初始化屏屏幕对象
  14.     ai_settings = Setting()
  15.     # 创建Setting类的实例,并存储在ai_settings变量中
  16.     screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) #创建显示窗口
  17.     pygame.display.set_caption("Alien Invasion")
  18.     ship = Ship(ai_settings,screen) #绘制一艘飞船
  19.     #开始游戏主循环
  20.     while True:
  21.         gf.check_events(ship)
  22.         ship.update()
  23.         # 飞船移动已经设置完成
  24.         gf.update_screen(ai_settings,screen,ship)
  25. run_game()
  26. # 代码重构完成
复制代码

4.运行效果

A:按下右箭头键后飞船向右移动,直到移动到游戏界面右边缘后停止。


B:按下左箭头键后飞船向左移动,直到移动到游戏界面左边缘后停止


二、学习笔记

1. 调整飞船速度

A:需要在setting类中添加控制飞船速度的属性。
B:因为rect的centerx等属性只能存储整数值,所以需要对ship类做修改。
C:参数ai_settings让飞船能获取到速度设置。
D:在飞船的属性centerx中存储小数值。
E:更新飞船的center值,而不是rect。
self.center = float(self.rect.centerx)
F:使用函数float()将self.rect.centerx的数值转换为小数,将结果存储在self.center中。
2. 限制飞船活动范围

A:如果玩家长时间按住箭头键,则飞船有可能移动到屏幕外面,所以需要限制飞船的活动范围,让飞船在到达屏幕边缘后停止移动。
self.rect.right < self.screen_rect.right
B:self.rect.right返回飞船外接矩形右边缘的x坐标。如果这个值小于self.screen_rect.right的值说明飞船没有触及屏幕右侧边缘。
self.rect.left > 0
C:如果rect的左边缘x坐标大于0,说明飞船没有触及左边缘。
有什么不懂的地方在评论区留言哦!希望我的文章能对你有所帮助,如果喜欢我的文章,请点赞收藏并关注!你的认可是对我创作最大的鼓励!
2022-08-23 22:01:39 星期二

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表