当前位置: 首页 > 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.lryc.cn/news/625810.html

相关文章:

  • 用MacBook进行LLM简单人类指令微调
  • 蓝凌EKP产品:JSP 项目性能基于业务维度的 JS 压缩合并方案优化实战
  • 供水设备智慧化管理物联网解决方案:远程监控与运维
  • 操作系统:多线程、进程管理、内存分配、任务调度等
  • IC验证 AHB-RAM 项目(二)——接口与事务代码的编写
  • 比赛准备之环境配置
  • Nginx前后端分离反代(VUE+FastAPI)
  • 卫生许可证识别技术:通过OCR与NLP实现高效合规管理,提升审核准确性与效率
  • Apache IoTDB 大版本升级记录(成熟的2.0.2版本)
  • 汇编语言学习2---GNU Debugger (GDB)
  • PiscCode迅速集成YOLO-Pose 实现姿态关键点轨迹跟踪应用
  • 疏老师-python训练营-Day50预训练模型+CBAM注意力
  • PHP如何使用JpGraph生成折线图?
  • NVIDIA 优化框架:Jetson 平台 PyTorch 安装指南
  • vue,H5车牌弹框定制键盘包括新能源车牌
  • 楼宇自控系统的应用,已然成为智能建筑行业发展方向
  • 【网络运维】Playbook部署文件:Files模块库&JINJA2模板
  • 18650锂电池自动化生产线:智能集成提升制造效能
  • Qt猜数字游戏项目开发教程 - 从零开始构建趣味小游戏
  • 厚板数控矫平机的“第三堂课”——把视角拉远,看看它如何重塑整条制造链
  • AUTOSAR进阶图解==>AUTOSAR_SWS_FlashEEPROMEmulation
  • 星链之供应链:SpaceX供应链韧性密码,70%内部制造+模块化设计,传统航天企业如何追赶?
  • 数字孪生 :提高制造生产力的智能方法
  • 写代码的方式部署glm-4-9b-chat模型:gradio和api两种模式
  • python学习DAY46打卡
  • Apache ECharts 6.0.0 版本-探究自定义动态注册机制(二)
  • npm下的scratch(少儿编程篇)
  • 使用segment-anything将目标检测label转换为语义分割label
  • 零售行业新店网络零接触部署场景下,如何选择SDWAN
  • 【Proteus仿真】【51单片机】基于51单片机自动售货机12864屏幕