import pygame
import sys
from spaceship import Spaceship
from spacebullet import Spacebullet
from spacealien import Spacealien
from time import sleep
from spaceship_stats import GameStats
class SpaceShipMoving:
def __init__(self):
pygame.init()
self.screen=pygame.display.set_mode((1000,600))
self.bg_color=(170,200,225)
pygame.display.set_caption("小飛船")
self.stats=GameStats(self)
self.spaceship=Spaceship(self)
self.bullets=pygame.sprite.Group()
self.aliens=pygame.sprite.Group()
self._create_fleet()
def run_game(self):
while True:
self._check_event()
if self.stats.game_active:
self.spaceship.update()
self.bullets.update()
self._update_bullets()
self._update_screen()
self.aliens.update()
self._update_alien()
def _check_event(self):
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN:
self._check_down_event(event)
elif event.type==pygame.KEYUP:
self._check_up_event(event)
def _check_down_event(self,event):
if event.key==pygame.K_UP:
self.spaceship.moving_up=True
if event.key==pygame.K_DOWN:
self.spaceship.moving_down=True
if event.key==pygame.K_SPACE:
self._fire_bullet()
def _check_up_event(self,event):
if event.key==pygame.K_UP:
self.spaceship.moving_up=False
if event.key==pygame.K_DOWN:
self.spaceship.moving_down=False
def _fire_bullet(self):
if len(self.bullets)<4:
new_bullet=Spacebullet(self)
self.bullets.add(new_bullet)
def _update_bullets(self):
for bullet in self.bullets.copy():
if bullet.rect.right>self.spaceship.screen_rect.right:
self.bullets.remove(bullet)
#print(len(self.bullets))
collisions=pygame.sprite.groupcollide(self.bullets,self.aliens,True,True)
def _check_alien_left(self):
screen_rect=self.screen.get_rect()
for alien in self.aliens.sprites():
if alien.rect.left<=screen_rect.left:
self._ship_hit()
break
def _ship_hit(self):
if self.stats.ship_left>0:
self.stats.ship_left -= 1
self.bullets.empty()
self.aliens.empty()
self._create_fleet()
self.spaceship.center_ship()
sleep(0.5)
else:
self.stats.game_active=False
def _create_fleet(self):
alien=Spacealien(self)
alien_width,alien_height=alien.rect.size
ship_width=self.spaceship.rect.width
space_available_x=1000-ship_width-alien_width*4
alien_number=space_available_x//(alien_width*2)
space_available_y=600-alien_height*2
row_number=space_available_y//(alien_height*2)
for row in range(row_number):
for number in range(alien_number):
self._create_aliens(number,row)
def _create_aliens(self,number,row):
alien=Spacealien(self)
ship_width=self.spaceship.rect.width
alien_width,alien_height=alien.rect.size
alien.x=ship_width+alien_width*7+(alien_width*2)*number
alien.rect.x=alien.x
alien.y=alien.rect.height+alien.rect.height*2*row
alien.rect.y=alien.y
self.aliens.add(alien)
def _update_alien(self):
if pygame.sprite.spritecollideany(self.spaceship,self.aliens):
self._ship_hit()
self._check_alien_left()
if not self.aliens:
self.bullets.empty()
self._create_fleet()
def _update_screen(self):
self.screen.fill(self.bg_color)#先填充顔色再往上面擺東西
self.spaceship.blitme()
self.aliens.draw(self.screen)
for bullet in self.bullets.sprites():
bullet.draw_bullet()
pygame.display.flip()
if __name__ == "__main__":
s=SpaceShipMoving()
s.run_game()