文章目录
- 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
同上rect
、midbottom
是pygame矩形对象的属性,名称固定不能更改screen_rect
是前面定义的实例属性
python
def blitme(self): # 定义绘制飞船的方法
def
是Python自带的关键字blitme
是方法名,这是可以自己随便命名的self
同上
python
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 在屏幕上绘制飞船
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是自定义方法
总结
