星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾

简介: 星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾

前言

昨天我们已经将一个小老鼠显示到窗口上,今天我们来实现显示多个小老鼠,有了之前创建多个子弹的例子,我们照着写就行了。


一、创建Group类

参照创建子弹的步骤,我们首先要在主函数里创建一个Group类的容器,用来存放这些老鼠对象,然后将Group传到其他函数中去使用,我们先看代码:

import pygame
import settings
from ship import Ship
import game_functions as gf
from pygame.sprite import Group
from alien import Alien
def run_game():
    pygame.init()
    new_setting=settings.Settings()
    screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))
    ship = Ship(screen,new_setting)
    alien = Alien(new_setting,screen)
    pygame.display.set_caption("狂敲代码的橘子")
    bullets = Group()
    aliens = Group()
    gf.create_fleet(new_setting,screen,aliens)
    while True:
        gf.check_events(new_setting,screen,ship,bullets)
        ship.update()
        gf.update_bullets(bullets)
        gf.update_screen(new_setting,screen,ship,bullets,aliens)
run_game()

这里我们注意几点,一是我们创建了Group()对象,命名为aliens,二是我们准备在game_functions模块里创建create_fleet()函数用来创建多个小老鼠对象,我们这里提前写好了调用,三是game_functions模块里的update_screen()函数的传参发生变化,之前是只要要显示一只老鼠,所以传alien对象,现在要显示一群老鼠,所以传aliens对象。


二、创建create_fleet函数

首先我们需要知道要创建多少个老鼠,书上写的太复杂,用屏幕的宽度除以2倍的小老鼠图片的宽度,得到每一行小老鼠的个数,我觉得没有必要,我们肉眼观察一下,大概几个就行了,个人看了一下10个是可以的,到时显示的时候不够就加,少了就减。还是先看代码:

import sys
import pygame
from bullet import Bullet
from alien import Alien
def check_keydown_events(event,new_setting,screen,ship,bullets):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = True
    elif event.key == pygame.K_LEFT:
        ship.moving_left = True
    elif event.key == pygame.K_SPACE:
        fire_bullet(new_setting, screen, ship, bullets)
    elif event.key ==pygame.K_q:
        sys.exit()
def check_keyup_events(event,ship):
    if event.key == pygame.K_RIGHT:
        ship.moving_right = False
    if event.key == pygame.K_LEFT:
        ship.moving_left = False
def check_events(new_setting,screen,ship,bullets):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type==pygame.KEYDOWN:
            check_keydown_events(event,new_setting,screen,ship,bullets)
        elif event.type==pygame.KEYUP:
            check_keyup_events(event, ship)
def fire_bullet(new_setting,screen,ship,bullets):
    if len(bullets) < new_setting.bullets_allowed:
        new_bullet = Bullet(new_setting, screen, ship)
        bullets.add(new_bullet)
def update_bullets(bullets):
    bullets.update()
    for bullet in bullets.copy():
        if bullet.rect.bottom <= 0:
            bullets.remove(bullet)
def create_fleet(new_setting,screen,aliens):
    for alien_number in range(12):
        alien = Alien(new_setting,screen)
        alien.x = alien.rect.width+2*alien.rect.width*alien_number
        alien.rect.x = alien.x
        aliens.add(alien)
def update_screen(new_setting,screen,ship,bullets,aliens):
    screen.fill(new_setting.bg_color)
    for bullet in bullets.sprites():
        bullet.draw_bullet()
    ship.blitme()
    aliens.draw(screen)
pygame.display.flip()

这里注意几个点:

  1. alien.x = alien.rect.width+2*alien.rect.width*alien_number,的含义是设置每个小老鼠的位置,我们设置的是每个小老鼠直接空的距离就是小老鼠本身的宽度,所以每次加2倍的宽度。
  2. 在update_screen函数里增加代码 aliens.draw(screen),该代码的作用是在屏幕上绘制这个容器里的每一个小老鼠。

我们来看效果图。

三、增加列

前面我们创建了一行小老鼠并将他们显示了出来,我们现在要增加几列,正常思路来说,我们再加一个循环,将小老鼠的RECT.Y属性修改一下应该可以实现,我只需要修改creat_fleet()函数就行,我们来试着写写代码:

def create_fleet(new_setting,screen,aliens):
    for row_number in range(3):
        for alien_number in range(12):
            alien = Alien(new_setting,screen)
            alien.x = alien.rect.width+2*alien.rect.width*alien_number
            alien.rect.x = alien.x
            alien.rect.y = alien.rect.height+2*alien.rect.height*row_number
            aliens.add(alien)

这里我们设置了3行,为什么alien.rect.y和alien.rect.x的代码不一样,没有用alien.y来传导,因为我们在alien模块中没有设置y属性,所以如果照抄x就会报错。我们来看下效果。

总结

老鼠这种生物当多起来的时候,压迫感还是很强的,鸡皮疙瘩都起来了,明天让小老鼠集体向小花猫进攻,小花猫能顶住吗?

相关文章
|
编解码 开发者 Python
星际争霸之小霸王之小蜜蜂(一)--窗口界面设计
星际争霸之小霸王之小蜜蜂(一)--窗口界面设计
星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞
星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞
星际争霸之小霸王之小蜜蜂(十五)--剧将终场
星际争霸之小霸王之小蜜蜂(十五)--剧将终场
星际争霸之小霸王之小蜜蜂(十六)--狂奔的花猫
星际争霸之小霸王之小蜜蜂(十六)--狂奔的花猫
星际争霸之小霸王之小蜜蜂(十四)--资本家的眼泪
星际争霸之小霸王之小蜜蜂(十四)--资本家的眼泪
星际争霸之小霸王之小蜜蜂(十一)--杀杀杀
星际争霸之小霸王之小蜜蜂(十一)--杀杀杀
|
Java Python
星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来
星际争霸之小霸王之小蜜蜂(四)--事件监听-让小蜜蜂动起来
|
索引 Python
星际争霸之小霸王之小蜜蜂(七)--消失的子弹
星际争霸之小霸王之小蜜蜂(七)--消失的子弹
|
Python 容器
星际争霸之小霸王之小蜜蜂(六)--让子弹飞
星际争霸之小霸王之小蜜蜂(六)--让子弹飞