效果演示 源码
plane_main1.py
import pygame
from plane_sprites import *
import time
class PlaneGame ( object ) :
"""飞机大战主游戏"""
def __init__ ( self) :
print ( "游戏初始化" )
self. screen = pygame. display. set_mode( SCREEN_RECT. size)
self. clock = pygame. time. Clock( )
self. __create_sprites( )
pygame. time. set_timer( CREATE_ENEMY_EVENT, 1000 )
pygame. time. set_timer( HERO_FIRE_EVENT, 300 )
def __create_sprites ( self) :
bg1 = Background( )
bg2 = Background( True )
self. back_group = pygame. sprite. Group( bg1, bg2)
self. enemy_group = pygame. sprite. Group( )
self. hero = Hero( )
self. hero_group = pygame. sprite. Group( self. hero)
def start_game ( self) :
print ( "游戏开始..." )
while True :
self. clock. tick( FRAME_PER_SEC)
self. __event_handler( )
self. __check_collide( )
self. __update_sprites( )
pygame. display. update( )
def __event_handler ( self) :
for event in pygame. event. get( ) :
if event. type == pygame. QUIT:
PlaneGame. __game_over( )
elif event. type == CREATE_ENEMY_EVENT:
enemy = Enemy( )
self. enemy_group. add( enemy)
elif event. type == HERO_FIRE_EVENT:
self. hero. fire( )
keys_pressed = pygame. key. get_pressed( )
if keys_pressed[ pygame. K_RIGHT] :
self. hero. speed = 8
elif keys_pressed[ pygame. K_LEFT] :
self. hero. speed = - 8
else :
self. hero. speed = 0
def __check_collide ( self) :
pygame. sprite. groupcollide( self. hero. bullets, self. enemy_group, True , True )
enemies = pygame. sprite. spritecollide( self. hero, self. enemy_group, True )
if len ( enemies) > 0 :
self. hero. kill( )
m = "./sound/use_bomb.wav"
pygame. mixer. music. load( m)
pygame. mixer. music. play( )
time. sleep( 2 )
PlaneGame. __game_over( )
def __update_sprites ( self) :
self. back_group. update( )
self. back_group. draw( self. screen)
self. enemy_group. update( )
self. enemy_group. draw( self. screen)
self. hero_group. update( )
self. hero_group. draw( self. screen)
self. hero. bullets. update( )
self. hero. bullets. draw( self. screen)
@staticmethod
def __game_over ( ) :
print ( "游戏结束" )
pygame. quit( )
exit( )
if __name__ == '__main__' :
pygame. init( )
game = PlaneGame( )
game. start_game( )
plane_sprites.py
import random
import pygame
SCREEN_RECT = pygame. Rect( 0 , 0 , 480 , 700 )
FRAME_PER_SEC = 15
CREATE_ENEMY_EVENT = pygame. USEREVENT
HERO_FIRE_EVENT = pygame. USEREVENT + 1
class GameSprite ( pygame. sprite. Sprite) :
"""飞机大战游戏精灵"""
def __init__ ( self, image_name, speed= 1 ) :
super ( ) . __init__( )
self. image = pygame. image. load( image_name)
self. rect = self. image. get_rect( )
self. speed = speed
def update ( self) :
self. rect. y += self. speed
class Background ( GameSprite) :
"""游戏背景精灵"""
def __init__ ( self, is_alt= False ) :
super ( ) . __init__( "./images/background.png" )
if is_alt:
self. rect. y = - self. rect. height
def update ( self) :
super ( ) . update( )
if self. rect. y >= SCREEN_RECT. height:
self. rect. y = - self. rect. height
class Enemy ( GameSprite) :
"""敌机精灵"""
def __init__ ( self) :
super ( ) . __init__( "./images/enemy1.png" )
self. speed = random. randint( 1 , 3 )
self. rect. bottom = 0
max_x = SCREEN_RECT. width - self. rect. width
self. rect. x = random. randint( 0 , max_x)
def update ( self) :
super ( ) . update( )
if self. rect. y >= SCREEN_RECT. height:
self. kill( )
def __del__ ( self) :
pass
class Hero ( GameSprite) :
"""英雄精灵"""
def __init__ ( self) :
super ( ) . __init__( "./images/me1.png" , 0 )
self. rect. centerx = SCREEN_RECT. centerx
self. rect. bottom = SCREEN_RECT. bottom - 120
self. bullets = pygame. sprite. Group( )
def update ( self) :
self. rect. x += self. speed
if self. rect. x < 0 :
self. rect. x = 0
elif self. rect. right > SCREEN_RECT. right:
self. rect. right = SCREEN_RECT. right
def fire ( self) :
print ( "发射子弹..." )
for i in ( 0 , 1 , 2 ) :
bullet = Bullet( )
bullet. rect. bottom = self. rect. y - i * 20
bullet. rect. centerx = self. rect. centerx
self. bullets. add( bullet)
class Bullet ( GameSprite) :
"""子弹精灵"""
def __init__ ( self) :
super ( ) . __init__( "./images/bullet1.png" , - 5 )
def update ( self) :
super ( ) . update( )
if self. rect. bottom < 0 :
self. kill( )
def __del__ ( self) :
print ( "子弹被销毁..." )
test
import pygame
import time
pygame. init( )
pygame. mixer. init( )
pingmu = pygame. display. set_mode( [ 500 , 365 ] )
m = "./sound/use_bomb.wav"
pygame. mixer. music. load( m)
pygame. mixer. music. play( )
time. sleep( 5 )