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
同上rect
、midbottom
是pygame矩形对象的属性,名称固定不能更改screen_rect
是前面定义的实例属性
def blitme(self): # 定义绘制飞船的方法
def
是Python自带的关键字blitme
是方法名,这是可以自己随便命名的self
同上
self.screen.blit(self.image, self.rect) # 绘制飞船到屏幕上
self
同上screen
、image
、rect
都是前面定义的实例属性blit()
是pygame提供的方法,名称固定不能更改
总结:
- Python自带的部分:
import
、class
、def
、__init__
、self
(约定)、.
运算符 - Pygame固定名称:
pygame
、image.load()
、get_rect()
、blit()
、rect
对象的属性如midbottom
- 可以自定义命名的:类名
Ship
、参数名ai_game
、所有实例属性名(screen
、screen_rect
、image
、rect
)、方法名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是自定义方法