Skip to content

Commit a9fa4cf

Browse files
committed
[学习内容]外星人入侵项目实践
1. 添加多行外星人 问题:图像刷新速度变慢,进程慢了很多 待解决:加入多线程或许可以解决
1 parent a0108e5 commit a9fa4cf

File tree

4 files changed

+42
-22
lines changed

4 files changed

+42
-22
lines changed

alien.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ def update(self):
4444
"""重写更新函数,根据移动规则改变外星人位置"""
4545
# self.__y += self.__speed
4646
# self.__x += self.__speed
47-
self.__rect.y = self.__y
47+
# self.__rect.y = self.__y
4848
# self.__rect.x = self.__x
49-
self.__center = self.__rect.centerx
49+
# self.__center = self.__rect.centerx
5050

5151
def moving(self):
5252
"""移动外星人"""
@@ -86,10 +86,10 @@ def get_self_center(self):
8686
return self.__center
8787

8888
def get_distance_alien(self):
89-
return self.__distance_alien
89+
return self.__min_distance_alien
9090

9191
def get_distance_wall(self):
92-
return self.__distance_wall
92+
return self.__min_distance_wall
9393

9494

9595

alien_invasion.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def run_game():
2929
alien_num = ai_settings.cal_alien_num_line_default(scrren)
3030
print alien_num
3131
gf.creat_fleet_alien(scrren, aliens, alien_num)
32-
ai_settings.set_alien_info_default(aliens)
32+
ai_settings.set_alien_info_default(aliens, alien_num)
3333

3434
# 开始游戏的主循环
3535
while True:

game_functions.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ def redraw_alien(aliens):
5959
# aliens.update()
6060
# aliens_num = len(aliens)
6161
# aliens.draw(scrren)
62+
# print len(aliens)
6263
for alien in aliens:
6364
alien.blitme()
6465

@@ -83,7 +84,9 @@ def redraw_scrren(bg_color, scrren, ship, aliens):
8384

8485
def creat_fleet_alien(screen, aliens, aliens_num):
8586
"""创建一群外星人"""
86-
for alien in range(aliens_num):
87-
alien = Alien(screen)
88-
aliens.add(alien)
87+
for row in range(aliens_num['row_num']):
88+
for alien in range(aliens_num['list_num']):
89+
alien = Alien(screen)
90+
aliens.add(alien)
8991

92+
print len(aliens)

settings.py

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ def __init__(self):
1212
# 屏幕设置
1313
self.scrren_width = 1200
1414
self.scrren_height = 800
15-
self.bg_color = (255, 255, 255)
15+
self.bg_color = (230, 230, 230)
1616

1717
# 飞船设置
18-
self.ship_speed = 1.5
19-
self.ship_bullet_allowed = 10
18+
self.ship_speed = 10
19+
self.ship_bullet_allowed = 100
2020

2121
# 子弹设置
2222
self.bullet_speed = 1
@@ -30,9 +30,10 @@ def __init__(self):
3030
#
3131
self.alien_width = 60
3232
self.alien_height = 60
33-
self.alien_min_distance_alien = 20
33+
self.alien_min_distance_list = 10
34+
self.alien_min_distance_row = 10
3435
self.alien_min_distance_wall = 10
35-
self.alien_min_distance_bottom = 30
36+
self.alien_min_distance_bottom = 10
3637
self.alien_min_distance_top = 60
3738

3839
def set_ship(self, ship, speed, bullet):
@@ -69,22 +70,38 @@ def cal_alien_num_line(self, alien_distance_alien, alien_distance_wall, alien_wi
6970

7071
def cal_alien_num_line_default(self, scrren):
7172
"""计算一行可以放置多少外星人"""
73+
alien_num = {}
7274
scrren_rect = scrren.get_rect()
73-
num = int((scrren_rect.width - 2 * self.alien_min_distance_wall + self.alien_width) \
74-
/ (self.alien_min_distance_alien + self.alien_width))
75-
return num
75+
list_num = int((scrren_rect.width - 2 * self.alien_min_distance_wall + self.alien_width) \
76+
/ (self.alien_min_distance_list + self.alien_width))
77+
78+
row_num = int( (scrren_rect.height - self.alien_min_distance_bottom - self.alien_min_distance_top \
79+
+ self.alien_height) /(self.alien_min_distance_row + self.alien_height))
80+
if 4 < row_num:
81+
row_num = 4
82+
# row_num -= 2
83+
alien_num['list_num'] = list_num
84+
alien_num['row_num'] = row_num
85+
return alien_num
7686

77-
def set_alien_info_default(self, aliens):
87+
def set_alien_info_default(self, aliens, alien_num):
7888
"""设置外星人属性"""
79-
num = 1
89+
row_num = 1
90+
list_num = 1
8091
for alien in aliens:
8192

8293
rect = alien.get_rect()
8394
alien_width = alien.get_width()
84-
# alien_height = alien.get_height()
85-
rect.y = self.alien_min_distance_bottom
86-
rect.x = self.alien_min_distance_wall + (num - 1) * (alien_width + self.alien_min_distance_alien)
95+
alien_height = alien.get_height()
96+
rect.y = self.alien_min_distance_bottom + (row_num - 1) * (alien_height + self.alien_min_distance_row)
97+
rect.x = self.alien_min_distance_wall + (list_num - 1) * (alien_width + self.alien_min_distance_list)
8798
alien.set_rect(rect)
88-
num += 1
99+
100+
list_num += 1
101+
if list_num > alien_num['list_num']:
102+
print list_num
103+
print row_num
104+
list_num = 1
105+
row_num += 1
89106

90107
return True

0 commit comments

Comments
 (0)