当前位置: 首页 > news >正文

伍佰亿门户网站类似wordpress的cms

伍佰亿门户网站,类似wordpress的cms,合肥专业做网站,浙江省城乡建设厅官网目录 第#xff11;3 章 外星人 13.1 回顾项目 game_functions.py 13.2 创建第一个外星人 13.2.1 创建 Alien 类 alien.py 13.2.2 创建 Alien 实例 alien_invasion.py 13.2.3 让外星人出现在屏幕上 game_functions.py 13.3 创建一群外星人 13.3.1 确定一行可容纳…目录 第3 章 外星人 13.1 回顾项目 game_functions.py 13.2 创建第一个外星人 13.2.1 创建 Alien 类 alien.py 13.2.2 创建 Alien 实例 alien_invasion.py 13.2.3 让外星人出现在屏幕上 game_functions.py 13.3 创建一群外星人 13.3.1 确定一行可容纳多少个外星人 注意 13.3.2 创建多行外星人 alien_invasion.py game_functions.py 13.3.3 创建外星人群 game_functions.py 注意 第3 章 外星人 13.1 回顾项目 开发较大的项目时进入每个开发阶段前回顾一下开发计划搞清楚接下来要通过编写代码 来完成哪些任务都是不错的主意。本章涉及以下内容。  研究既有代码确定实现新功能前是否要进行重构。  在屏幕左上角添加一个外星人并指定合适的边距。  根据第一个外星人的边距和屏幕尺寸计算屏幕上可容纳多少个外星人。我们将编写一个 循环来创建一系列外星人这些外星人填满了屏幕的上半部分。  让外星人群向两边和下方移动直到外星人被全部击落有外星人撞到飞船或有外星 人抵达屏幕底端。如果整群外星人都被击落我们将再创建一群外星人。如果有外星人 撞到了飞船或抵达屏幕底端我们将销毁飞船并再创建一群外星人。  限制玩家可用的飞船数量配给的飞船用完后游戏结束。 我们将在实现功能的同时完善这个计划但就目前而言该计划已足够详尽。 在给项目添加新功能前还应审核既有代码。每进入一个新阶段通常项目都会更复杂因 此最好对混乱或低效的代码进行清理。 我们在开发的同时一直不断地重构因此当前需要做的清理工作不多但每次为测试新功能而运行这个游戏时都必须使用鼠标来关闭它这太讨厌了。下面来添加一个结束游戏的快捷键Q game_functions.py def check_keydown_events(event, ai_settings, screen, ship, bullets):--snip--elif event.key pygame.K_q:sys.exit() 在check_keydown_events()中我们添加了一个代码块以便在玩家按Q时结束游戏。这样 的修改很安全因为Q键离箭头键和空格键很远玩家不小心按Q键而导致游戏结束的可能性不 大。现在测试时可按Q关闭游戏而无需使用鼠标来关闭窗口了。 13.2 创建第一个外星人 在屏幕上放置外星人与放置飞船类似。每个外星人的行为都由Alien类控制我们将像创建 Ship类那样创建这个类。出于简化考虑我们也使用位图来表示外星人。你可以自己寻找表示外 星人的图像也可使用图13-1所示的图像可在本书配套资源https://www.nostarch.com/ pythoncrashcourse/中找到。这幅图像的背景为灰色与屏幕背景色一致。请务必将你选择的图 像文件保存到文件夹images中。 13.2.1 创建 Alien 类 下面来编写Alien类 alien.py import pygame from pygame.sprite import Sprite class Alien(Sprite):表示单个外星人的类def __init__(self, ai_settings, screen):初始化外星人并设置其起始位置super(Alien, self).__init__()self.screen screenself.ai_settings ai_settings# 加载外星人图像并设置其rect属性self.image pygame.image.load(images/alien.bmp)self.rect self.image.get_rect()# 每个外星人最初都在屏幕左上角附近 1 self.rect.x self.rect.widthself.rect.y self.rect.height# 存储外星人的准确位置self.x float(self.rect.x)def blitme(self):在指定位置绘制外星人self.screen.blit(self.image, self.rect) 除位置不同外这个类的大部分代码都与Ship类相似。每个外星人最初都位于屏幕左上 角附近我们将每个外星人的左边距都设置为外星人的宽度并将上边距设置为外星人的高 度见1。 13.2.2 创建 Alien 实例 下面在alien_invasion.py中创建一个Alien实例 alien_invasion.py --snip-- from ship import Ship from alien import Alien import game_functions as gf def run_game():--snip--# 创建一个外星人alien Alien(ai_settings, screen)# 开始游戏主循环while True:gf.check_events(ai_settings, screen, ship, bullets)ship.update()gf.update_bullets(bullets)gf.update_screen(ai_settings, screen, ship, alien, bullets) run_game() 在这里我们导入了新创建的Alien类并在进入主while循环前创建了一个Alien实例。我们 没有修改外星人的位置因此该while循环没有任何新东西但我们修改了对update_screen()的 调用传递了一个外星人实例。 13.2.3 让外星人出现在屏幕上 为让外星人出现在屏幕上我们在update_screen()中调用其方法blitme() game_functions.py def update_screen(ai_settings, screen, ship, alien, bullets):--snip--# 在飞船和外星人后面重绘所有的子弹for bullet in bullets:bullet.draw_bullet()ship.blitme()alien.blitme()# 让最近绘制的屏幕可见pygame.display.flip() 我们先绘制飞船和子弹再绘制外星人让外星人在屏幕上位于最前面。图13-2显示了屏幕 上的第一个外星人。 第一个外星人正确地现身后下面来编写绘制一群外星人的代码。 13.3 创建一群外星人 要绘制一群外星人需要确定一行能容纳多少个外星人以及要绘制多少行外星人。我们将首 先计算外星人之间的水平间距并创建一行外星人再确定可用的垂直空间并创建整群外星人。 13.3.1 确定一行可容纳多少个外星人 为确定一行可容纳多少个外星人我们来看看可用的水平空间有多大。屏幕宽度存储在 ai_settings.screen_width中但需要在屏幕两边都留下一定的边距把它设置为外星人的宽度。 由于有两个边距因此可用于放置外星人的水平空间为屏幕宽度减去外星人宽度的两倍 available_space_x ai_settings.screen_width – (2 * alien_width) 我们还需要在外星人之间留出一定的空间即外星人宽度。因此显示一个外星人所需的水 平空间为外星人宽度的两倍一个宽度用于放置外星人另一个宽度为外星人右边的空白区域。 为确定一行可容纳多少个外星人我们将可用空间除以外星人宽度的两倍 number_aliens_x available_space_x / (2 * alien_width) 我们将在创建外星人群时使用这些公式。 注意 令人欣慰的是在程序中执行计算时一开始你无需确定公式是正确的而可以尝试直 接运行程序看看结果是否符合预期。即便是在最糟糕的情况下也只是屏幕上显示的 外星人太多或太少。你可以根据在屏幕上看到的情况调整计算公式。 13.3.2 创建多行外星人 为创建一行外星人首先在alien_invasion.py中创建一个名为aliens的空编组用于存储全部 外星人再调用game_functions.py中创建外星人群的函数 alien_invasion.py import pygame from pygame.sprite import Group from settings import Settings from ship import Ship import game_functions as gf def run_game():--snip--# 创建一艘飞船、一个子弹编组和一个外星人编组ship Ship(ai_settings, screen)bullets Group() 1 aliens Group()# 创建外星人群 2 gf.create_fleet(ai_settings, screen, aliens)# 开始游戏主循环while True:--snip— 3 gf.update_screen(ai_settings, screen, ship, aliens, bullets) run_game() 由于我们不再在alien_invasion.py中直接创建外星人因此无需在这个文件中导入Alien类。 1处创建了一个空编组用于存储所有的外星人。接下来调用稍后将编写的函数 create_fleet()见2并将ai_settings、对象screen和空编组aliens传递给它。然后修改对 update_screen()的调用让它能够访问外星人编组见3。 我们还需要修改update_screen() game_functions.py def update_screen(ai_settings, screen, ship, aliens, bullets):--snip--ship.blitme()aliens.draw(screen)# 让最近绘制的屏幕可见pygame.display.flip() 对编组调用draw()时Pygame自动绘制编组的每个元素绘制位置由元素的属性rect决定。 在这里aliens.draw(screen)在屏幕上绘制编组中的每个外星人。 13.3.3 创建外星人群 现在可以创建外星人群了。下面是新函数create_fleet()我们将它放在game_functions. py的末尾。我们还需要导入Alien类因此务必在文件game_functions.py开头添加相应的import 语句 game_functions.py --snip-- from bullet import Bullet from alien import Alien --snip-- def create_fleet(ai_settings, screen, aliens):创建外星人群# 创建一个外星人并计算一行可容纳多少个外星人# 外星人间距为外星人宽度 1 alien Alien(ai_settings, screen) 2 alien_width alien.rect.width 3 available_space_x ai_settings.screen_width - 2 * alien_width 4 number_aliens_x int(available_space_x / (2 * alien_width)) # 创建第一行外星人 5 for alien_number in range(number_aliens_x):# 创建一个外星人并将其加入当前行 6 alien Alien(ai_settings, screen)alien.x alien_width 2 * alien_width * alien_numberalien.rect.x alien.xaliens.add(alien) 这些代码大都在前面详细介绍过。为放置外星人我们需要知道外星人的宽度和高度因此 在执行计算前我们先创建一个外星人见1。这个外星人不是外星人群的成员因此没有将 它加入到编组aliens中。在2处我们从外星人的rect属性中获取外星人宽度并将这个值存储 到alien_width中以免反复访问属性rect。在3处我们计算可用于放置外星人的水平空间以 及其中可容纳多少个外星人。 相比于前面介绍的工作这里唯一的不同是使用了int()来确保计算得到的外星人数量为整 数见4因为我们不希望某个外星人只显示一部分而且函数range()也需要一个整数。函数 int()将小数部分丢弃相当于向下圆整这大有裨益因为我们宁愿每行都多出一点点空间 也不希望每行的外星人之间过于拥挤。 接下来我们编写了一个循环它从零数到要创建的外星人数见5。在这个循环的主体 中我们创建一个新的外星人并通过设置x坐标将其加入当前行见6。将每个外星人都往右 推一个外星人的宽度。接下来我们将外星人宽度乘以2得到每个外星人占据的空间其中包 括其右边的空白区域再据此计算当前外星人在当前行的位置。最后我们将每个新创建的外 星人都添加到编组aliens中。 如果你现在运行这个游戏将看到第一行外星人如图13-3所示。 这行外星人在屏幕上稍微偏向了左边这实际上是有好处的因为我们将让外星人群往右移 触及屏幕边缘后稍微往下移然后往左移以此类推。就像经典游戏《太空入侵者》相比于只 往下移这种移动方式更有趣。我们将让外形人群不断这样移动直到所有外星人都被击落或有 外星人撞上飞船或抵达屏幕底端。 注意 根据你选择的屏幕宽度在你的系统中第一行外星人的位置可能稍有不同 关于“Python”的核心知识点整理大全12-CSDN博客 关于“Python”的核心知识点整理大全25-CSDN博客 往期快速传送门在文章最后 感谢大家的支持欢迎订阅收藏专栏将持续更新
http://www.hkea.cn/news/14342414/

