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

news2025/1/19 14:31:55

目录

前言

一、为什么要重构模块

 二、创建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的功能?可以吸取颜色,改变背景色?这个其实觉得有可能实现,但是改变图片背景色,那还要抠图,觉得不大可能,本着好学的精神,在网上查询下,可以使用第三方库来改变图片的颜色,至于效果怎么样也就不试了,跟本次案例关系不大,以后有需要再试。但是改变背景色为图片背景色有难度,没有发现提取图片颜色的方式,难道用肉眼看?

 总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/895941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入

目录 开启GPIO5对应的时钟 设置引脚复用 设置GPIO5_IO1输入模式 设置检测电平 部分代码 button.c led.c main.c 在原理图上找到对应的引脚后即可以根据对应的图表找到真正在板字上的引脚,这里的 SNVS_TAMPER1对应实际的引脚是GPIO5_IO1 P1357页附近有GPIO5对…

华为OD机试 - 数字字符串组合倒序 - 正则表达式(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、熟读题意,大概理解为:2、我理解 “-”作为连接符使用时作为字符串的一部分 的意思是:3、解决本题的关键是正则表达式的使用。 五、Java算法源码六、效果展示1、输入2、输出…

142页大型制造企业IT蓝图、信息化系统技术架构规划与实施方案PPT

导读:原文《142页大型制造企业IT蓝图、信息化系统技术架构规划与实施方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 完整版领取方式 完整版领取…

新能源电动车充电桩控制主板的三大保护功能

新能源电动车充电桩控制主板的三大保护功能 你是否曾经遇到过电动车充电时电流过大,电压不稳定,或者电池过热的情况?这些问题都可能会给你的电动车带来安全隐患。那么,如何避免这些问题的发生呢?让我们一起来探讨一下充电桩控制主板的保护功…

这款编程语言,竟然没有程序员使用,却人丁兴旺

人丁兴旺 现在,编程语言种类繁多,比如Java、Python、C等,每种语言都有其特定的应用场景和优势。 然而,让我们感到惊奇的是,有一款编程语言,它并没有广大的程序员使用,却依然能够在编程世界中独…

初阶C语言-结构体

🌞 “少年有梦不至于心动,更要付诸行动。” 今天我们一起学习一下结构体的相关内容! 结构体 🎈1.结构体的声明1.1结构的基础知识1.2结构的声明1.3结构成员的类型1.4结构体变量的定义和初始化 🎈2.结构体成员的访问2.1结…

04-微信小程序常用组件-基础组件

04-微信小程序常用组件-基础组件 文章目录 基础内容icon 图标案例代码 text 文本案例代码 progress 进度条案例代码 微信小程序包含了六大组件: 视图容器、 基础内容、 导航、 表单、 互动和 导航。这些组件可以通过WXML和WXSS进行布局和样式设置&#xff0c…

我还不知道?Android组件化插件化模块化

Android组件化、插件化和模块化是针对Android应用程序开发的一种架构设计思想和开发方式。 组件化(Componentization): 组件化是将一个大型的Android应用程序拆分成多个独立的组件(Module),每个组件可以独…

SUMO 创建带有停车位的充电站 在停车位上充电

前言 SUMO提供的Charging Station是没有停车位的,车辆只有在通过充电站区域或者停在充电站区域内时才能被充电,这时充电的车辆就会占用道路。然而,真实世界中的情况通常是充电站设在路边,且提供一定量的车位用于停车,…

探索OLED透明屏的多领域应用:技术驱动的未来之窗

OLED透明屏作为一项具有突破性技术的新兴产品,正在各个领域展现无限的可能性。 其独特的透明性和高对比度,使其在智能家居、汽车行业、商业展示、航空航天、教育与培训以及医疗健康等领域中得到广泛应用。 那么,尼伽将详细探讨OLED透明屏在…

程序的DAC检查与LSM简介

程序的DAC检查 在Linux中,程序的DAC(Discretionary Access Control,自主访问控制)检查是指操作系统对程序执行期间对文件和资源的访问权限进行的检查。 Linux使用一种基于权限的访问控制模型,其中每个文件和资源都与…

Linux学习之iptables过滤规则的使用

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810,uname -r看到内核版本是3.10.0-957.el7.x86_64,iptables --version可以看到iptables版本是v1.4.21。 iptables -t filter -A INPUT -s 10.0.0.8 -j ACCEPT会在最后一行插入。 10…

借用空数组方法:处理类数组的对象的实用技巧

前言 NodeList 不是一个数组,是一个类似数组的对象 (Like Array Object)。虽然 NodeList 不是一个数组,但是可以使用 forEach() 来迭代。你还可以使用 Array.from() 将其转换为数组。 不过,有些浏览器较为过时,没有实现 NodeList.…

C++项目实战之演讲比赛流程管理系统

演讲比赛流程管理系统 1. 演讲比赛程序需求 1.1 比赛规则 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛 每名选手都有对应的编号,如 10001 ~ 10012 比赛方式:分组比赛&#xff0…

git提交代码是用git-merge还是git-rebase呢?

什么是git merge? git merge是我们在git操作中频繁会用到的一个命令,它主要实现的功能便是为我们进行分支代码的合并,也就是将两个或两个以上的开发历史合并在一起的操作。 它有以下两种用途: 更新代码时,整合另一个…

行业资讯丨“燃气智慧化”到底是什么?

文章来源:网络 关键词:智慧燃气、智慧燃气场站、设备设施数字化、数字孪生、工业互联网 带你了解燃气信息化 随着科技的不断进步和信息化的快速发展,各行各业都在积极探索如何将技术应用于业务中,以提高效率和服务质量。 燃气…

Java实现钉钉企业内部应用机器和自定义机器人发送消息

前言 公司让写一个服务监控的功能,当监测到服务停止时,向钉钉群里推送报警信息。之前大概看到钉钉的开放平台的API文档,好像能群发消息的只有机器人。 钉钉开放平台目前提供三种机器人: 企业内部应用机器人 群模板机器人 自定义机器人 本来向用自己比较熟悉的自定义机器人…

初试时间官宣!研招网发布下半年重要时间节点!今日速报来了

距24考研初试还有127天,今天给大家带来初试和报名时间官宣消息、考研报名注意事项、研招网发布的2024考研“保姆级”下半年重要时间节点。有用记得收藏 24考研报名和初试时间官宣 已有学校在招生简章中明确24考研初试时间 初试时间预计为:2023年12月23…

当我们都是那个“和尚”:团队合作中的责任与动力

引言:三个和尚的故事 中国的古老民间故事中,有一个被广为传颂的故事 - 三个和尚的故事。该故事描述了三位和尚居住在远离水源的山上寺庙中。当只有一个和尚时,他每天下山提水,日复一日,从未间断。但当寺庙里有了三个和…

【Java】常见面试题:HTTP/HTTPS、Servlet、Cookie、Linux和JVM

文章目录 1. 抓包工具(了解)2. 【经典面试题】GET和POST的区别:3. URL中不是也有这个服务器主机的IP和端口吗,为啥还要搞个Host?4. 补充5. HTTP响应状态码6. 总结HTTPS工作过程(经典面试题)7. H…