当前位置: 首页 > news >正文

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

文章目录

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


提示:

12.3.2设置背景色

在这里插入图片描述

12.3.3 创建设置类

在这里插入图片描述

12.4 添加飞船图像

12.4.1 创建Ship 类

import  pygameclass Ship:# "管理飞船的类def __init__(self, ai_game):# 初始化飞船并设置其初始位置。self.screen = ai_game.screenself.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.midbottomdef blitme(self):# 在指定位置绘制飞船。self.screen.blit(self.image, self.rect)

逐行分析这段代码:

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

import sys
import pygame
from settings import Settings
from ship import Shipclass 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()
# 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是自定义方法

总结

在这里插入图片描述

http://www.dtcms.com/a/340008.html

相关文章:

  • 【语法糖】什么是语法糖
  • RK3568 Linux驱动学习——Linux设备树
  • bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十四)
  • for-else 流程控制结构介绍
  • AVL树、红黑树理解
  • 人脸识别智慧检测算法在人群聚集场景应用
  • 关于less/sass两个css预处理器的总结
  • C++常用容器详解:原理、适用场景与代码示例
  • CentOS上安装Docker的完整流程
  • CSP与XSS
  • web开发,在线%服装商城开发demo,基于html,css,jquery,asp.net,webform,sqlserver数据库
  • CNN-LSTM-Attention、CNN-LSTM、LSTM三模型多变量时序光伏功率预测
  • 深度学习图解:神经网络如何学习?
  • [Linux] 网络中的 `tun` 模式
  • 无人机场景 - 目标检测数据集 - 山林野火烟雾检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • Android13车机系统自定义系统栏显示策略之状态栏下拉异常
  • 决策树算法学习总结
  • 楼宇自控系统的应用,已然成为智能建筑行业发展方向
  • 将字符串“1,2,3“转换为“1‘,‘2‘,‘3‘“
  • Hive常用命令参考
  • 如何保证ES和数据库的数据一致性?
  • java基础(十二)redis 日志机制以及常见问题
  • langChain—状态管理:跟踪复杂任务的上下文流程
  • Linux 进程间通信(IPC):信号、共享内存
  • 内网后渗透攻击--隐藏通信隧道技术(压缩、上传,下载)
  • 19. 大数据-产品概念
  • MySQL 从入门到精通 11:触发器
  • 【群晖NAS】在openwrt上实现内网穿透,并配置外网IP映射(Debian/Ubuntu)
  • 2025-08-19利用opencv检测图片中文字及图片的坐标
  • RocketMq消费者动态订阅topic