当前位置: 代码迷 >> 综合 >> py实现外星人入侵(二次开发)——3.随机生成外星人和方向
  详细解决方案

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

热度:26   发布时间:2023-12-12 23:49:13.0

前言

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

随机生成

这里我们采用的是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

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

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

结语

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

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

  相关解决方案