python实现外星人入侵——4.主函数部分

前言

事件函数部分最后总结了一下,实际上我们能需要调用的函数也就这几个:

  • check_events:检查键鼠事件
  • update_bullets:子弹更新
  • update_aliens:外星人更新
  • update_screen:屏幕更新

主函数

首先上面的我们都需要,不需要写它干什么, 然后我们在主函数中添加一个飞船更新即可,至于记分牌和按钮则是在屏幕更新中实现。
只不过我们需要注意一下,子弹、外星人和飞船更新都是在游戏状态为开始时才需要更新。

    # 开始游戏的主循环 
    while True: 
        gf.check_events(ai_setting,screen,stats,sb,play_button,Ship,aliens,bullets)
        if stats.game_active:
            Ship.update()
            #先更新子弹再更新外星人,目的是判断是否能装撞上
            gf.update_bullets(ai_setting,screen,stats,sb,Ship,aliens,bullets)
            gf.update_aliens(ai_setting,stats,screen,sb,Ship,aliens,bullets)
        gf.update_screen(ai_setting,screen,stats,sb,Ship,aliens,bullets,play_button)

另外我们需要对写好的类进行创建,以及创建屏幕这样的问题:

    # 初始化游戏并创建一个屏幕对象 
    pygame.init() 
    screen = pygame.display.set_mode((ai_setting.screen_width, ai_setting.screen_height))#参数是一个元组,宽度&高度
    pygame.display.set_caption("Alien Invasion") 
    #创建设置类
    ai_setting = setting()
    #创建一个按钮
    play_button = Button(ai_setting,screen,"Play")
    #创建一个用于存储游戏统计信息的实例
    stats = GameStats(ai_setting)
    #创建记分牌
    sb = Scoreboard(ai_setting,screen,stats)
    #创建一个飞船
    Ship = ship(ai_setting,screen)
    #创建子弹编组
    bullets = Group()
    #创建一个外星人编组
    aliens = Group()
    #创建外星人,因为最开始我们没法通过其他函数调用create_fleet
    gf.create_fleet(ai_setting,stats,screen,Ship,aliens)

然后再加上开始的文件导入,主函数就成了:

import pygame               #负责建立游戏
from pygame.sprite import Group
from setting import setting #屏幕对象设置
from ship import ship       #飞船的类
from alien import Alien     #外星人的类
from game_stats import GameStats
from button import Button
from Scoreboard import Scoreboard
import game_functions as gf #控制退出等操作
def run_game():                                                                                                                                                                                                               
    # 初始化游戏并创建一个屏幕对象 
    pygame.init() 
    ai_setting = setting()
    screen = pygame.display.set_mode((ai_setting.screen_width, ai_setting.screen_height))#参数是一个元组,宽度&高度
    pygame.display.set_caption("Alien Invasion") 
    #创建一个按钮
    play_button = Button(ai_setting,screen,"Play")
    #创建一个用于存储游戏统计信息的实例
    stats = GameStats(ai_setting)
    #创建记分牌
    sb = Scoreboard(ai_setting,screen,stats)
    #创建一个飞船
    Ship = ship(ai_setting,screen)
    #创建子弹编组
    bullets = Group()
    #创建一个外星人编组
    aliens = Group()
    #创建外星人
    gf.create_fleet(ai_setting,stats,screen,Ship,aliens)
    
    # 开始游戏的主循环 
    while True: 
        gf.check_events(ai_setting,screen,stats,sb,play_button,Ship,aliens,bullets)
        if stats.game_active:
            Ship.update()
            #先更新子弹再更新外星人,目的是判断是否能装撞上
            gf.update_bullets(ai_setting,screen,stats,sb,Ship,aliens,bullets)
            gf.update_aliens(ai_setting,stats,screen,sb,Ship,aliens,bullets)
        gf.update_screen(ai_setting,screen,stats,sb,Ship,aliens,bullets,play_button)

run_game()

不过在这时,却显示了一个报错,找不到图像文件,所以没办法我将相对路径改为绝对路径
如果有这个问题的小伙伴也可以改一下,问题就能解决了。

结束了?

目前我已经将外星人游戏项目整体讲解了一遍,加深了整体的印象。
对于多个文件的py项目,我得到了以下的几个重点:

  1. 对于游戏中的元素,我们应当创建类,同时类中的方法应当为针对单一类的方法。比如alien类要创建多个对象,我们就不应该将多个对象的方法写在这里;子弹和外星人的碰撞事件也不应该在这里
  2. 对于游戏的事件部分,每一个函数应当实现一个功能就行了,重构对于后期的二次开发是很重要的。
  3. 大型项目(虽然这个还不算大)一定要想明白有什么东西,然后在开始写;开始只写一个简单的功能,然后不断往上叠加,不能好高骛远,想着一遍成。(另一个系列的Verilog小游戏,当时就想着一遍成,然后有一个模块重写了无数遍,天天熬夜脱发)

基本上就这样了。

结束了,再来一次

在后面的博客中,我将对一些比较好的点子进行实现,比如大子弹、声音特效,还有将一些不合适的地方进行重构。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值