前言

之前的外星人都是直接铺满屏幕的,移动方式和下落节奏都很单一,这次我们整一点花活,来一个随机生成外星人,这样还不够,外星人的移动方向我们也需要改改,不然多没意思。

随机生成

这里我们采用的是random包中的random函数,因为是生成外星人,所以修改的是game_function中的create_fleet函数,该函数的功能是计算空间中能生成的外星人行数和列数,双重循环调用外星人生成函数。

#前面有一个from random import random
def create_fleet(ai_settings,screen,stats,ship,aliens):"""创建外星人群"""alien = Alien(ai_settings,screen)#第一个对象是用来计算相关数据的number_aliens_x = get_number_alien_x(ai_settings,alien.rect.width)number_rows = get_number_rows(ai_settings,ship.rect.width,alien.rect.height)for row_number in range(number_rows):for alien_number in range(number_aliens_x):a = random()if a > 0.3:create_alien(ai_settings,screen,aliens,alien_number,row_number)

random函数的返回值是[0,1)随机数,我们选择0.3-1生成外星人,这样不会太少。
create_alien是使用外星人类来生成一个对象,并将其加入到aliens编组中,具体内容看一下之前的博客:

  • 外星人类的讲解:链接
  • 事件函数讲解:链接

放一张图:

好了,本期博客到此结束(bushi

随机方向

可以试一下,改了之后我们的外星人移动还是之前的一整块,看着就很难受,所以我想到了随机方向的问题。

首先,如果每一个外星人都有自己不一样的方向,那么我们就要对原来的结构修改:

  1. 方向变量(正负1)不应该放在setting中了,而应该是在外星人类中
  2. 检测外星人到达边界时函数不需要break了,我们要对每一个都进行判断
  3. 修改外星人方向的函数也不应该是修改所有的方向并下落,而是针对单独一个外星人
def check_fleet_deges(ai_settings,aliens):"""有外星人得到边界时"""for alien in aliens.sprites():if alien.check_edge():change_fleet_direction(ai_settings,alien)def change_fleet_direction(ai_settings,alien):"""将外星人下调,并改变方向"""alien.rect.y += ai_settings.fleet_drop_speedalien.fleet_direction *= -1

贴图:

(可以看到重叠的部分明显有白边,这是因为我们的外星人图片不是透明背景,不然会好很多。)

这样基本上就实现了外星人的无序,增强了游戏体验。

结语

最后再给一个游戏技巧吧,站在中间打就行了
嗯,就是这样,因为飞船是一定要经过中间的,打起来就很方便。

游戏体验怎么还下降了……

py实现外星人入侵(二次开发)——3.随机生成外星人和方向相关推荐

  1. revit二次开发调整三维视图的视角方向

    revit二次开发调整三维视图的视角方向 1.找到或创建了三维视图之后,操作视图的orientto()属性.(前提是该视图为View3D类型 其中:参数为视角方向. 前视图:0,1,0: 后视图:0, ...

  2. py实现外星人入侵(二次开发)——4.特殊外星人(高得分、大子弹和盾牌外星人)

    前言 之前的游戏都是正常的外星人,这次我们添加了不一样的种类: 击中得分*10的高得分外星人 击中获得一个大子弹的外星人,大子弹的宽度更大,并且击中敌人不会消失,不计入总子弹数 获得了一个盾牌的外星人 ...

  3. 生成ltx文件命令_利用二次开发工具批量生成PCDMIS程序

    精通PC-DMIS软件的大佬们都应该知道,PC-DMIS软件的CAD和CAD++版本支持导入XYZ文件生成自动点特征.根据该功能,本人曾经在空闲时做了个类似扩展工具"PC-DMIS TO P ...

  4. uniapp开发APP随机生成二维码

    uniapp插件市场:生成二维码.传入链接,即可使用,可快速扫出链接 - DCloud 插件市场

  5. 二位数组的随机生成,遍历,求和,反转。和两个变量的^反转 源码

    import java.util.Random;/*** derf*/ public class Operate {public static void main(String[] args) {in ...

  6. Creo二次开发:批量生成工程图

    具有如下功能: 1)在列表中列出装配体下所有的零件,选择多个需要生成工程图的零件 2)然后对选中的零件生成工程图 3)在每一个工程图中添加表,列出工程图对应模型的参数信息(名称,类型,值等) 代码如下 ...

  7. Revit二次开发-修改标注线尺寸界线的方向

    有时候,我们想标注一个尺寸,正常情况下尺寸界线最好是贴着要标注的物体. 尺寸界线贴着物体 在Revit中,用以下代码生成标注 Line lineVertical = Line.CreateBound( ...

  8. CAD二次开发 导出构件生成新dwg

    CAD导出dwg有两个方法:saveAs和Wblock. 本次主要结合个人实践,讲解下Wblock的用法: 从API接口来看,SDK提过了3种导出接口,笔者验证了上图红框的两种方法: 1)把一个图块导 ...

  9. 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    龙源期刊网 http://www.qikan.com.cn 基于 AutoLisp 的 AutoCAD 二次开发自动 生成系统图 作者:郎建山 金江 来源:<科技视界> 2013 年第 2 ...

最新文章

  1. Data Artisans发布支持ACID事务的流式处理框架Streaming Ledger
  2. Nodejs模块、自定义模块、CommonJs的概念和使用
  3. 推荐php 8新特性比较好的两个网站
  4. FreeWheel是一家怎样的公司?| 人物志
  5. linux 关闭端口_手把手教你在Linux中快速检测端口的 3 个小技巧
  6. C++设计模式-Flyweight享元模式
  7. Confluence文档共享系统
  8. 计算机语言python发音_Python如何像scratch一样朗读文字?
  9. C4d模型--电商广告海报三维模型
  10. 关于NavigateUrl中绑定Eval()方法时出现服务器标记的格式不正确的解决方法
  11. 解决GitHub上的博客无法被百度收录的问题
  12. IDEA 实用小技巧:万能的临时文件
  13. ppt如何利用视频作为背景
  14. 计算机与通信会议排名
  15. EXCEL表格F4绝对引用突然失效,无反应
  16. 管家婆辉煌7.2 7.1 年结存导致单据明细丢失 提示:这段时间无过帐单据。
  17. Windows 10免费原生打开HEIC格式的图片(无需转换,直接用照片打开)
  18. 中兴网关(光猫)DNS故障的解决
  19. Fluent Bit的下载量达到10亿!
  20. 搭建一个简单的FAQ系统

热门文章

  1. 我在赶集网的两个月(完整版)
  2. java心跳 谁发谁_java 心跳机制
  3. 浏览器控制台接口测试以及造测试数据
  4. 无线电能传输 wpt 磁耦合谐振 过零检测 matlab simulink仿真 pwm MOSFET,过零检测模块 基于二极管整流的无线电能传输设计
  5. [Python] 黑白棋(翻转棋)小游戏
  6. 《我想进大厂》之Dubbo普普通通9问
  7. FM知名芯片商芯略总裁因侵权被警方拘留
  8. 修改管理员信息php,修改管理员_ThinkPHP_大笨熊_IT技术平台
  9. 编程实现根据公式π/4=1-(1/3)+(1/5)-(1/7)...计算π的值
  10. Vue 3的设计过程(翻译自尤雨溪原文)