星际争霸之小霸王之小蜜蜂(三)--重构模块

目录

前言

一、为什么要重构模块

二、创建game_functions

三、创建update_screen()

四、修改alien_invasion模块

五、课后思考

总结


前言

前两天我们已经成功创建了窗口,并将小蜜蜂放在窗口的最下方中间位置,本来以为今天将学习控制小蜜蜂,结果是重构模块,算了,我们按照书上步骤,一起来学习下。

一、为什么要重构模块

书上说在大型项目中,会经常在添加新代码前重构既有的代码。(咱也没进过大公司,做过大型项目,今天也算体验了一把大型项目的流程),目的是简化代码结构。具体到我们现在做的案例,就是简化alien_invasion文件,把里面写的一些功能,再用一个函数封装起来,然后在alien_invasion里调用,使得alien_invasion看起来更简洁,逻辑更清晰。我们先来看看alien_invasion里面的代码。

复制代码
import sys
import pygame
import settings
from ship import Ship

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)
    pygame.display.set_caption("Alien Invasion")

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        screen.fill(new_setting.bg_color)
        ship.blitme()
        pygame.display.flip()

run_game()

通过观察代码,我们发现,在while循环里主要有两件事,一件事是监听用户操作,另一件事是绘制窗口,那么我们就将这两件事分别封装出去。

二、创建game_functions

没啥好说的,创建一个类,把while循环里面的代码复制过去,然后alien_invasion再调用就行了,我们先写game_functions的代码。

复制代码
import sys
import pygame

def check_events():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

三、创建update_screen()

书上面并没有创建一个 update_screen的新文件,而是在game_functions里定义了update_screen函数,那么game_functions不就复杂了吗?简化了alien_invasion,复杂了game_functions有啥意义。
我们观察上面的代码,screen.fill(new_setting.bg_color),调用了screen和new_setting,ship.blitme()调用了ship,所以我们在创建新的函数的时候,要将这三个作为传参传进去。

复制代码
def update_screen(new_setting,screen,ship):
    screen.fill(new_setting.bg_color)
    ship.blitme()
    
    pygame.display.flip()

四、修改alien_invasion模块

现在我们只需要导入game_functions,然后调用里面的函数就行了。

复制代码
import pygame
import settings
from ship import Ship
import game_functions as gf

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)
    pygame.display.set_caption("Alien Invasion")

    while True:
        gf.check_events()
        gf.update_screen(new_setting,screen,ship)
       

run_game()

我们来运行一下,看能否成功。

没问题,成功的

五、课后思考

"大蟒蛇"在这里提出了一个问题:"找一个喜欢的游戏角色,放在屏幕中间,然后将屏幕背景色变为图片的背景色,或者将图片的背景色变成屏幕背景色"
看到这个问题,我首先想到的是python可以实现ps的功能?可以吸取颜色,改变背景色?这个其实觉得有可能实现,但是改变图片背景色,那还要抠图,觉得不大可能,本着好学的精神,在网上查询下,可以使用第三方库来改变图片的颜色,至于效果怎么样也就不试了,跟本次案例关系不大,以后有需要再试。但是改变背景色为图片背景色有难度,没有发现提取图片颜色的方式,难道用肉眼看?

总结

今天在游戏的进程上没有突破,但是也体会了大项目的流程。

相关推荐
做怪小疯子5 小时前
华为笔试0429
python·numpy
Warson_L5 小时前
Dictionary
python
William Dawson5 小时前
2026软考中级系统集成项目管理工程师备考笔记
笔记·系统集成项目管理工程师
寒山李白7 小时前
解决 python-docx 生成的 Word 文档打开时弹出“无法读取内容“警告
python·word·wps·文档·docx·qoder
2401_832365528 小时前
JavaScript中rest参数(...args)取代arguments的优势
jvm·数据库·python
Sirius.z8 小时前
第J3周:DenseNet121算法详解
python
2301_779622418 小时前
Go语言怎么用信号量控制并发_Go语言semaphore信号量教程【入门】
jvm·数据库·python
love530love8 小时前
精简版|Claude-HUD 插件介绍 + 一键安装教程
人工智能·windows·笔记
2301_766283448 小时前
c++如何将控制台输出保存到文件_cout重定向到txt【详解】
jvm·数据库·python
想成为优秀工程师的爸爸9 小时前
第三十篇技术笔记:郭大侠学UDS - 人有生老三千疾,望闻问切良方医
网络·笔记·网络协议·tcp/ip·信息与通信