python编程_day14_chap13_游戏项目_外星人

1.创建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=screen
        self.ai_settings=ai_settings

        #加载外星人图像并设置rect属性
        self.image=pygame.image.load('images/alien.bmp')
        self.rect=self.image.get_rect()

        #每个外星人最初都在屏幕左上角附近
        self.rect.x=self.rect.width
        self.rect.y=self.rect.height

        #存储外星人的准确位置
        self.x=float(self.rect.x)


    def blitme(self):
        self.screen.blit(self.image,self.rect)
        
2.创建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:
        --snip--
      
        gf.update_screen(ai_settings,screen,ship,alien,bullets)

run_game()
3.让外星人出现在屏幕

在update_screen() 中调用其方法blitme() :
game_functions.py

def update_screen(ai_settings,screen,ship,alien,bullets):
    
    #更新屏幕上的图像,并切换到新屏幕
    screen.fill(ai_settings.bg_color)
    #在飞船和外星人后面重绘所有子弹
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    alien.blitme()
    
    #让最近绘制的屏幕可见
    pygame.display.flip()
13.2.创建一群外星人

1.创建一行卫星人

        #外星人可占的空间
        available_space_x=ai_settings.screen_width-(2*alien_width)
        #外星人的数量
        number_aliens_x=available_space_x/(2*alien_width)

2.创建多行外星人
为创建一行外星人,首先在alien_invasion.py中创建一个名为aliens 的空编组,用于存储全部外星人,再调用game_functions.py中创建外星人群的函数:
alien_invasion.py

#创建一群外星人
aliens=Group()
gf.creat_fleet(ai_settings,screen,aliens)


#开始游戏主循环
while True:
    gf.check_events(ai_settings,screen,ship,bullets)
    ship.update()
    gf.update_bullets(bullets)
    
    gf.update_screen(ai_settings,screen,ship,aliens,bullets)

game_functions.py

import sys
import pygame
from bullet import Bullet
from alien import Alien

--snip--


def update_screen(ai_settings,screen,ship,aliens,bullets):
    
    #更新屏幕上的图像,并切换到新屏幕
    screen.fill(ai_settings.bg_color)
    #在飞船和外星人后面重绘所有子弹
    for bullet in bullets.sprites():
        bullet.draw_bullet()

    ship.blitme()
    aliens.draw(screen)
    
    #让最近绘制的屏幕可见
    pygame.display.flip()


def creat_fleet(ai_settings,screen,aliens):
    """创建外星人群 """
    #创建一个外星人,并计算一行可以容纳多少个外星人
    #外星人间距为外星人宽度
    alien=Alien(ai_settings,screen)
    alien_width=alien.rect.width
    available_space_x=ai_settings.screen_width-2*alien_width
    number_aliens_x=int(available_space_x/(2*alien_width))

    #创建第一行外星人
    for alien_number in range(number_aliens_x):
        #创建一个外星人并将其加入当前行
        alien=Alien(ai_settings,screen)
        alien.x=alien_width+2*alien_width*alien_number
        alien.rect.x=alien.x
        aliens.add(alien)
4.重构creat_fleet()
def get_number_aliens_x(ai_settings,alien_width):
    available_space_x=ai_settings.screen_width-2*alien_width
    number_aliens_x=int(available_space_x/(2*alien_width))
    return number_aliens_x


def creat_alien(ai_settings,screen,aliens,alien_number):
    """ 创建一个外星人并将其放在当前行"""
    alien=Alien(ai_settings,screen)
    alien_width=alien.rect.width
    alien.x=alien_width+2*alien_width*alien_number
    alien.rect.x=alien.x
    aliens.add(alien)


def creat_fleet(ai_settings,screen,aliens):
    """创建外星人群 """
    #创建一个外星人,并计算一行可以容纳多少个外星人
    #外星人间距为外星人宽度
    alien=Alien(ai_settings,screen)
    number_aliens_x=get_number_aliens_x(ai_settings,alien.rect.width)


    #创建第一行外星人
    for alien_number in range(number_aliens_x):
        creat_alien(ai_settings,screen,aliens,alien_number)

5.添加行
计算公式:
将屏幕高度减去第一行外星人 的上边距(外星人高度)、飞船的高度以及最初外星人群与飞船的距离(外星人高度的两倍):

available_space_y = ai_settings.screen_height – 3 * alien_height – ship_height
number_rows = available_height_y / (2 * alien_height)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值