py实现外星人入侵(二次开发)——3.随机生成外星人和方向
前言
之前的外星人都是直接铺满屏幕的,移动方式和下落节奏都很单一,这次我们整一点花活,来一个随机生成外星人,这样还不够,外星人的移动方向我们也需要改改,不然多没意思。
随机生成
这里我们采用的是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)不应该放在setting中了,而应该是在外星人类中
- 检测外星人到达边界时函数不需要break了,我们要对每一个都进行判断
- 修改外星人方向的函数也不应该是修改所有的方向并下落,而是针对单独一个外星人
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.随机生成外星人和方向相关推荐
- revit二次开发调整三维视图的视角方向
revit二次开发调整三维视图的视角方向 1.找到或创建了三维视图之后,操作视图的orientto()属性.(前提是该视图为View3D类型 其中:参数为视角方向. 前视图:0,1,0: 后视图:0, ...
- py实现外星人入侵(二次开发)——4.特殊外星人(高得分、大子弹和盾牌外星人)
前言 之前的游戏都是正常的外星人,这次我们添加了不一样的种类: 击中得分*10的高得分外星人 击中获得一个大子弹的外星人,大子弹的宽度更大,并且击中敌人不会消失,不计入总子弹数 获得了一个盾牌的外星人 ...
- 生成ltx文件命令_利用二次开发工具批量生成PCDMIS程序
精通PC-DMIS软件的大佬们都应该知道,PC-DMIS软件的CAD和CAD++版本支持导入XYZ文件生成自动点特征.根据该功能,本人曾经在空闲时做了个类似扩展工具"PC-DMIS TO P ...
- uniapp开发APP随机生成二维码
uniapp插件市场:生成二维码.传入链接,即可使用,可快速扫出链接 - DCloud 插件市场
- 二位数组的随机生成,遍历,求和,反转。和两个变量的^反转 源码
import java.util.Random;/*** derf*/ public class Operate {public static void main(String[] args) {in ...
- Creo二次开发:批量生成工程图
具有如下功能: 1)在列表中列出装配体下所有的零件,选择多个需要生成工程图的零件 2)然后对选中的零件生成工程图 3)在每一个工程图中添加表,列出工程图对应模型的参数信息(名称,类型,值等) 代码如下 ...
- Revit二次开发-修改标注线尺寸界线的方向
有时候,我们想标注一个尺寸,正常情况下尺寸界线最好是贴着要标注的物体. 尺寸界线贴着物体 在Revit中,用以下代码生成标注 Line lineVertical = Line.CreateBound( ...
- CAD二次开发 导出构件生成新dwg
CAD导出dwg有两个方法:saveAs和Wblock. 本次主要结合个人实践,讲解下Wblock的用法: 从API接口来看,SDK提过了3种导出接口,笔者验证了上图红框的两种方法: 1)把一个图块导 ...
- 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图
龙源期刊网 http://www.qikan.com.cn 基于 AutoLisp 的 AutoCAD 二次开发自动 生成系统图 作者:郎建山 金江 来源:<科技视界> 2013 年第 2 ...
最新文章
- Data Artisans发布支持ACID事务的流式处理框架Streaming Ledger
- Nodejs模块、自定义模块、CommonJs的概念和使用
- 推荐php 8新特性比较好的两个网站
- FreeWheel是一家怎样的公司?| 人物志
- linux 关闭端口_手把手教你在Linux中快速检测端口的 3 个小技巧
- C++设计模式-Flyweight享元模式
- Confluence文档共享系统
- 计算机语言python发音_Python如何像scratch一样朗读文字?
- C4d模型--电商广告海报三维模型
- 关于NavigateUrl中绑定Eval()方法时出现服务器标记的格式不正确的解决方法
- 解决GitHub上的博客无法被百度收录的问题
- IDEA 实用小技巧:万能的临时文件
- ppt如何利用视频作为背景
- 计算机与通信会议排名
- EXCEL表格F4绝对引用突然失效,无反应
- 管家婆辉煌7.2 7.1 年结存导致单据明细丢失 提示:这段时间无过帐单据。
- Windows 10免费原生打开HEIC格式的图片(无需转换,直接用照片打开)
- 中兴网关(光猫)DNS故障的解决
- Fluent Bit的下载量达到10亿!
- 搭建一个简单的FAQ系统
热门文章
- 我在赶集网的两个月(完整版)
- java心跳 谁发谁_java 心跳机制
- 浏览器控制台接口测试以及造测试数据
- 无线电能传输 wpt 磁耦合谐振 过零检测 matlab simulink仿真 pwm MOSFET,过零检测模块 基于二极管整流的无线电能传输设计
- [Python] 黑白棋(翻转棋)小游戏
- 《我想进大厂》之Dubbo普普通通9问
- FM知名芯片商芯略总裁因侵权被警方拘留
- 修改管理员信息php,修改管理员_ThinkPHP_大笨熊_IT技术平台
- 编程实现根据公式π/4=1-(1/3)+(1/5)-(1/7)...计算π的值
- Vue 3的设计过程(翻译自尤雨溪原文)