《python编程从⼊门到实践》——武装飞船详解
⼀.创建pygame窗⼝及响应⽤户输⼊
import pygame
import sys
def run_game():
# 初始化游戏并创建⼀个屏幕对象
pygame.init()
screen = pygame.display.set_mode(1200,800)
pygame.display.set_caption('Alien Invasion')
while True :
# 监视⿏标键盘是否有QUIT事件
for event in ()
pe == pygame.QUIT()
# 让最近绘制的屏幕可见
pygame.dispaly.flip()
run_game()
1.pygame.init()
init的作⽤是初始话,在初始化之前,⽆法做任何事情。
当我们调⽤python.init()的时候python.display会⾃动初始化。有着向下传递的关系。
2.dispaly模块
这⾥有⼗分详细的解释display的函数的解释
链接: .
3.event
()的意思是监控⿏标和键盘每⼀个动作,⽽pygame.QUIT()中的QUIT是⼀个事件,可以理解为⿏标或键盘的某种操作(我认为就是⿏标点击×)
4.sys
不做解释.这⾥有sys模块的详解。
⼆.背景⾊
⽤⼀个变量bg_color只是⼀个好记的名字,也可以是ag_color。
screen.fill(R,G,B)中screen表⽰的就是调⽤出来的屏幕对象,fill函数中RGB三个参数分别表⽰:红⾊(R),绿⾊(G)和蓝⾊(B)
三.创建设置类
class Settings():
"""储存《外星⼈⼊侵》的所有设置的类"""
def __init__(self):
"""初始化屏幕设置"""
self.screen_width = 1200
self.screen_height = 800
self.ag_color = (230,232,230)
我将它下⾯的代码放在⼀起来讲
def run_game():
# 初始化游戏并创建⼀个屏幕对象
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
ag_color = ai_settings.ag_color
pygame.display.set_caption('Alien Invasion')
# 开始游戏的主循环
while True :
while True :
# 监视⿏标键盘是否有QUIT事件
for event in ()
pe == pygame.QUIT()
#每次循环时都重绘屏幕
screen.fill(ai_settings.bg_color)
# 让最近绘制的屏幕可见
pygame.dispaly.flip()
run_game()
python新手代码及作用
1.Settings类的建⽴
因为⼀个游戏中要设置的东西⼗分多,我们可以将所有东西放在⼀个类中,这样可以显得简单⼀些。
**这是⼀个需要养成的好习惯!**如果没⽤这个类,当我们要更改数据时,我们则需要⼀个⼀个去翻,⼗分⿇烦。
2.ai_settings = Settings()
ai_settings做为Settings的实例,ai_settings的属性在类中已经定义过,将他们放在改放的位置即可。3.飞船
添加图像可⾃⼰安装书本操作。
import pygame
class Ship():
def __init__(self,screen,ai_settings):
"""初始化飞船并设置初始位置"""
self.screen = screen
self.ai_settings = ai_settings
# 加载飞船图像并获取其外接矩形
self.image = pygame.image.load(image/ship.bmp')
< = _rect()
# self.screen_rect = _rect()
# 将每艘飞船放在屏幕底部中央
def blitme(self):
"""在指定位置绘制飞船"""
self.screen.blit(self.)
1.self.iamge = pygame.image.load(‘image/ship.bmp’’)
这个pygame.image.load()函数,参数接受的是你图像的地址,返回的是⼀个表⽰飞船的surface,
值得注意的是,当初的screen也是⼀个surface,我们在这⾥姑且将surface当作⼀个画板。
self.image就是飞船的图像。
关于image这⾥有详解
<
get_rect()是⼀个处理矩形图像的⽅法,返回值包含矩形的居中属性( center centerx centery ) top bottom left right
<() = _rect()的意思及把self.image的属性返回并符值给()
***self.screen_rect = _rect()***这⼀步的理解⼗分重要
⾸先是对self.screen_rect的理解,这⾥的self很明显等等会作为Ship创造ship飞船的实例,ship.screen_rect的意思就是飞船这个实例⾥⾯的屏幕。但是其实我认为这⼀步是可以省略的,我们⼤可把x = self.x中的self.screen_rect换成_rect()。(有可能换了代码会⽐较难读懂,但是换了也是正确的。)
接下来的重构我就不解读,安装书本上的来即可,养成好习惯
4.驾驶飞船
这是我ship.py最终的版本,我的书本可以有所不同,我的增加了上下键
import pygame
class Ship():
def __init__(self,screen,ai_settings):
"""初始化飞船并设置初始位置"""
self.screen = screen
self.ai_settings = ai_settings
# 加载飞船图像并获取其外接矩形
self.image = pygame.image.load(r'C:\Users\86183\Pictures\Saved Pictures\plane.png')
< = _rect()
# self.screen_rect = _rect()
# 将每艘飞船放在屏幕底部中央
# 在飞船的书写center中储存⼩数值
<_x = enterx)
<_y = entery)
# 移动标志
def update(self):
"""根据移动标志调整飞船的位置"""
# 跟新飞船center的值,⽽不是rect
# 当还是使⽤x或y时,当速度为1.5⼩数时,向下和向右的速度不对还是1,这是因为centerx(y)⼀直都是整数并不会因为参与⼩数运算变成⼩数(但是⼀般来说整数应该要变成⼩数)
ving_right ight < _rect().right:
<_x += self.ai_settings.ship_speed_factor
ving_left left > 0:
<_x -= self.ai_settings.ship_speed_factor
ving_bottom bottom < _rect().bottom:
<_y += self.ai_settings.ship_speed_factor
ving_top op > 0:
<_y -= self.ai_settings.ship_speed_factor
# 向上下的加减要注意,因为屏幕是以左上点为(0,0)
# 根据更新rect对象,因为最终输出的位置的参数是的xy
def blitme(self):
"""在指定位置绘制飞船"""
self.screen.blit(self.)
1.我们先来解释⼏个词
KEYDOWN——当我们按下任何⼀个键是,我们将创造⼀个KEYDOWN事件,可以理解为我们按下的键
KEYUP——当我们松开任何⼀个键时,我们将创造⼀个KEYUP事件。
K_RIGHT(LEFT,UP,DOWN)——我们按下的"上"“下”“左”"右"键
当我们理解这些词我们⼤概也就跟好的理解了代码。
2.书中的 = enterx)
这⼀步我认为是最难理解的。
⾸先,中的center并不是什么属性,仅仅只是个变量名字,意思是让原来x变成浮点型,并储存在中。
第⼆,为什么要变成浮点型呢?
a = 2
print(type(a))
b = 1.5
a =
b * a
print(a)
print(type(a))
<class'int'>
3
<class'float'>
这个例⼦我们很清楚的可以看出当整型和浮点型运算后⼀定是浮点型,就算运算结果等于整数,那么我们的x也会这样嘛?答案是否定的,x⼀直都是整型!
当然那就不⽤更新了。
我将x⽅向还是不变,然后去寻x的类型
我在这⾥设的是1.5,按照正常情况这个x和1.5运算应该是浮点型

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。