import sys
import pygame
from bullet import Bullet
from alien import Alien
from time import sleep
def check_keydown_evenrs(event, ai_setting, screen, ship, bullets):
	if event.key == pygame.K_RIGHT:
		ship.moving_right = True
	elif event.key == pygame.K_LEFT:
		ship.moving_left = True
	elif  event.key == pygame.K_UP:
		ship.moving_up = True
	elif  event.key == pygame.K_DOWN:
		ship.moving_down = True
	elif event.key == pygame.K_SPACE:
		fire_buller(ai_setting,screen,ship,bullets)
def check_keyup_events(event, ai_setting, screen, ship, bullets):
	if event.key == pygame.K_RIGHT:
		ship.moving_right = False
	elif event.key == pygame.K_LEFT:
		ship.moving_left = False	
	elif  event.key == pygame.K_UP:
		ship.moving_up = False
	elif  event.key == pygame.K_DOWN:
		ship.moving_down = False
def check_event(ai_setting, screen, ship, bullets, play_button, stats, aliens, sb):
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
			sys.exit()
		elif event.type == pygame.KEYDOWN:
			check_keydown_evenrs(event, ai_setting, screen, ship, bullets)
		elif event.type == pygame.KEYUP:
			check_keyup_events(event, ai_setting, screen, ship, bullets)
		elif event.type == pygame.MOUSEBUTTONDOWN:
			mouse_x, mouse_y = pygame.mouse.get_pos()
			check_play_button(ai_setting, screen, stats, play_button, ship, aliens, bullets, mouse_x, mouse_y,sb)
def update_screen(ai_setting,screen,ship,bullets,aliens,stats,play_button,sb):
	"""刷新屏幕上的图像"""
	screen.fill(ai_setting.bg_color)
	sb.show_score()
	for bullet in bullets.sprites():
		bullet.draw_bullet()
	ship.blitme()
	aliens.draw(screen)
	print(stats.game_active)
	if not stats.game_active:
		play_button.draw_button()
	pygame.display.flip()
def update_bullets(ai_setting,screen,ship,aliens,bullets,sb,stats):
	bullets.update()
	for bullet in bullets.copy():
			if bullet.rect.bottom <= 0:
				bullets.remove(bullet)
	check_bullet_alien_collisions(ai_setting,screen,ship,aliens,bullets,sb,stats)
def check_bullet_alien_collisions(ai_setting,screen,ship,aliens,bullets,sb,stats):
	collisions = pygame.sprite.groupcollide(bullets,aliens,True,True)
	if collisions:
		for aliens in collisions.values():
			stats.score += ai_setting.alien_points * len(aliens)
			sb.prep_score()
		check_high_score(stats, sb)
	if len(aliens) == 0:
		bullets.empty()
		ai_setting.increase_speed()
		stats.level += 1
		sb.prep_level()
		create_fleet(ai_setting,screen,aliens,ship)
def fire_buller(ai_setting,screen,ship,bullets):
	if len(bullets) < ai_setting.bullets_allowed:
		new_bullet = Bullet(ai_setting,screen,ship)
		bullets.add(new_bullet)
def create_fleet(ai_setting,screen,aliens,ship):
	alien = Alien(ai_setting,screen)
	number_aliens_x = get_number_akuebs_x(ai_setting,alien.rect.width)
	number_rows = get_number_row(ai_setting,ship.rect.height,alien.rect.height)
	for row_number in range(number_rows):
		for alien_number in range(number_aliens_x):
			create_alien(ai_setting,screen,aliens,alien_number,row_number)
def get_number_akuebs_x(ai_setting,alien_width):
	available_space_x = ai_setting.screen_width-2 * alien_width
	number_aliens_x = int(available_space_x/(2*alien_width))
	return number_aliens_x
def create_alien(ai_setting,screen,aliens,alien_number,row_number):
	alien = Alien(ai_setting,screen)
	alien_width = alien.rect.width
	alien.x = alien_width+2*alien_width*alien_number
	alien.rect.x = alien.x
	alien.rect.y = alien.rect.height+2*alien.rect.height*row_number
	aliens.add(alien)
def get_number_row(ai_setting,ship_height,alien_height):
	available_space_y = (ai_setting.screen_height-(3*alien_height) - ship_height)
	number_rows = int(available_space_y/(2*alien_height))
	return number_rows

def check_fleet_dedges(ai_setting,aliens):
	for alien in aliens.sprites():
		if alien.check_edges():
			change_fleet_direction(ai_setting,aliens)
			break
def change_fleet_direction(ai_setting,aliens):
	for alien in aliens.sprites():
		alien.rect.y += ai_setting.fleet_drop_speed
	ai_setting.fleet_direction *= -1
def update_aliens(ai_setting,aliens,ship,screen,bullets,sb,stats):
	check_fleet_dedges(ai_setting,aliens)
	aliens.update()
	#检查外星人之间的碰撞
	if pygame.sprite.spritecollideany(ship,aliens):
		print("ship hit !!!!")
	if pygame.sprite.spritecollideany(ship, aliens):
		ship_hit(ai_setting,stats,screen,ship,aliens,bullets,sb)
	if pygame.sprite.spritecollideany(ship, aliens):
		ship_hit(ai_setting, screen, stats, sb, ship, aliens, bullets, sb)
	check_aliens_bottom(ai_setting,stats,screen,ship,aliens,bullets, sb)
	check_bullet_alien_collisions(ai_setting,screen,ship,aliens,bullets,sb,stats)
def ship_hit(ai_setting,stats,screen,ship,aliens,bullets,sb):
	if stats.ship_left > 0:
		stats.ship_left -= 1
		sb.prep_ships()
		aliens.empty()
		bullets.empty()
		create_fleet(ai_setting,screen,aliens,ship)
		ship.center_ship()
		sleep(0.5)
	else:
		stats.game_active = False
		pygame.mouse.set_visible(True)
def check_aliens_bottom(ai_setting,stats,screen,ship,aliens,bullets,sb):
	screen_rect = screen.get_rect()
	for alien in aliens.sprites():
		if alien.rect.bottom >= screen_rect.bottom:
			ship_hit(ai_setting,stats,screen,ship,aliens,bullets,sb)
			break
def check_play_button(ai_setting, screen, stats, play_button, ship, aliens, bullets, mouse_x, mouse_y,sb):
	button_clicked = play_button.rect.collidepoint(mouse_x,mouse_y)
	if button_clicked and not stats.game_active:
			ai_setting.initialize_dynamic_settings()
			pygame.mouse.set_visible(False)
			stats.reset_starts()
			stats.game_active = True
			# 重置记分牌图像
			sb.prep_score()
			sb.prep_high_score()
			sb.prep_level()
			sb.prep_ships()
			# 清空外星人列表和子弹列表
			aliens.empty()
			bullets.empty()
			create_fleet(ai_setting,screen,aliens,ship)
			ship.center_ship()
def check_high_score(stats, sb):
	"""检查是否诞生了新的最高得分"""
	if stats.score > stats.high_score:
		stats.high_score = stats.score
		sb.prep_high_score()