class
TankGame:
my_bullet_list = list()
enemy_bullet_list = list()
enemy_tank_list = list()
wall_list = list()
def __init__(self):
if
not os.path.exists(Tank_IMAGE_POSITION):
os.makedirs(Tank_IMAGE_POSITION)
pygame.init()
pygame.font.init()
self.display = pygame.display
self.window = self.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT], pygame.RESIZABLE, 32)
self.display.set_caption( 坦克世界 )
self.my_tank = MyTank(MY_BIRTH_LEFT, MY_BIRTH_TOP, self.window)
self.creat_enemy_number = 10
self.my_tank_lift = 3
self.creat_enemy(self.creat_enemy_number)
self.creat_walls()
self.font = pygame.font.SysFont( kai_ti , 18)
self.number = 1
def creat_enemy(self, number):
for
_ in range(number):
left = random.randint(0, SCREEN_WIDTH - self.my_tank.tank_width)
enemy_tank = EnemyTank(left, 20, self.window)
TankGame.enemy_tank_list.append(enemy_tank)
def creat_walls(self):
for
i in range(SCREEN_WIDTH
wall_h = random.randint(100, 500)
w = Wall(60 * i, wall_h, self.window)
TankGame.wall_list.append(w)
@staticmethod
def show_walls():
for
w in TankGame.wall_list:
if
w.live:
w.display_wall()
else
:
TankGame.wall_list.remove(w)
def start_game(self):
load_music( start )
while
True:
self.window.fill([0, 0, 0])
self.get_event()
len_enemy = len(TankGame.enemy_tank_list)
self.window.blit(
self.draw_text( 敌方坦克*{0},我方生命值*{1},当前{2}关 .format(len_enemy, self.my_tank_lift, self.number)), (10, 10))
if
len_enemy == 0:
self.creat_enemy_number += 10
self.number += 1
self.my_tank_lift += 1
self.creat_enemy(self.creat_enemy_number)
self.wall_list.clear()
self.creat_walls()
self.show_my_tank()
self.show_enemy_tank()
self.show_bullet(TankGame.enemy_bullet_list)
self.show_bullet(TankGame.my_bullet_list)
self.show_walls()
self.display.update()
time.sleep(0.02)
def show_my_tank(self):
if
self.my_tank.live:
self.my_tank.display()
self.my_tank.tank_collide_tank()
self.my_tank.tank_collide_wall()
else
:
Explode
(self.my_tank, self.window).display_explode()
del self.my_tank
if
self.my_tank_lift == 0:
self.end_game()
self.my_tank_lift -= 1
load_music( add )
self.my_tank = MyTank(MY_BIRTH_LEFT, MY_BIRTH_TOP, self.window)
if
not self.my_tank.move_stop:
self.my_tank.move(self.my_tank.direction)
def show_enemy_tank(self):
for
e in TankGame.enemy_tank_list:
e.random_move()
e.tank_collide_wall()
if
e.live:
e.display()
else
:
TankGame.enemy_tank_list.remove(e)
Explode
(e, self.window).display_explode()
e.random_fire()
def show_bullet(self, ls):
for
b in ls:
b.bullet_move()
b.bullet_collide_wall()
if
ls is TankGame.my_bullet_list:
b.hit_enemy_tank()
b.bullet_collide_bullet()
else
:
b.hit_my_tank(self.my_tank)
if
b.live:
b.display_bullet()
else
:
ls.remove(b)
def get_event(self):
global
SCREEN_WIDTH, SCREEN_HEIGHT
event_list = pygame.event.get()
for
event in event_list:
if
event.type == pygame.VIDEORESIZE:
SCREEN_WIDTH, SCREEN_HEIGHT = event.size
self.window = self.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT], pygame.RESIZABLE, 32)
if
event.type == pygame.QUIT:
self.end_game()
if
event.type == pygame.KEYDOWN:
if
event.key == pygame.K_w:
self.my_tank.direction = U
elif event.key == pygame.K_s:
self.my_tank.direction = D
elif event.key == pygame.K_a:
self.my_tank.direction = L
elif event.key == pygame.K_d:
self.my_tank.direction = R
else
:
return
None
self.my_tank.move_stop = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if
len(TankGame.my_bullet_list) < 3:
bullet = self.my_tank.fire()
load_music( fire )
TankGame.my_bullet_list.append(bullet)
elif event.type == pygame.KEYUP:
self.my_tank.move_stop = True
def end_game(self):
self.display.quit()
sys.
exit
()
def draw_text(self, content):
text_sf = self.font.render(content, True, [255, 0, 0])
return
text_sf