今天我们要实现激动人心的开炮功能啦!
1.5.4 开炮
在game_functions.py中,我们需要修改check_keydown_events(),以便在玩家按空格键时发射一颗子弹。无需修改check_keyup_events(),原因很简单,因为松开空格键的时候什么都不会发生。最后还需要修改update_screen(),确保在调用flip()前在屏幕上重绘每颗子弹。
import sys
import pygame
from bullet import Bullet
def check_keydown_events(event,ai_settings,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:
#创建一颗子弹,并将其加入编组bullets中
new_bullet = Bullet(ai_settings,screen,ship)
bullets.add(new_bullet)
def check_keyup_events(event,ship):
if event.key == pygame.K_RIGHT:
ship.moving_right = False
elif event.key == pygame.K_LEFT:
ship.moving_left = False
def check_events(ai_settings,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,ai_settings,screen,ship,bullets)
elif event.type == pygame.KEYUP:
check_keyup_events(event,ship)
def update_screen(ai_settings,screen,ship,bullets):
#每次循环时都重绘屏幕
screen.fill(ai_settings.bg_color)
#在飞船和外星人后面重绘所有子弹
for bullet in bullets.sprites():
bullet.draw_bullet()
# 屏幕上绘制飞船#
ship.blitme()
#让最近绘制的屏幕可见#
pygame.display.flip()
修改的时候一定要注意函数中新增加的参数。修改完game_function后,我们要修改一下主程序文件:
import pygame
from pygame.sprite import Group
from setting import Settings
from ship import Ship
import game_functions as gf
def rungame():
#初始化游戏并创建一个屏幕对象
pygame.init()
#实例化设置对象
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion")
#创建一只飞船
ship = Ship(ai_settings,screen)
#创建一个用于存储子弹的编组
bullets = Group()
#开始游戏主循环
while True:
gf.check_events(ai_settings,screen,ship,bullets)
ship.update()
bullets.update()
gf.update_screen(ai_settings,screen,ship,bullets)
rungame()
运行,然后尽情开炮吧~~~

网友评论