今日任务:
- 创建一个空的Pygame窗口
- 添加设置类
1.1:创建 Pygame 窗口以及响应用户输入
alien_invasion.py
import sys
import pygame
def run_game():
# 初始化游戏并创建一个屏幕对象
pygame.init()
screen = pygame.display.set_mode((1200, 800))
pygame.display.set_caption("外星人入侵")
# 开始游戏的主循环
while True:
# 监视键盘和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 让最近绘制的屏幕可见
pygame.display.flip()
run_game()
理解注释
- 代码行pygame.init()初始化背景设置
- 调用pygame.display.set_mode()来创建一个名为screen的显示窗口
- 实参(1200, 800)是一个元组,指定了游戏窗口的尺寸
- 对象screen是一个surface。在Pygame中, surface是屏幕的一部分,用于显示游戏元素。
- 我们激活游戏的动画循环后,每经过一次循环都将自动重绘这个surface。
- 这个游戏由一个while循环控制,其中包含一个事件循环以及管理屏幕更新的代码。
- 为访问Pygame检测到的事件,我们使用方法pygame.event.get()
- 玩家单击游戏窗口的关闭按钮时,将检测到pygame.QUIT事件,而我们调用sys.exit()来退出游戏
- pygame.display.flip(),命令Pygame让最近绘制的屏幕可见,pygame.display.flip()将不断更新屏幕,以显示元 素的新位置,并在原来的位置隐藏元素,从而营造平滑移动的效果。
- 最后一行调用run_game(),这将初始化游戏并开始主循环
1.2设置背景颜色
alien_invasion.py
--snip--
def run_game():
--snip--
pygame.display.set_caption("外星人入侵")
# 设置背景颜色
bg_color = (230, 230, 230)
# 开始游戏的主循环
while True:
# 监视键盘和鼠标事件
--snip--
# 每次循环时都会重绘屏幕
screen.fill(bg_color)
# 让最近绘制的屏幕可见
pygame.display.flip()
run_game()
理解注释
- 我们创建了一种背景色,并将其存储在bg_color中
- 我们调用方法screen.fill(),用背景色填充屏幕
1.3创建设置类
settings.py
class Settings():
"""存储外星人入侵所有设置"""
def __init__(self):
"""初始化游戏的设置"""
# 屏幕设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)
alien_invasion
import sys
import pygame
from settings import Settings
def run_game():
# 初始化游戏并创建一个屏幕对象
pygame.init()
pygame.display.set_caption("外星人入侵")
ai_settings = Settings()
screen = pygame.display.set_mode(
(ai_settings.screen_width, ai_settings.screen_height))
# 开始游戏的主循环
while True:
# 监视键盘和鼠标事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 每次循环时都会重绘屏幕
screen.fill(ai_settings.bg_color)
# 让最近绘制的屏幕可见
pygame.display.flip()
run_game()
理解注释
在主程序文件中,我们导入Settings类,调用pygame.init(),再创建一个Settings实例,并将其存储在变量 ai_settings中。创建屏幕时,使用了ai_settings的属性screen_width和screen_height;接下来填充屏幕时,也使用了ai_settings来访问背景色。
知识点
在 python 用 import 或者 from...import 来导入相应的模块
将整个模块(somemodule)导入,格式为import sys
从某个模块中导入某个函数,格式为: from setting import SettingsPython中单行注释以 # 开头;多行注释可以用多个 # 号,还有 ''' 和 """
python保留字
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {}
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
标准数据类型
Python3 中有六个标准的数据类型:
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。元组:元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。函数调用
定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:
加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
# 可写函数说明
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print ("输出: ")
print (arg1)
print (vartuple)
# 调用printinfo 函数
printinfo( 70, 60, 50 )
加了两个星号 ** 的参数会以字典的形式导入
模块:模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
类对象
类对象支持两种操作:属性引用和实例化。
属性引用使用和 Python 中所有的属性引用一样的标准语法:obj.name。
类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样:
class MyClass:
"""一个简单的类实例"""
i = 12345
def f(self):
return 'hello world'
# 实例化类
x = MyClass()
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())
类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:
def __init__(self):
self.data = []
类的方法
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例,而非类。
#类定义
class people:
#定义基本属性
name = ''
age = 0
#定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0
#定义构造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
# 实例化类
p = people('runoob',10,30)
p.speak()
总结
1.函数的参数没有数据类型,没有IDE提示了
2.不用写大括号了