Skip to content

Commit 78a7384

Browse files
committed
[学习内容]外星人入侵项目实践
1.飞船移动 2.飞船设置移动速度 3.飞船设置移动边界
1 parent d28691e commit 78a7384

4 files changed

Lines changed: 77 additions & 15 deletions

File tree

alien_invasion.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
import pygame
66
from settings import Settings
77
from ship import Ship
8-
8+
import game_functions as gf
99

1010
def run_game():
1111
"""初始化游戏并创建一个屏幕对象"""
1212
pygame.init()
1313
ai_settings = Settings()
14+
1415
scrren = pygame.display.set_mode((ai_settings.scrren_width, ai_settings.scrren_height))
1516
pygame.display.set_caption("Alien Invasion")
1617

@@ -19,22 +20,16 @@ def run_game():
1920

2021
# 创建一艘飞船
2122
ship = Ship(scrren)
23+
ship.set_move_speed(5)
2224

2325
# 开始游戏的主循环
2426
while True:
27+
# 监视键盘和鼠标事件
28+
gf.check_event(ship)
2529

26-
# 监视键盘和鼠标事件
27-
for event in pygame.event.get():
28-
if event.type == pygame.QUIT:
29-
sys.exit()
30-
31-
# 每次循环时都重绘屏幕
32-
scrren.fill(ai_settings.bg_color)
33-
ship.blitme()
34-
35-
# 让最近绘图的屏幕可见
36-
pygame.display.flip()
37-
30+
# 每次循环时都重绘屏幕
31+
gf.update_scrren(ai_settings, scrren, ship)
32+
ship.update()
3833

3934
print run_game.__doc__
4035
run_game()

game_functions.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#coding: utf-8
2+
3+
import sys
4+
import pygame
5+
6+
7+
def check_event(ship):
8+
#监视键盘和鼠标事件
9+
for event in pygame.event.get():
10+
if pygame.QUIT == event.type:
11+
sys.exit()
12+
elif pygame.KEYDOWN == event.type:
13+
if pygame.K_RIGHT == event.key:
14+
#向右移动飞船
15+
ship.moving('right')
16+
ship.update()
17+
if pygame.K_LEFT == event.key:
18+
#向左移动飞船
19+
ship.moving('left')
20+
ship.update()
21+
elif pygame.KEYUP == event.type:
22+
ship.stop()
23+
24+
def update_scrren(ai_settings, scrren, ship):
25+
"""更新屏幕上的图像"""
26+
# 每次循环时都重绘屏幕
27+
scrren.fill(ai_settings.bg_color)
28+
ship.blitme()
29+
30+
#让最近绘图的屏幕可见
31+
pygame.display.flip()

settings.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,9 @@ def __init__(self):
1212
self.scrren_height = 800
1313
self.bg_color = (100, 100, 100)
1414

15+
def set_ship(self, ship, speed):
16+
ship.set_move_speed(speed)
17+
18+
class Setting_Ship():
19+
"""飞船通用设置集合"""
1520

ship.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,43 @@ def __init__(self, scrren):
1111
self.image = pygame.image.load('ship.png')
1212
self.rect = self.image.get_rect()
1313
self.scrren_rect = scrren.get_rect()
14+
# 持续移动标志
15+
self.__moving_riht = False
16+
self.__moving_left = False
17+
self.speed_factor = 1
1418

15-
# 将每艘飞船防止在屏幕底部中央
16-
self.rect.centerx = self.scrren_rect.centerx
19+
# 将每艘飞船防止在屏幕底部中央
20+
self.rect.centerx = (self.scrren_rect.right + self.scrren_rect.left) / 2
1721
self.rect.bottom = self.scrren_rect.bottom
22+
self.self_center = self.rect.centerx
23+
1824

1925
def blitme(self):
2026
"""在指定位置放置飞船"""
2127
self.scrren.blit(self.image, self.rect)
2228

29+
def update(self):
30+
"""根据移动标志调整飞船的位置"""
31+
32+
if True == self.__moving_riht and self.rect.right < self.scrren_rect.right:
33+
self.self_center += self.speed_factor
34+
35+
if True == self.__moving_left and self.rect.left > self.scrren_rect.left:
36+
self.self_center -= self.speed_factor
37+
38+
self.rect.centerx = self.self_center
39+
40+
def moving(self, direction):
41+
if 'left' == direction:
42+
self.__moving_left = True
43+
elif 'right' == direction:
44+
self.__moving_riht = True
45+
46+
def stop(self):
47+
"""停止移动,将移动标志位都设置为FALSE"""
48+
self.__moving_left = False
49+
self.__moving_riht = False
50+
51+
def set_move_speed(self, speed):
52+
"""设置飞船移动速度"""
53+
self.speed_factor = float(speed)

0 commit comments

Comments
 (0)