-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsettings.py
More file actions
132 lines (104 loc) · 4.45 KB
/
settings.py
File metadata and controls
132 lines (104 loc) · 4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# coding: utf-8
import ship as SHIP
import bullet as BULLET
import random as Random
class Settings():
"""存储《外星人入侵》的所有设置的类"""
def __init__(self):
"""初始化游戏设置"""
# 屏幕设置
self.scrren_width = 650
self.scrren_height = 700
self.bg_color = (255, 255, 255)
# 飞船设置
self.ship_speed = 10
self.ship_bullet_allowed = 100
self.ship_limit = 3
# 子弹设置
self.bullet_speed = 1
self.bullet_width = 200
self.bullet_height = 80
self.bullet_color = 0, 0, 0
# 外星人设置
self.alien_speed_range = {'low': 0.01, 'high': 0.14}
self.alien_max_num = 10
self.alien_width = 40
self.alien_height = 40
self.alien_min_distance_list = 10
self.alien_min_distance_row = 10
self.alien_min_distance_wall = 10
self.alien_min_distance_bottom = 10
self.alien_min_distance_top = 60
def set_ship(self, ship, speed, bullet):
"""设置飞船属性"""
ship.set_move_speed(speed)
ship.set_bullet_allowed(bullet)
return True
def set_ship_default(self, ship):
"""设置默认飞船属性"""
ship.set_move_speed(self.ship_speed)
ship.set_bullet_allowed(self.ship_bullet_allowed)
ship.set_bullets(self.bullet_width, self.bullet_height, self.bullet_color, self.bullet_speed)
return True
def set_bullet_info(self, bullet, width, height, speed, color):
"""设置子弹属性"""
return bullet.setting_info(width, height, speed, color)
def set_bullet_info_defalut(self, bullet):
"""设置子弹默认属性"""
return bullet.set_info(self.bullet_width,
self.bullet_height,
self.bullet_speed,
self.bullet_color)
def cal_alien_num_line(self, alien_distance_alien, alien_distance_wall, alien_width, scrren):
"""计算一行可以放置多少个外星人"""
# 屏幕宽度 = (外星人数 - 1)* 外星人间距 + 2 * 外星人到墙距离
scrren_rect = scrren.get_rect()
alien_num = int((scrren_rect.width - 2 * alien_distance_wall + alien_distance_alien) \
/ (alien_distance_alien + alien_width))
return alien_num
def cal_alien_num_line_default(self, scrren):
"""计算一行可以放置多少外星人"""
alien_num = {}
scrren_rect = scrren.get_rect()
list_num = int((scrren_rect.width - 2 * self.alien_min_distance_wall + self.alien_width) \
/ (self.alien_min_distance_list + self.alien_width))
row_num = int( (scrren_rect.height - self.alien_min_distance_bottom - self.alien_min_distance_top \
+ self.alien_height) /(self.alien_min_distance_row + self.alien_height))
if 6 < row_num:
row_num = 6
# row_num -= 2
alien_num['list_num'] = list_num
alien_num['row_num'] = row_num
return alien_num
def set_alien_info_default(self, aliens, alien_num):
"""设置外星人属性"""
row_num = 1
list_num = 1
for alien in aliens:
rect = alien.get_rect()
alien_width = alien.get_width()
alien_height = alien.get_height()
rect.y = self.alien_min_distance_bottom + (row_num - 1) * (alien_height + self.alien_min_distance_row)
rect.x = self.alien_min_distance_wall + (list_num - 1) * (alien_width + self.alien_min_distance_list)
alien.set_rect(rect)
alien_speed_set = Random.random()
while (alien_speed_set > self.alien_speed_range['high']) \
or (alien_speed_set < self.alien_speed_range['low']):
alien_speed_set = Random.random()
alien.set_speed(alien_speed_set)
list_num += 1
if list_num > alien_num['list_num']:
list_num = 1
row_num += 1
return True
class GameState():
"""游戏状态数据"""
def __init__(self, ai_settings):
"""初始化统计和状态信息"""
self.ai_settings = ai_settings
self.reset_stats()
self.game_state = 'running'
self.game_active = True
def reset_stats(self):
"""初始化在游戏裕兴期间可能变化的统计信息"""
self.ships_left = self.ai_settings.ship_limit