12.3.2设置背景色12.3.3 创建设置类12.4 添加飞船图像 12.4.1 创建Ship 类 12.4.2 在屏幕上绘制飞船

文章目录

  • 12.3.2设置背景色
  • [12.3.3 创建设置类](#12.3.3 创建设置类)
  • [12.4 添加飞船图像](#12.4 添加飞船图像)
    • [12.4.1 创建Ship 类](#12.4.1 创建Ship 类)
    • [12.4.2 在屏幕上绘制飞船](#12.4.2 在屏幕上绘制飞船)
  • 总结

提示:

12.3.2设置背景色

12.3.3 创建设置类

12.4 添加飞船图像

12.4.1 创建Ship 类

python 复制代码
import  pygame

class Ship:
    # "管理飞船的类
    def __init__(self, ai_game):
        # 初始化飞船并设置其初始位置。
        self.screen = ai_game.screen
        self.screen_rect = ai_game.screen.get_rect()

        # 加载飞船图像并获取其外接矩形。
        self.image = pygame.image.load('./images/傻傻.png')
        self.rect = self.image.get_rect()

        # 对于每艘新飞船,都将其放在屏幕底部的中央。
        self.rect.midbottom = self.screen_rect.midbottom

    def blitme(self):
        # 在指定位置绘制飞船。
        
        self.screen.blit(self.image, self.rect)

逐行分析这段代码:

python 复制代码
import pygame  # 导入pygame库,这是第三方库,不是Python自带的
  • import 是Python自带的关键字,用于导入模块
  • pygame 是第三方库的名称,固定名称不能更改
python 复制代码
class Ship:  # 定义一个名为Ship的类
  • class 是Python自带的关键字,用于定义类
  • Ship 是类名,这是可以自己随便命名的(遵循Python命名规范即可)
python 复制代码
    def __init__(self, ai_game):  # 类的初始化方法
  • def 是Python自带的关键字,用于定义函数/方法
  • __init__ 是Python自带的特殊方法名(构造方法),不能随意更改
  • self 是Python约定的实例引用变量名,虽然技术上可以改,但强烈建议保持这个名称
  • ai_game 是参数名,这是可以自己随便命名的
python 复制代码
        self.screen = ai_game.screen  # 获取游戏窗口对象
  • self 同上
  • screen 是实例属性名,这是可以自己随便命名的
  • ai_game 同上,是传入的参数
  • . 是Python自带的属性访问运算符
python 复制代码
        self.screen_rect = ai_game.screen.get_rect()  # 获取窗口的矩形区域
  • self 同上
  • screen_rect 是实例属性名,这是可以自己随便命名的
  • get_rect() 是pygame提供的方法,名称固定不能更改
python 复制代码
        self.image = pygame.image.load('./images/傻傻.png')  # 加载飞船图像
  • self 同上
  • image 是实例属性名,这是可以自己随便命名的
  • pygame.image.load() 是pygame提供的方法,名称固定不能更改
  • 字符串 './images/傻傻.png' 是图片路径,可以根据实际情况修改
python 复制代码
        self.rect = self.image.get_rect()  # 获取图像的矩形区域
  • self 同上
  • rect 是实例属性名,这是可以自己随便命名的(但在pygame中通常用rect表示矩形区域)
  • get_rect() 是pygame提供的方法,名称固定不能更改
python 复制代码
        self.rect.midbottom = self.screen_rect.midbottom  # 设置飞船初始位置
  • self 同上
  • rectmidbottom 是pygame矩形对象的属性,名称固定不能更改
  • screen_rect 是前面定义的实例属性
python 复制代码
    def blitme(self):  # 定义绘制飞船的方法
  • def 是Python自带的关键字
  • blitme 是方法名,这是可以自己随便命名的
  • self 同上
python 复制代码
        self.screen.blit(self.image, self.rect)  # 绘制飞船到屏幕上
  • self 同上
  • screenimagerect 都是前面定义的实例属性
  • blit() 是pygame提供的方法,名称固定不能更改

总结:

  • Python自带的部分:importclassdef__init__self(约定)、. 运算符
  • Pygame固定名称:pygameimage.load()get_rect()blit()rect对象的属性如midbottom
  • 可以自定义命名的:类名Ship、参数名ai_game、所有实例属性名(screenscreen_rectimagerect)、方法名blitme、图片路径字符串

12.4.2 在屏幕上绘制飞船

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

class Egg_yolk:
    def __init__(self):
        pygame.init()
        self.setting = Settings()

        self.eggscreen = pygame.display.set_mode(
            (self.setting.screenwidth, self.setting.screenheight))
        pygame.display.set_caption("曹明娜")

        self.ship = Ship(self)

        # self.scr_color = (0, 0, 0)

    def continue_game(self):
        while True:
            self._check_events()
            self._update_screen()

            # self.eggscreen.fill((0,0,0))
            # self.eggscreen.fill(self.scr_color)
    def _check_events(self):
        for close_event in pygame.event.get():
            if close_event.type == pygame.QUIT:
                sys.exit()

    def _update_screen(self):
            self.eggscreen.fill(self.setting.bgcolor)
            self.ship.blitme()
            pygame.display.flip()

if __name__ == '__main__':
    egg = Egg_yolk()
    egg.continue_game()
bash 复制代码
# 1. 导入Python标准库sys,用于处理系统相关操作(如退出程序)
import sys  # sys是Python自带标准库,名称固定不能修改
# 2. 导入第三方库pygame(需要额外安装),用于游戏开发
import pygame  # pygame是第三方库,名称固定不能修改
# 3. 从自定义模块settings导入Settings类
from settings import Settings  # settings是自定义模块名(可修改),Settings是自定义类名(可修改)
# 4. 从自定义模块ship导入Ship类
from ship import Ship  # ship是自定义模块名(可修改),Ship是自定义类名(可修改)

# 5. 定义自定义类Egg_yolk(类名可自定义)
class Egg_yolk:  # class是Python关键字(固定),Egg_yolk是自定义类名(可修改)
    # 6. 类的初始化方法(方法名固定为__init__)
    def __init__(self):  # def是Python关键字(固定),__init__是特殊方法名(固定),self是约定俗成的参数名(建议不修改)
        # 7. 初始化pygame库(pygame是第三方库,init()是其固定方法)
        pygame.init()  # pygame是库名(固定),init()是固定方法名
        # 8. 创建Settings类的实例(属性名setting可自定义)
        self.setting = Settings()  # self是固定用法,setting是自定义属性名(可修改),Settings()是类实例化(类名需与导入一致)

        # 9. 创建游戏窗口(属性名eggscreen可自定义)
        self.eggscreen = pygame.display.set_mode(  # self固定,eggscreen是自定义属性名(可修改),pygame.display.set_mode是固定方法
            (self.setting.screenwidth, self.setting.screenheight))  # 元组参数,screenwidth和screenheight是Settings类的自定义属性
        # 10. 设置窗口标题
        pygame.display.set_caption("曹明娜")  # pygame.display.set_caption是固定方法,"曹明娜"是自定义标题(可修改)

        # 11. 创建飞船实例(属性名ship可自定义)
        self.ship = Ship(self)  # self固定,ship是自定义属性名(可修改),Ship是类名(需与导入一致)

        # 12. 注释掉的代码(自定义属性scr_color,可任意命名)
        # self.scr_color = (0, 0, 0)  # scr_color是自定义属性名(可修改)

    # 13. 定义游戏主循环方法(方法名continue_game可自定义)
    def continue_game(self):  # def和self固定,continue_game是自定义方法名(可修改)
        # 14. 无限循环(while和True都是Python关键字,固定)
        while True:  # while和True是Python关键字(固定)
            # 15. 调用事件处理方法(方法名_check_events可自定义)
            self._check_events()  # self固定,_check_events是自定义方法名(可修改,下划线开头通常表示内部方法)
            # 16. 调用屏幕更新方法(方法名_update_screen可自定义)
            self._update_screen()  # self固定,_update_screen是自定义方法名(可修改)

            # 17. 注释掉的屏幕填充代码
            # self.eggscreen.fill((0,0,0))
            # self.eggscreen.fill(self.scr_color)
    
    # 18. 定义事件处理方法(方法名_check_events可自定义)
    def _check_events(self):  # def和self固定,_check_events是自定义方法名(可修改)
        # 19. 遍历pygame事件(pygame.event.get()是固定方法)
        for close_event in pygame.event.get():  # for、in是Python关键字(固定),close_event是自定义循环变量(可修改)
            # 20. 检查窗口关闭事件(pygame.QUIT是固定常量)
            if close_event.type == pygame.QUIT:  # if是Python关键字(固定),type是事件对象的固定属性,pygame.QUIT是固定常量
                # 21. 退出程序(sys.exit()是标准库方法)
                sys.exit()  # sys是标准库名(固定),exit()是固定方法

    # 22. 定义屏幕更新方法(方法名_update_screen可自定义)
    def _update_screen(self):  # def和self固定,_update_screen是自定义方法名(可修改)
            # 23. 填充屏幕背景色(eggscreen是自定义属性,fill是固定方法)
            self.eggscreen.fill(self.setting.bgcolor)  # self固定,eggscreen是自定义属性,fill是固定方法,bgcolor是自定义属性
            # 24. 绘制飞船(ship是自定义属性,blitme是自定义方法)
            self.ship.blitme()  # self固定,ship是自定义属性,blitme是自定义方法
            # 25. 更新屏幕(pygame.display.flip()是固定方法)
            pygame.display.flip()  # pygame.display是固定模块,flip()是固定方法

# 26. 判断是否为主程序入口(__main__是Python固定变量)
if __name__ == '__main__':  # if、==是Python关键字(固定),__name__和__main__是Python固定变量
    # 27. 创建游戏实例(egg是自定义变量名,Egg_yolk是自定义类名)
    egg = Egg_yolk()  # egg是自定义变量名(可修改),Egg_yolk是自定义类名(需与定义一致)
    # 28. 启动游戏主循环(continue_game是自定义方法)
    egg.continue_game()  # egg是自定义变量,continue_game是自定义方法

总结