相关文章:

  • 社保官方网站登录入口自己在家做网站
  • 自己建立网站用什么软件昆明网站设计报价
  • 网站想换一个空间怎么办网上教育培训机构排名
  • html企业网站怎么做优惠券购物网站怎么做
  • 申请免费个人网站网站美化模板
  • 网站设计 方案wordpress缓冲
  • 学做投资网站好徐州新沂网站建设
  • 学校网站素材游戏开发工程师月薪
  • 隆尧做网站广宁县住房和城乡建设局网站
  • 临沂网站搜索排名移动终端网站开发
  • 中国容桂营销网站建设利于优化的网站要备案吗
  • 国外的网站模板类网站电子商务网站建设项目规划书
  • 新开传奇网站999广州市 网站建设建设
  • 网站备案安全责任书是谁盖章湖南长沙新增病例最新消息
  • 网站建 设方案说明书商务网站建设摘要
  • 做网站订房网站长沙seo网络公司
  • 洛阳制作网站哪家好微信小程序订货系统
  • 福安城乡建设与规划局网站学网站建设要多久
  • 做venn图的网站如何开网站卖东西
  • window2008r2网站建设亚马逊网站链接
  • 秒收录的网站小程序code
  • 做爰午夜福利全过程视频网站医院如何做网站策划
  • 鲜花网网站开发的目标网站域名的选择
  • 四平市住房和畅想建设局网站公司线上推广
  • 甘肃网站域名申请公司网站系统名称
  • 收费用的网站怎么做wordpress 4.6下载
  • 如何对网站做渗透wordpress防广告屏蔽
  • 手机怎么制作网站教程wordpress设置中文字体
  • 想自己做一个网站应该怎么弄上海市政网网址
  • 做一个小网站需要多少钱代写文章的平台有哪些