首页 > 编程语言 >Python小游戏——外星人入侵(保姆级教程)第一章 05

Python小游戏——外星人入侵(保姆级教程)第一章 05

时间:2022-08-21 12:46:04浏览次数:51  
标签:functions 05 Python screen settings game 小游戏 pygame 代码

系列文章目录

第一章:武装飞船

05:重构:模块game_functions

一、重构

在大型项目中,经常需要在添加新代码前重构既有代码。重构旨在简化既有代码的结构,使其更容易扩展。在本节中,我们将创建一个名为game_functions的新模块,它将存储大量让游戏《外星人入侵》运行的函数。通过创建模块game_functions,可避免alien_invasion.py太长,并使其逻辑更容易理解。

在添加新代码前重构现有代码,可以简化代码结构,使其更容易扩展!!!

二、代码及演示

(笔记在代码的注释中!!!)

1.模块game_functions

在与文件:alien_invasion.py同一文件夹下创建
文件game_functions.py

点击查看代码
#渗透小红帽python的学习之路
#外星人入侵小游戏
#game_functions.py
#存储让游戏运行的函数

import sys

import pygame

def check_events():
    #响应按键和鼠标事件
    for event in pygame.event.get():  # 监听键盘和鼠标事件
        if event.type == pygame.QUIT:
            sys.exit()
    #修改alien_invasion.py,使其导入game_functions
    #并将事件循环替换为对函数check_events()的调用

def update_screen(ai_settings,screen,ship):
    # 将更新屏幕的代码移到此处
    screen.fill(ai_settings.bg_color)  # 每次循环都会重绘屏幕
    ship.blitme()  # 每次循环时重新绘制飞船

    pygame.display.flip()  # 让最近绘制的屏幕可见
    # 然后修改alien_invasion.py

image

2.修改alien_invasion

修改文件:alien_invasion.py

点击查看代码
#渗透小红帽python的学习之路
#外星人入侵小游戏
#创建pygame窗口以及响应用户输入

import sys
#模块sys用来退出游戏
import pygame

from settings import Setting
#导入刚创建的设置类
from ship import Ship
#导入管理飞船行为的类
import game_functions as gf

def run_game():
    pygame.init() #初始化屏屏幕对象
    ai_settings = Setting()
    # 创建Setting类的实例,并存储在ai_settings变量中

    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) #创建显示窗口
    pygame.display.set_caption("Alien Invasion")
    ship = Ship(screen) #绘制一艘飞船

    #开始游戏主循环
    while True:
        gf.check_events()
        gf.update_screen(ai_settings,screen,ship)

run_game()
# 代码重构完成

image

3.运行效果

image

有什么不懂的地方在评论区留言哦!希望我的文章能对你有所帮助,如果喜欢我的文章,请点赞收藏并关注!你的认可是对我创作最大的鼓励!

2022-08-21 12:30:32 星期日

标签:functions,05,Python,screen,settings,game,小游戏,pygame,代码
From: https://www.cnblogs.com/Penetration-redhat/p/16609802.html

相关文章

  • python 时间戳装饰器
    点击查看代码importtimefromfunctoolsimportwrapsdeftimer(func):@wraps(func)definner(*args,**kwargs):start=time.time()re......
  • 牛客网笔试输入输出处理方法总结(基于Python3.5)
    牛客网判题系统输入处理牛客网上的输入输出借鉴ACM模式给出,对于习惯了leetcode函数定义形式解题的小伙伴们来说确实比较生疏。为了避免在之后的笔试中再次吃亏,在这里对牛......
  • 05. Prometheus - 指标处理(PromQL)
    PromQLPromQL是Prometheus内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。并被广泛应用在Prometheus的日常数据查询、可视化、告警......
  • python文件上传
    前端代码:html<inputid="fileUpload"type="file"name="upload"><inputtype="button"@click="submitfile"value="Upload">jssubmitfile(){......
  • python wraps装饰器
    fromfunctoolsimportwrapsdefdecorator(func):"""thisisdecorator__doc__"""@wraps(func)defwrapper(*args,**kwargs):"""thisisw......
  • python输入和类型转换
    输入获取用户使用键盘录入的内容使用的函数是input()变量=input(‘提示的信息’)1.代码从上到下执行,遇到input函数之后 类型转换根据代码的需要,将一种数据类型......
  • Notepad plus 通过NppExec插件编译/运行 golang,php,python等语言
        1. 在Notepadplus的插件-->插件管理中,添加nppExec插件。          2.打开插件-->NppExec,选择Showconsole,和Follow($CURRE......
  • CF1705(思维,二进制)
    https://codeforces.com/contest/1705/problem/E题意:给出01串s和t,问通过以下操作使s变成t的最小操作数。操作:s-1不同于s+1时,s取反。eg:110->100场上直接模拟后,感觉直接模......
  • python---re
    python---repython的re模块简单使用re.findall,re.compile,re.match和re.searchre.findall这个是最好用的,查找所有符合条件的,返回list,或Noneimportrestr1='gdf......
  • python---struct
    python---structkeywords:structbytespython数据互转https://docs.python.org/3/library/struct.html二进制数据和各种类型数据的转换因为不同平台默认大小端不同,......