def run(self):
     pygame.init()
     self.clock = pygame.time.Clock()
     aspect = self.map['width'] * 1.0 / self.map['height']
     self.w = 700
     self.h = int(self.w / aspect)
     self.surface = pygame.display.set_mode((self.w, self.h))
     self.planes = []
     self.planes.append(plane.Plane(self))
     while True:
         dt = 1.0 / FRAME_RATE
         # handle events:
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 break
         # make new planes:
         if random.random() < dt * NEW_PLANES_PER_SECOND:
             self.planes.append(plane.Plane(self))
         # update existing planes:
         for p in self.planes:
             p.advance(dt)
         # render graphics:
         render.render(self)
         pygame.display.update()
         self.clock.tick(FRAME_RATE)
     pygame.quit()
Beispiel #2
0
def TestUnique_3():
    print("###################################################")
    p1 = pl.Plane([0, 1, -1], 2)
    p2 = pl.Plane([1, -1, 1], 2)
    p3 = pl.Plane([3, -4, 1], 1)

    lSys = ls.LinearSystem([p1, p2, p3])
    lSys.SolveSystem()
    print(str(lSys))
Beispiel #3
0
def Test_RandomSystem():
    print("###################################################")
    p1 = pl.Plane([1, 2, 3], 10)
    p2 = pl.Plane([4, 5, 6], 11)
    p3 = pl.Plane([7, 8, 9], 12)

    lSys = ls.LinearSystem([p1, p2, p3])
    lSys.SolveSystem()
    print(str(lSys))
Beispiel #4
0
def Test_InfiniteSolutions_2():
    print("###################################################")
    p1 = pl.Plane([1, 2, 1], -1)
    p2 = pl.Plane([3, 6, 2], 1)
    p3 = pl.Plane([-1, -2, -1], 1)

    lSys = ls.LinearSystem([p1, p2, p3])
    lSys.SolveSystem()
    print(str(lSys))
Beispiel #5
0
def Test_InfiniteSolutions_1():
    print("###################################################")
    p1 = pl.Plane([1, -2, 1], 1)
    p2 = pl.Plane([1, 0, -2], 2)
    p3 = pl.Plane([-1, 4, -4], 0)

    lSys = ls.LinearSystem([p1, p2, p3])
    lSys.SolveSystem()
    print(str(lSys))
Beispiel #6
0
def TestUnique_1():
    print("###################################################")
    p1 = pl.Plane([-1, 1, 1], -2)
    p2 = pl.Plane([1, -4, 4], 21)
    p3 = pl.Plane([7, -5, -11], 0)

    lSys = ls.LinearSystem([p1, p2, p3])
    lSys.SolveSystem()
    print(str(lSys))
Beispiel #7
0
def TestUnique_2():
    print("###################################################")
    p1 = pl.Plane([1, 1, 0], 1)
    p2 = pl.Plane([0, 1, 1], 0)
    p3 = pl.Plane([0, 0, 1], -1)

    lSys = ls.LinearSystem([p1, p2, p3])
    lSys.SolveSystem()
    print(str(lSys))
Beispiel #8
0
    def setUp(self):

        self.neigh2d = Neighborhood(0)
        self.offsets2d = [(-1, 0), (1, 0)]
        self.plane2d = plane.Plane((100, 100))
        self.neigh2d.populate(self.plane2d, self.offsets2d)

        self.neigh3d = Neighborhood(0)
        self.offsets3d = [(-1, 0, 0), (1, 0, 1)]
        self.plane3d = plane.Plane((100, 100, 100))
        self.neigh3d.populate(self.plane3d, self.offsets3d)
 def test_status(self):
     """
     It returns the current status ('flying' by default)
     """
     my_plane = plane.Plane()
     result = my_plane.status
     self.assertEqual(result, 'flying')
Beispiel #10
0
    def createPlane(self, mesh, creator, args):
        """Creates a true plane from a polyPlane node.

        mesh is the mesh node that takes its input from creator.
        creator is an import Node which must be of type polyPlane.
        args is a dictionary that already contains the basic WorldObject
        arguments that can be passed to the constructor.
        """
        parentnode = mesh.getParent()
        w = creator.getAttrValue("width", "w", "float", 1, 1.0)
        h = creator.getAttrValue("height", "h", "float", 1, 1.0)
        sw = creator.getAttrValue("subdivisionWidth", "sw", "int", 1, 1)
        sh = creator.getAttrValue("subdivisionHeight", "sh", "int", 1, 1)
        ax = vec3(
            creator.getAttrValue("axis", "ax", "double3", 1, vec3(0, 1, 0)))

        if ax != vec3(0, 0, 1):
            print "WARNING: Plane %s ignored because axis!=z" % node.getName()
            return

#        args["transform"] *= self.axisToTransform(ax)
        self.getRigidBodyArgs(parentnode, args)
        if "static" in args:
            del args["static"]
        p = plane.Plane(lx=w, ly=h, segmentsx=sw, segmentsy=sh, **args)
        self.newWorldObject(p, parentnode.getName())
Beispiel #11
0
 def run(self,
         omega_plane=540,
         v_plane=240,
         omega_missile=150,
         v_missile=500):
     """ () -> void
     runs the game routine
     ORDER OR OPERATION:
     1. move()
     2. shift()
     3. pos()
     """
     # seed(7)
     self.alive = True
     self.score = 0
     self.init_display()
     self.plane = plane.Plane(400, 200, 0, v_plane, omega_plane, self.fps)
     self.missiles = []
     self.missiles.append(
         missile.Missile(randint(-100, 900), 0, 0, v_missile, omega_missile,
                         0, 0, self.fps, 1))
     try:
         while self.alive:
             # main game loop
             self.mainloop(omega_missile, v_missile)
         cprint("You got destroyed by the AIM9X Sidewinder",
                'red',
                'on_green',
                attrs=['bold'])
         cprint("Press <ENTER> to restart", 'red')
         while not self.alive and self.running:
             # restart loop
             self.restart()
     except KeyboardInterrupt:
         self.quit()
 def test_land(self):
     """
     It changes the plane status to 'landed'
     """
     my_plane = plane.Plane()
     my_plane.land()
     result = my_plane.status
     self.assertEqual(result, 'landed')
Beispiel #13
0
 def reset(self):
     self.sfx = music.Music()
     self.sfx.play_sfx()
     self.speed = 1
     self.tunnel = tunnel.Tunnel()
     self.score = 0
     self.is_paused = False
     self.plane = plane.Plane()
     self.jump_velo = -1
     self.is_game_over = False
Beispiel #14
0
    def setUp(self):
        self.neighborhood = Neighborhood(0)

        self.plane2d = plane.Plane((10, 10))
        self.config2d = Configuration(0,
                                      plane=self.plane2d,
                                      offsets={
                                          (-1, -1): 1,
                                          (-1, 0): 1,
                                          (1, -1): 1,
                                          (0, 0): 1
                                      })

        self.plane3d = plane.Plane((100, 100, 100))
        self.config3d = Configuration(1,
                                      plane=self.plane3d,
                                      offsets={
                                          (-1, 0, 1): 1,
                                          (-2, 1, 1): 1,
                                          (-1, 0, 0): 0
                                      })
Beispiel #15
0
def plane_test():
    import plane
    nx = float(document.getElementById('plane_n_x').value)
    ny = float(document.getElementById('plane_n_y').value)
    nz = float(document.getElementById('plane_n_z').value)
    ox = float(document.getElementById('plane_off_x').value)
    oy = float(document.getElementById('plane_off_y').value)
    oz = float(document.getElementById('plane_off_z').value)
    pl = plane.Plane([nx,ny,nz],[ox,oy,oz])
    document.getElementById('plane_normal').innerHTML = "{}: {}".format('Normal', pl.normal)
    document.getElementById('plane_off').innerHTML = "{}: {}".format('Offset', pl.offset)
    document.getElementById('plane_getXYZ').innerHTML = "{}: {}".format('getXYZ()', pl.getXYZ())
    document.getElementById('plane_goify').innerHTML = "{}: {}".format('goify()', pl.goify())
Beispiel #16
0
    def setUp(self):
        """

        """
        self.plane2d = plane.Plane((100, 100))
        self.config = c.Configuration(1,
                                      plane=self.plane2d,
                                      offsets={
                                          (-1, 0): 1,
                                          (-1, 1): 0,
                                          (0, 1): 1,
                                          (1, 1): 1,
                                      })
Beispiel #17
0
    def __init__(self, cps=1, states=100, dimen=2):
        """
        @cps:    Cell planes. By default this is 1, but can be any positive number. Any non-positive number
                 is assumed to be 1.
        @states: The number of cells that should be included in any dimension. The number of total states
                 will be cps * states^dimen
        @dimen:  The dimensions of the cellular automata. For example, for an N-tuple array, the dimension is N.
        """
        pl_cnt = max(cps, 1)
        grid_dimen = (states,) * dimen

        self.planes = [plane.Plane(grid_dimen) for _ in range(pl_cnt)]
        self.master = self.planes[0]
        self.ticks = [(0, 1)]
        self.total = 0
Beispiel #18
0
    def test_plane_and_line_intersection(self):
        # Setup
        some_point_on_plane = np.array([-2, -4, -4])
        plane_normal = np.array([3, 2, -4])
        _plane = plane.Plane(some_point_on_plane=some_point_on_plane,
                             normal=plane_normal)
        _line = line.Line(point_a=np.array([2, 2, 7]),
                          point_b=np.array([1, 3, 5]))

        # Run
        result = utils.get_plane_and_line_intersection(_plane, _line)

        # Validate
        print(result)
        self.assertTrue(np.isclose(result[0], -0.86, atol=0.1))
        self.assertTrue(np.isclose(result[1], 4.86, atol=0.1))
        self.assertTrue(np.isclose(result[2], 1.29, atol=0.1))
Beispiel #19
0
    def closestPointToPoint(self, point, optionalTarget=None):

        p = plane.Plane()
        edgeList = [line3.Line3(), line3.Line3(), line3.Line3()]
        projectedPoint = vector3.Vector3()
        closestPoint = vector3.Vector3()

        result = optionalTarget or vector3.Vector3()
        minDistance = float("inf")

        # project the point onto the plane of the triangle

        p.setFromCoplanarPoints(self.a, self.b, self.c)
        p.projectPoint(point, projectedPoint)

        # check if the projection lies within the triangle

        if self.containsPoint(projectedPoint) == True:

            # if so, self is the closest point

            result.copy(projectedPoint)

        else:

            # if not, the point falls outside the triangle. the result is the closest point to the triangle"s edges or vertices

            edgeList[0].set(self.a, self.b)
            edgeList[1].set(self.b, self.c)
            edgeList[2].set(self.c, self.a)

            for i in xrange(len(edgeList)):

                edgeList[i].closestPointToPoint(projectedPoint, True,
                                                closestPoint)

                distance = projectedPoint.distanceToSquared(closestPoint)

                if distance < minDistance:

                    minDistance = distance

                    result.copy(closestPoint)

        return result
Beispiel #20
0
def Task7_PlaneIntersections():
    print("###################################################")
    p1 = plane.Plane([-0.412, 3.806, 0.728], -3.46)
    p2 = plane.Plane([1.03, -9.515, -1.82], 8.65)

    p3 = plane.Plane([2.611, 5.528, 0.283], 4.6)
    p4 = plane.Plane([7.715, 8.306, 5.342], 3.76)

    p5 = plane.Plane([-7.926, 8.625, -7.217], -7.952)
    p6 = plane.Plane([-2.692, 2.875, -2.404], -2.443)

    orientation12, intersect12 = p1.GetIntersection(p2)
    orientation34, intersect34 = p3.GetIntersection(p4)
    orientation56, intersect56 = p5.GetIntersection(p6)

    PrintResult_Task7(orientation12, intersect12)
    PrintResult_Task7(orientation34, intersect34)
    PrintResult_Task7(orientation56, intersect56)
Beispiel #21
0
 def setUp(self):
     self.test_environment = elements.Environment()
     self.test_plane = plane.Plane()
Beispiel #22
0
def main():

    running = True


    #敌人和主角索引(毁灭播放)
    enemy_index = 0
    
    b_enemy_index = 0
    my_plane_index = 0

    
    #建立一个主角飞机
    me = plane.Plane(bg_size)
    clock = pygame.time.Clock()

    #刷新状态
    judge_num = 100
    switch_plane = True

    #建立小型飞机敌人列表
    s_enemys = pygame.sprite.Group()

    #建立中型飞机列表
    m_enemys = pygame.sprite.Group()
    
    #大型飞机列表
    b_enemys = pygame.sprite.Group()
    
    all_enemys = pygame.sprite.Group()

    #总分数
    all_grade = 0
    grade_font = pygame.font.Font('font\\font.ttf', 36)

    #建立补给列表
    bomb_rec = pygame.sprite.Group()
    super_rec = pygame.sprite.Group()
    all_rec = pygame.sprite.Group()

    #建立子弹列表
    bullets = pygame.sprite.Group()
    all_bullets = pygame.sprite.Group()

    #炸弹数目
    bomb_num = 3

    #加载炸弹图片
    bomb_image = pygame.image.load(st.bomb)
    bomb_font = pygame.font.Font(st.grade_font, 48)

    

    #判断子弹类型
    is_super = False

    
    while running:
        screen.blit(bg, (0, 0))
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()


            #触发对应事件(小中大飞机出现)
            if event.type == ADD_SE:
                new_s_enemy = enemy.SEnemy(bg_size)
                s_enemys.add(new_s_enemy)
                all_enemys.add(new_s_enemy)

            if event.type == ADD_ME:
                new_m_enemy = enemy.MEnemy(bg_size)
                m_enemys.add(new_m_enemy)
                all_enemys.add(new_m_enemy)

            if event.type == ADD_BE:
                new_b_enemy = enemy.BEnemy(bg_size)
                b_enemys.add(new_b_enemy)
                all_enemys.add(new_b_enemy)

            #子弹事件
            if event.type == EMIT:
                if not is_super:
                    new_bullet = bullet.Bullet(me.rect.midtop)
                    bullets.add(new_bullet)
                else:
                    super_bullet_1 = bullet.Bullet((me.rect.midtop[0] - 35, me.rect.bottom + me.rect.height / 2))
                    super_bullet_2 = bullet.Bullet((me.rect.midtop[0] + 25, me.rect.bottom + me.rect.height / 2))
                    bullets.add(super_bullet_1)
                    bullets.add(super_bullet_2)

            #补给事件
            if event.type == ADD_RE:
                rec_type  = random.choice([True, False])
                if rec_type:
                    new_bomb = recruit.Recruit(bg_size)
                    bomb_rec.add(new_bomb)
                else:
                    new_super_rec = recruit.Recruit(bg_size)
                    super_rec.add(new_super_rec)
                

            if event.type == pygame.KEYDOWN:
                if event.key == K_SPACE:
                    if bomb_num > 0:
                        bomb_num -= 1
                        for e in all_enemys:
                            e.alive = False
                            if e in s_enemys:
                                all_grade += 3000
                            if e in m_enemys:
                                all_grade += 6000
                            else:
                                all_grade += 12000
                
                

        #整个键盘序列,当被按下时,Bool为真
        key_pressed = pygame.key.get_pressed()

        if key_pressed[K_w] or key_pressed[K_UP]:
            me.moveup()

        if key_pressed[K_a] or key_pressed[K_LEFT]:
            me.moveleft()


        if key_pressed[K_s] or key_pressed[K_DOWN]:
            me.movedown()


        if key_pressed[K_d] or key_pressed[K_RIGHT]:
            me.moveright()

        
            


        clock.tick(60)        
        
        

        #飞机动态频率
        if not (judge_num % 5):
            switch_plane = not switch_plane
        judge_num -= 1
        if not judge_num:
            judge_num = 100

            
        #碰撞检测
        enemy_down = pygame.sprite.spritecollide(me, all_enemys, False, pygame.sprite.collide_mask)
        if enemy_down:
            me.alive = False
            for e in enemy_down:
                e.alive = False

        

                
        #检测子弹是否击中
        for b in bullets:
            enemy_hit = pygame.sprite.spritecollide(b, all_enemys, False, pygame.sprite.collide_mask)
            if enemy_hit:
                b.alive = False
                for e in enemy_hit:
                    if e in m_enemys or e in b_enemys:
                        e.hp -= 1
                        if e.hp <= 0:
                            e.alive = False
                            if e in m_enemys:
                                all_grade += 6000
                            else:
                                all_grade += 12000
                            
                    else:
                        e.alive = False
                        all_grade += 3000
                        
                        
        #检测主角是否得到炸弹
        if bomb_rec:
            for e in bomb_rec:
                if e.alive == True:
                    e.move()
                    screen.blit(e.image_1, e.rect)
                    if pygame.sprite.collide_mask(me, e):
                        bomb_num += 1
                        e.alive = False
    
        #检测是否得到超级子弹
        if super_rec:
            for e in super_rec:
                if e.alive == True:
                    e.move()
                    screen.blit(e.image_2, e.rect)
                    if pygame.sprite.collide_mask(me, e):
                        is_super = True
                        e.alive = False
        


        #绘制飞机
        if me.alive:
            if switch_plane:
                screen.blit(me.image_2, me.rect)
            else:
                screen.blit(me.image_1, me.rect)
        else:
            screen.blit(me.d_image[my_plane_index], me.rect)
            my_plane_index = (my_plane_index + 1) % 4
            if my_plane_index == 0:
                pass


        #绘制敌人(小中大飞机)依靠存活状态检测是否毁灭
        for each in all_enemys:
            each.move()
            if each.alive:
                if each not in s_enemys:
                    pygame.draw.line(screen, BLACK, (each.rect.left, each.rect.top - 5),\
                                     (each.rect.right, each.rect.top - 5), 3)
                    hp_res = each.hp / enemy.BEnemy.hp
                    if hp_res:
                        pygame.draw.line(screen, GREEN, (each.rect.left, each.rect.top - 5), \
                                         (each.rect.left + each.rect.width * hp_res, each.rect.top - 5), 3)
                if each in b_enemys:
                    if switch_plane:
                        screen.blit(each.image_1, each.rect)
                    else:
                        screen.blit(each.image_2, each.rect)

                    
                else:
                    screen.blit(each.image, each.rect)

            else:
                if each not in b_enemys:
                    screen.blit(each.d_image[enemy_index], each.rect)
                    enemy_index = (enemy_index + 1) % 4
                    if enemy_index == 0:
                        each.kill()
                   
                else:
                    screen.blit(each.d_image[b_enemy_index], each.rect)
                    b_enemy_index = (b_enemy_index + 1) % 6
                    if b_enemy_index == 0:
                        each.kill()

        #绘制分数
        grade_text = grade_font.render("grade: %s" % str(all_grade), True, WHITE)
        screen.blit(grade_text, (10, 5))

        #绘制子弹
        for each in bullets:
            each.moveup()
            if each.alive:
                if not is_super:
                    screen.blit(each.image, each.rect)
                else:
                    screen.blit(each.image_super, each.rect)
            else:
                each.kill()
                    
        #绘制炸弹数量
        bomb_text = bomb_font.render("X %d" % bomb_num, True, WHITE)
        text_rect = bomb_text.get_rect()
        screen.blit(bomb_image, (10, bg_rect.height - 10 - text_rect.height))
        screen.blit(bomb_text, (20 + text_rect.width, bg_rect.height - 5 - text_rect.height))

        
        #刷新界面
        pygame.display.flip()
Beispiel #23
0
#coding=utf-8

import plane
import vector

v1 = vector.Vector([-0.412, 3.806, 0.728])
p1 = plane.Plane(v1, -3.46)
v2 = vector.Vector([1.03, -9.515, -1.82])
p2 = plane.Plane(v2, 8.65)
print p1.is_parallel(p2)
print p1.is_equal(p2)

v1 = vector.Vector([2.611, 5.528, 0.283])
p1 = plane.Plane(v1, 4.6)
v2 = vector.Vector([7.715, 8.306, 5.342])
p2 = plane.Plane(v2, 3.76)
print p1.is_parallel(p2)
print p1.is_equal(p2)

v1 = vector.Vector([-7.926, 8.625, -7.212])
p1 = plane.Plane(v1, -7.952)
v2 = vector.Vector([-2.642, 2.875, -2.404])
p2 = plane.Plane(v2, -2.443)
print p1.is_parallel(p2)
print p1.is_equal(p2)
Beispiel #24
0
    def plane(self, optionalTarget=None):

        result = optionalTarget or plane.Plane()

        return result.setFromCoplanarPoints(self.a, self.b, self.c)
Beispiel #25
0
def main():
    pygame.init()
    pygame.mixer.init()

    life_image = 'image/life.png'
    bg_music = 'music/game_music.ogg'
    background = "image/background.png"
    button_music = 'music/button.wav'
    about_me = 'image/about_me.png'
    about_me_image = pygame.image.load(about_me)
    about_me_rect = about_me_image.get_rect()
    MyLife = pygame.image.load(life_image)
    Mybackground1 = pygame.image.load(background)
    life_rect = MyLife.get_rect()
    bg_size = 480, 700
    screen = pygame.display.set_mode(bg_size)
    pygame.display.set_caption("飞机大战")
    MyBullet = []
    Enemy = []
    kill = []
    score = 0
    score_font = pygame.font.Font("font/font.ttf", 36)
    num = 5
    num1 = 0
    num2 = 0
    num3 = 0
    harm = 1
    pygame.key.set_repeat(100, 100)
    clock = pygame.time.Clock()
    MyPlane = plane.Plane(bg_size)
    Enemy_group = pygame.sprite.Group()
    bg_music = pygame.mixer.Sound(bg_music)
    button_sound = pygame.mixer.Sound(button_music)
    bg_music.play(-1)
    super_Bullet = False
    running = True
    again = False
    My_Protection_cover = plane.Protection_cover(bg_size)
    paused = False
    pause_nor_image = pygame.image.load("image/pause_nor.png").convert_alpha()
    pause_pressed_image = pygame.image.load(
        "image/pause_pressed.png").convert_alpha()
    resume_nor_image = pygame.image.load(
        "image/resume_nor.png").convert_alpha()
    resume_pressed_image = pygame.image.load(
        "image/resume_pressed.png").convert_alpha()
    again_image = pygame.image.load("image/again.png").convert_alpha()
    gameover_image = pygame.image.load("image/gameover.png").convert_alpha()
    me_image = pygame.image.load('image/me.png').convert_alpha()
    me_rect = me_image.get_rect()
    gameover_rect = gameover_image.get_rect()
    again_rect = again_image.get_rect()
    paused_rect = pause_nor_image.get_rect()
    paused_rect.left, paused_rect.top = bg_size[0] - paused_rect.width - 10, 10
    paused_image = pause_nor_image
    tnt_num = 10

    while running:
        if MyPlane.dead == True:
            MyPlane = plane.Plane(bg_size)
            MyPlane.not_dead = not MyPlane.not_dead
            MyPlane.life_num = oldLife
            again = True
            num4 = 0

        for event in pygame.event.get():
            if event.type == QUIT:
                bg_music.stop()
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN and MyPlane.dead == False:
                if event.key == K_TAB:
                    MyPlane.not_dead = not MyPlane.not_dead
                if event.key == K_RETURN:
                    if harm < 11:
                        harm += 1
                    if harm >= 11:
                        harm = 1
                if event.key == K_SPACE:
                    if tnt_num > 0:
                        button_sound.play()

                        for each in Enemy:
                            kill.append(each)
                            score += each.score
                        Enemy.clear()
                        Enemy_group = pygame.sprite.Group()
                        tnt_num -= 1

            if event.type == MOUSEBUTTONDOWN:
                if event.button == 1 and paused_rect.collidepoint(event.pos):
                    paused = not paused
                    if paused:
                        bg_music.stop()
                    else:
                        bg_music.play(-1)

            if event.type == MOUSEMOTION:
                if paused_rect.collidepoint(event.pos) == True:
                    if paused == True:
                        paused_image = resume_pressed_image
                    if paused == False:
                        paused_image = pause_pressed_image
                else:
                    if paused == True:
                        paused_image = resume_nor_image
                    if paused == True:
                        paused_image = pause_nor_image

        screen.blit(Mybackground1, (0, 0))
        key = pygame.key.get_pressed()
        if MyPlane.dead == False and paused == False:
            if key[K_w] or key[K_UP]:
                MyPlane.move([0, -1])
            if key[K_s] or key[K_DOWN]:
                MyPlane.move([0, 1])
            if key[K_a] or key[K_LEFT]:
                MyPlane.move([-1, 0])
            if key[K_d] or key[K_RIGHT]:
                MyPlane.move([1, 0])
            if key[K_j] or key[K_1]:
                if num1 == num:
                    temp = bullet.Bullet(MyPlane.rect.centerx,
                                         MyPlane.rect.top, harm)
                    music = pygame.mixer.Sound(temp.music)
                    music.play()
                    MyBullet.insert(0, temp)
                    num1 = 0
                num1 += 1

        for each in Enemy:
            if each.disappear == True:
                Enemy.remove(each)
            elif paused == False:
                each.move()
                if each.Enemytype == 'BigEnemy' and each.hit == False:
                    if num3 >= 5:
                        screen.blit(each.default_image[0], each.rect)
                    elif num3 <= 5:
                        screen.blit(each.default_image[1], each.rect)
                elif each.hit == False:
                    screen.blit(each.default_image[0], each.rect)
                else:
                    screen.blit(each.hit_image[0], each.rect)

        for each in MyBullet:
            if each.disappear == True:
                MyBullet.remove(each)
            elif paused == False:
                each.move()
                screen.blit(each.image, each.rect)

        for x in MyBullet:
            for y in Enemy:
                if pygame.sprite.collide_rect(x, y):
                    MyBullet.remove(x)
                    y.life -= harm
                    break

        if MyPlane.not_dead == False:
            enemies_down = pygame.sprite.spritecollide\
            (MyPlane, Enemy_group, False, pygame.sprite.collide_mask)
        else:
            enemies_down = pygame.sprite.spritecollide\
            (My_Protection_cover, Enemy_group, False, pygame.sprite.collide_mask)

        if enemies_down:
            if MyPlane.not_dead == False and MyPlane.dead == False:
                MyPlane.life_num -= 1
                oldLife = MyPlane.life_num
                kill.append(MyPlane)
                MyPlane.dead = True
                tnt_num = 10
            for each in enemies_down:
                Enemy_group.remove(each)
                score += each.score
                try:
                    Enemy.remove(each)
                except:
                    pass
                each.dead()
                kill.append(each)

        if (num2 % 30) == 0 and num2 != 0:
            x = randint(0, bg_size[0])
            temp = enemy.SmallEnemy(bg_size)
            temp.init_image()
            temp.init_pos(randint(0, bg_size[0]), 0)
            Enemy.append(temp)
            Enemy_group.add(temp)
        if (num2 % 90) == 0 and num2 != 0:
            x = randint(0, bg_size[0])
            temp = enemy.MidEnemy(bg_size)
            temp.init_image()
            temp.init_pos(randint(0, bg_size[0]), 0)
            Enemy.insert(0, temp)
            Enemy_group.add(temp)
        if (num2 % 250) == 0 and num2 != 0:
            x = randint(0, bg_size[0])
            temp = enemy.BigEnemy(bg_size)
            temp.init_image()
            temp.init_pos(randint(0, bg_size[0]), 0)
            Enemy.append(temp)
            Enemy_group.add(temp)
            num2 = 0

        for k in kill:
            if len(k.dead_image) <= 0:
                kill.remove(k)
                continue
            else:
                screen.blit(k.dead_image[0], k.rect)
                del k.dead_image[0]

        for each in Enemy:
            if each.life <= 0:
                each.dead()
                Enemy.remove(each)
                Enemy_group.remove(each)
                kill.append(each)
                score += each.score
                continue

            if each.life <= each.hitLife / 2 and each.hit == False:
                each.hit = True

        if num3 >= 10:
            num3 = 0

        num2 += 1
        num3 += 1

        if MyPlane.not_dead == True and paused == False:
            My_Protection_cover.move\
            (MyPlane.rect.centerx,MyPlane.rect.centery)
            screen.blit(\
            My_Protection_cover.image,\
            My_Protection_cover.rect)

        if MyPlane.dead == False:
            if num3 <= 5:
                screen.blit(MyPlane.default_image[0], MyPlane.rect)

            elif num3 > 5:
                screen.blit(MyPlane.default_image[1], MyPlane.rect)

        score_text = score_font.render("Score : %s" % str(score), True,
                                       (255, 0, 0))
        screen.blit(score_text, (10, 5))

        for i in range(0, MyPlane.life_num):
            screen.blit(MyLife,
                        (0 + (life_rect.w * i), bg_size[1] - life_rect.h))

        if MyPlane.life_num <= 0:
            game_over_text = score_font.render\
            ("Game Over" , True, (0, 0, 0))
            game_over_rect = game_over_text.get_rect()
            screen.blit(Mybackground1, (0, 0))

            Enemy.clear()
            running = False
            bg_music.stop()
            is_about_me = False
            again_rect.left, again_rect.top =\
                ((bg_size[0]- again_rect.width) // 2, bg_size[1]//2-gameover_rect.height)
            gameover_rect.left , gameover_rect.top =\
                ((bg_size[0] - gameover_rect.width) // 2, bg_size[1]//2)
            about_me_rect.left, about_me_rect.top = \
                ((bg_size[0] - about_me_rect.width) // 2, bg_size[1]//2+about_me_rect.height)
            me_rect.left, me_rect.top = (bg_size[0] - me_rect.width) // 2, (
                bg_size[1] // 2 - me_rect.height - about_me_rect.height)

            while True:

                for event in pygame.event.get():
                    if event.type == QUIT:
                        bg_music.stop()
                        pygame.quit()
                        sys.exit()
                    if event.type == MOUSEBUTTONDOWN:
                        pos = pygame.mouse.get_pos()
                        if again_rect.left < pos[0] < again_rect.right and \
                           again_rect.top < pos[1] < again_rect.bottom:

                            main()
                        elif gameover_rect.left < pos[0] < gameover_rect.right and \
                             gameover_rect.top < pos[1] < gameover_rect.bottom:
                            pygame.quit()
                            sys.exit()
                        elif about_me_rect.left < pos[0] < about_me_rect.right and \
                            about_me_rect.top < pos[1] < about_me_rect.bottom:
                            is_about_me = not is_about_me

                game_over_rect = game_over_text.get_rect()
                screen.blit(Mybackground1, (0, 0))
                screen.blit\
                (game_over_text,((bg_size[0] - game_over_rect.width) // 2, bg_size[1]//2-100))
                if is_about_me == True:
                    screen.blit(me_image, me_rect)
                screen.blit(score_text, (0, 10))

                screen.blit(again_image, again_rect)
                screen.blit(gameover_image, gameover_rect)
                screen.blit(about_me_image, about_me_rect)
                pygame.display.flip()
                clock.tick(60)

        if again == True:
            num4 += 1
            if num4 == 600:
                del num4
                again = False
                MyPlane.not_dead = False

        pos = pygame.mouse.get_pos()
        if paused_rect.left < pos[0] < paused_rect.right and \
            paused_rect.top < pos[1] < paused_rect.bottom:
            if paused == True:
                paused_image = resume_pressed_image
            if paused == False:
                paused_image = pause_pressed_image
        else:
            if paused == True:
                paused_image = resume_nor_image
            if paused == False:
                paused_image = pause_nor_image

        screen.blit(paused_image, paused_rect)
        pygame.display.flip()
        clock.tick(60)
Beispiel #26
0
def main():
    pygame.init()
    pygame.display.set_caption('Plane War')
    screen = pygame.display.set_mode((616, 900))
    #背景音乐
    pygame.mixer.init()
    pygame.mixer.music.load('../testsounds/bg_music.ogg')
    pygame.mixer.music.play(-1)

    bg_img = pygame.image.load('../images/background.png').convert_alpha()
    gameover_img = pygame.image.load('../images/gameover.png').convert_alpha()
    gameagain_img = pygame.image.load('../images/again.png').convert_alpha()

    level = 1
    score = 0
    myfont = pygame.font.Font('../font/myfont.ttf', 24)
    #炸弹
    bomb_img = pygame.image.load('../images/bomb.png').convert_alpha()
    bomb_rect = bomb_img.get_rect()
    bomb_rect.left, bomb_rect.top = (5, bg_img.get_height() -
                                     bomb_rect.height - 5)
    bom_num = 3

    b_supply = bomb_supply.BombSupply(bg_img)

    p = plane.Plane(bg_img)

    #子弹精灵组
    bulletlist = []
    b_group = pygame.sprite.Group()
    for i in range(5):
        mybullet = bullet.Bullet(p.rect.midtop)
        b_group.add(mybullet)
        bulletlist.append(mybullet)
    #敌机精灵组
    enemy_group = pygame.sprite.Group()
    small_group = pygame.sprite.Group()
    for s in range(15):
        s = enemy_plane.Enemy('../images/enemy1.png', 5, bg_img, 3, 1)
        add_group(enemy_group, small_group, s)
    mid_group = pygame.sprite.Group()
    for m in range(10):
        m = enemy_plane.Enemy('../images/enemy2.png', 10, bg_img, 2, 10)
        add_group(enemy_group, mid_group, m)
    large_group = pygame.sprite.Group()
    for i in range(5):
        l = enemy_plane.Enemy('../images/enemy3_n1.png', 10, bg_img, 1, 20)
        add_group(enemy_group, large_group, l)

    pause_nor_img = pygame.image.load('../images/pause_nor.png')
    pause_pressed_img = pygame.image.load('../images/pause_pressed.png')
    resume_nor_img = pygame.image.load('../images/resume_nor.png')
    resume_pressed_img = pygame.image.load('../images/resume_pressed.png')
    pause_img = pause_nor_img
    pause_rect = pause_img.get_rect()
    pause_rect.left, pause_rect.top = (bg_img.get_width() - pause_rect.width -
                                       5, 5)
    pause_flag = False

    p_index = 0
    mid_index = 0
    large_index = 0
    b_index = 0
    clock = pygame.time.Clock()
    chang_img = True
    delay = 0
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == MOUSEBUTTONDOWN:
                #点击鼠标左键,并在按钮区域
                if event.button == 1 and pause_rect.collidepoint(event.pos):
                    pause_flag = not pause_flag
            elif event.type == MOUSEMOTION:
                if pause_rect.collidepoint(event.pos):
                    #暂停
                    if pause_flag:
                        pause_img = resume_pressed_img
                    else:
                        pause_img = pause_pressed_img
                else:
                    if pause_flag:
                        pause_img = resume_nor_img
                    else:
                        pause_img = pause_nor_img
            elif event.type == KEYDOWN:
                if event.key == K_SPACE:
                    if bom_num > 0:
                        for e in enemy_group:
                            if e.alive and e.rect.bottom > 0:
                                e.alive = False
                                if e in small_group:
                                    score += 100
                                elif e in mid_group:
                                    score += 300
                                else:
                                    score += 500
                        bom_num -= 1
        pressed_keys = pygame.key.get_pressed()
        if pressed_keys[K_LEFT]:
            p.move_left()
        if pressed_keys[K_RIGHT]:
            p.move_right()
        if pressed_keys[K_UP]:
            p.move_up()
        if pressed_keys[K_DOWN]:
            p.move_down()

        screen.fill((255, 255, 255))
        screen.blit(bg_img, bg_img.get_rect())
        #描绘暂停
        screen.blit(pause_img, pause_rect)
        #渲染字体,显示分数
        mytext = myfont.render('Score:%d' % score, True, (255, 0, 0),
                               (255, 255, 255))
        screen.blit(mytext, mytext.get_rect())
        #显示等级
        mytext = myfont.render('Level:%d' % level, True, (0, 0, 255),
                               (255, 255, 255))
        screen.blit(mytext,(bg_img.get_width()-mytext.get_rect().width-5,\
                            bg_img.get_height()-mytext.get_rect().height-5))
        #显示炸弹
        if bom_num > 0:
            screen.blit(bomb_img, bomb_rect)
            mytext = myfont.render('X %d' % bom_num, True, (255, 0, 0),
                                   (255, 255, 255))
            screen.blit(mytext, (bomb_rect.right + 2, bomb_rect.top + 20))
        if not pause_flag:
            if level == 1 and score > 2000:
                level = 2
                speed_increase(small_group, 2)
                speed_increase(mid_group, 1)
            elif level == 2 and score > 5000:
                level = 3
                speed_increase(small_group, 3)
                speed_increase(mid_group, 2)
            #描绘炸弹补给包
            if b_supply.alive:
                b_supply.move()
                screen.blit(b_supply.image, b_supply.rect)
                blocksupply = pygame.sprite.collide_rect(b_supply, p)
                if blocksupply:
                    bom_num += 1
                    b_supply.alive = False
            else:
                b_supply.reset()
            #描绘子弹
            if delay % 15 == 0:
                bulletlist[b_index].reset(p.rect.midtop)
                b_index = (b_index + 1) % 5

            for i in bulletlist:
                if i.alive:
                    i.move()
                    screen.blit(i.image, i.rect)
                    #检测子弹与敌机碰撞
                    blocklist = pygame.sprite.spritecollide(
                        i, enemy_group, False, pygame.sprite.collide_mask)
                    for e in blocklist:
                        if e in small_group:
                            score += 100
                            e.alive = False
                        else:
                            e.energy -= 1
                            if e.energy == 0:
                                if e in mid_group:
                                    score += 300
                                else:
                                    score += 500
                                e.alive = False  #????
                        i.alive = False
                else:
                    i.reset(p.rect.midtop)
            #描绘敌机
            for i in mid_group:
                if i.alive:
                    i.move()
                    screen.blit(i.image, i.rect)
                    pygame.draw.line(screen,(0,0,0),(i.rect.left,i.rect.top-5),\
                                     (i.rect.right,i.rect.top-5),2)
                    current_energy = i.energy / 10
                    if current_energy < 0.2:
                        color_paint = (255, 0, 0)
                    else:
                        color_paint = (0, 255, 0)
                    pygame.draw.line(screen,color_paint,(i.rect.left,i.rect.top-5),\
                                     (i.rect.left+i.rect.width*current_energy,i.rect.top-5),2)
                else:
                    screen.blit(i.destroy_mid_image[mid_index], i.rect)
                    if delay % 3 == 0:
                        mid_index += 1
                        if mid_index == 4:
                            mid_index = 0
                            i.reset(10, 5, 10)

            for i in small_group:
                if i.alive:
                    i.move()
                    screen.blit(i.image, i.rect)
                else:
                    i.reset(5, 0, 1)

            for i in large_group:
                if i.alive:
                    i.move()
                    screen.blit(i.image, i.rect)
                    pygame.draw.line(screen,(0,0,0),(i.rect.left,i.rect.top-5),\
                                     (i.rect.right,i.rect.top-5))
                    current_energy = i.energy / 20
                    if current_energy < 0.2:
                        color_paint = (255, 0, 0)
                    else:
                        color_paint = (0, 255, 0)
                    pygame.draw.line(screen,color_paint,(i.rect.left,i.rect.top-5),\
                                     (i.rect.left+i.rect.width*current_energy,i.rect.top-5),2)
                else:
                    screen.blit(i.destroy_large_image[large_index], i.rect)
                    if delay % 3 == 0:
                        large_index += 1
                        if large_index == 6:
                            large_index = 0
                            i.reset(15, 10, 20)
        #检测我方飞机与敌方飞机碰撞
        blocklist2 = pygame.sprite.spritecollide(p, enemy_group, False,
                                                 pygame.sprite.collide_mask)
        for i in blocklist2:
            i.alive = False
            p.alive = False

        #描绘我方飞机
        if p.alive:
            if chang_img:
                screen.blit(p.image1, p.rect)
            else:
                screen.blit(p.image2, p.rect)
        else:
            screen.blit(p.destroy_image[p_index], p.rect)
            if delay % 10 == 0:
                p_index += 1
                if p_index == 4:
                    p_index = 0

            screen.blit(gameagain_img,((bg_img.get_width()-gameagain_img.get_width())/2,\
                        bg_img.get_height()/2))
            screen.blit(gameover_img,((bg_img.get_width()-gameover_img.get_width())/2,\
                        bg_img.get_height()/2+60))

        delay += 1
        if delay % 5 == 0:
            chang_img = False
        else:
            chang_img = True

        pygame.display.update()
        clock.tick(30)
    pygame.quit()
Beispiel #27
0
        plane.handle(turb)
        print(plane)
        plane.check_angle()

        time.sleep(1)


if __name__ == "__main__":

    planes = []
    processes = []

    number_of_planes = 4

    for i in range(number_of_planes):
        planes.append(plane.Plane())

    planes[1].take_off()
    planes[2].take_off()
    planes[3].take_off()
    planes[3].take_off()
    planes[3].land()

    try:
        for i in range(number_of_planes):
            planes.append(plane.Plane())
            process = multiprocessing.Process(target=simulate,
                                              args=[planes[i]])
            process.start()
            processes.append(process)
import plane

pygame.init()

bg = pygame.image.load('./images/background.png')

windowSize = (480, 700)
screen = pygame.display.set_mode(windowSize)

screen.blit(bg, (0, 0))
pygame.display.update()

clock = pygame.time.Clock()

# 创建飞机,并添加到精灵组中,自动重绘
hero = plane.Plane()
# 创建精灵图"组",该对象可以调用 update, draw 方法重绘
spriteGroup = pygame.sprite.Group(hero)
# 创建用户事件对象变量
EVENT_CREATE_ENEMY = pygame.USEREVENT
# 使用计时器,每秒触发一次用户事件
pygame.time.set_timer(EVENT_CREATE_ENEMY, 1000)

while True:
    event = pygame.event.poll()
    if event.type == pygame.QUIT:
        pygame.quit()
        exit()
    elif event.type == EVENT_CREATE_ENEMY:  # 判断,如果是用户事件,就创建敌机
        enemy = game_sprite.GameSprite("./images/enemy1.png")  # 创建敌机对象
        spriteGroup.add(enemy)  # 添加到数据中
Beispiel #29
0
bg = pygame.image.load('bg11.jpg').convert()

bg_rect = bg.get_rect()

bg2 = pygame.image.load('bg22.jpg').convert()

bg2_rect = bg2.get_rect()

bg2_rect.top = -bg2_rect.height - (bg_rect.height - height)

bg_rect.top = -(bg_rect.height - height)

gameover = pygame.image.load('gover.png').convert_alpha()

Plane = plane.Plane(bgsize)

pygame.mixer.music.load("吉森信 - Gun's & Roses (Paradise Lunch).ogg")

destroyed = [pygame.image.load('1.png').convert_alpha(),\
pygame.image.load('2.png').convert_alpha(),\
pygame.image.load('3.png').convert_alpha(),\
pygame.image.load('4.png').convert_alpha(),\
pygame.image.load('5.png').convert_alpha(),\
pygame.image.load('6.png').convert_alpha()]

destroyed_en1 = [pygame.image.load('1的副本.png').convert_alpha(),\
pygame.image.load('2的副本.png').convert_alpha(),\
pygame.image.load('3的副本.png').convert_alpha(),\
pygame.image.load('4的副本.png').convert_alpha(),\
pygame.image.load('5的副本.png').convert_alpha(),\
Beispiel #30
0
def main():
    run = True  # 循环控制参数
    start = False  # 游戏开始参数
    paussed = True  # 暂停标志参数
    clock = pygame.time.Clock()  # 帧率控制
    delay = 100  # 延迟设置
    score = 0  # 设置得分
    grade1 = 50  # 小型敌机分数
    grade2 = 300  # 中型敌机分数
    grade3 = 600  # 大型敌机分数
    level = 1  # 等级水平
    life_num = 3  # 生命数
    # 字体设置
    score_font = pygame.font.Font("font/font.ttf", 35)
    game_over_font = pygame.font.Font("font/font.ttf", 30)
    # 设置"游戏准备"图片精灵
    game_loadings = list()
    game_loadings_index = 0
    game_loadings_num = 3
    game_loadings.append(game_loading1)
    game_loadings.append(game_loading2)
    game_loadings.append(game_loading3)
    # 背景音乐播放
    bg_music.play(-1)
    # 实例化我方飞机
    hero = plane.Plane(bg_size)
    # 实例化敌机组
    enemies = pygame.sprite.Group()
    # 实例化小型敌机
    mini_enemise = pygame.sprite.Group()
    add_enemies('mini', bg_size, mini_enemise, enemies, 16)
    # 实例化中型敌机
    medium_enemise = pygame.sprite.Group()
    add_enemies('medium', bg_size, medium_enemise, enemies, 8)
    # 实例化大型敌机
    large_enemise = pygame.sprite.Group()
    add_enemies('large', bg_size, large_enemise, enemies, 4)
    # 实例化子弹
    bullets = []
    # 子弹索引下标
    bullets_index = 0
    # 子弹数目
    bullet_num = 4
    # 炮弹数目
    bomb_num = 3
    for i in range(bullet_num):
        bullets.append(bullet.Bullet(hero.rect.midtop))
    # 实例化补给
    bomb_supply = supply.Bomb_Supply(bg_size)
    # 设置一个定时事件
    supply_time = USEREVENT
    pygame.time.set_timer(supply_time, msec)

    # 游戏循环
    while run:
        # 事件检测
        for event in pygame.event.get():
            # 右上角关闭按钮检测
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            # 鼠标点击检测
            elif event.type == MOUSEBUTTONDOWN:
                if event.button == 1:
                    # 游戏开始
                    start = True
                if event.button == 1 and paused_rect.collidepoint(event.pos):
                    paussed = not paussed
                    if not paussed:
                        pygame.time.set_timer(supply_time, 0)
                        # 暂停音效
                        pygame.mixer.music.pause()
                        pygame.mixer.pause()
                    else:
                        pygame.time.set_timer(supply_time, msec)
                        # 恢复音效
                        pygame.mixer.music.unpause()
                        pygame.mixer.unpause()
                if event.button == 1 and game_restart_rect.collidepoint(
                        event.pos):
                    # 重新开始
                    main()

            # 鼠标放置坐标检测
            elif event.type == MOUSEMOTION:
                if paused_rect.collidepoint(event.pos):
                    if paussed:
                        paused_image = game_resume_pressed
                    else:
                        paused_image = game_pause_pressed
                else:
                    if paussed:
                        paused_image = game_resume_nor
                    else:
                        paused_image = game_pause_nor
            # 键盘按键检测
            elif event.type == KEYDOWN:
                if event.key == K_SPACE:
                    if bomb_num:
                        bomb_num -= 1
                        enemy3_down_sound.play()
                        # 按下空格后,销毁屏幕内所有敌机
                        for each in enemies:
                            if each.rect.bottom > 0:
                                each.survival = False
            # 定时时间检测
            elif event.type == supply_time:
                bomb_supply.set_position()

        # 视情况提升等级
        if level < get_level(score) + 1:
            level += 1
            game_achievement_sound.play()
            # 增加一定批次的敌机
            add_enemies('mini', bg_size, mini_enemise, enemies, 3)
            add_enemies('medium', bg_size, medium_enemise, enemies, 2)
            add_enemies('large', bg_size, large_enemise, enemies, 1)
            # 提升小型敌机速度
            up_speed(mini_enemise, 1)
            print('等级提升')
            if not (level % 2) and bullet_num < 6:
                # 每提升两次敌机数量,就加一发子弹,上限是6
                print('子弹数目增加')
                bullet_num += 1
                bullets.append(bullet.Bullet(hero.rect.midtop))

        # 游戏开始
        if start:
            # 绘制背景图像
            screen.blit(background, (0, 0))
            # 绘制分数
            score_text = score_font.render("Score : %s" % str(score), True,
                                           WHITE)
            screen.blit(score_text, (10, 5))
            # 绘制炸弹
            bomb_text = bomb_font.render("× %d" % bomb_num, True, WHITE)
            text_rect = bomb_text.get_rect()
            screen.blit(bomb_image, (10, height - 10 - bomb_rect.height))
            screen.blit(bomb_text,
                        (20 + bomb_rect.width, height - 5 - text_rect.height))
            # 绘制暂停按钮
            screen.blit(paused_image, paused_rect)

            if life_num and paussed:
                # 碰撞检测
                enemies_down = pygame.sprite.spritecollide(
                    hero, enemies, False, pygame.sprite.collide_mask)
                if enemies_down:
                    hero.survival = False
                    for enemy_down in enemies_down:
                        enemy_down.survival = False

                # 发射子弹
                if not (delay % bullet_speed):
                    bullets[bullets_index].set_position(hero.rect.midtop)
                    bullets_index = (bullets_index + 1) % bullet_num

                # 子弹碰撞检测
                for b in bullets:
                    if b.survival:
                        b.move()
                        screen.blit(b.bullet, b.rect)
                        enemy_hit = pygame.sprite.spritecollide(
                            b, enemies, False, pygame.sprite.collide_mask)
                        # 被击中后
                        if enemy_hit:
                            b.survival = False
                            for e in enemy_hit:
                                if e in medium_enemise or e in large_enemise:
                                    e.hp -= 1
                                    e.hit = True
                                    if e.hp == 0: e.survival = False
                                else: e.survival = False

                # 绘制炸弹补给
                if bomb_supply.survival:
                    bomb_supply.move()
                    screen.blit(bomb_supply.bomb, bomb_supply.rect)
                    # 炸弹补给碰撞检测
                    if pygame.sprite.collide_mask(bomb_supply, hero):
                        if bomb_num < 3:
                            bomb_num += 1
                        # 销毁炸弹补给
                        bomb_supply.survival = False

                # 绘制小型敌机图像
                for mini_enemy in mini_enemise:
                    # 存活判断
                    if mini_enemy.survival:
                        # 小型敌机移动
                        mini_enemy.move()
                        # 绘制图像
                        screen.blit(mini_enemy.enemy, mini_enemy.rect)
                    else:
                        # 销毁敌机
                        if not (delay % destroy_speed):
                            if mini_enemy.spirits_index == 0:
                                # 播放敌机销毁声音
                                enemy1_down_sound.play()
                            # 绘制销毁动画
                            screen.blit(
                                mini_enemy.death_spirits[
                                    mini_enemy.spirits_index], mini_enemy.rect)
                            mini_enemy.spirits_index = mini_enemy.spirits_index + 1
                            if mini_enemy.spirits_index == 4:
                                # 增加分数
                                score += grade1
                                # 重新设置敌机
                                mini_enemy.set_position()

                # 绘制中型敌机图像
                for medium_enemy in medium_enemise:
                    # 存活判断
                    if medium_enemy.survival:
                        # 中型敌机移动
                        medium_enemy.move()
                        # 被击中判定
                        if medium_enemy.hit:
                            screen.blit(medium_enemy.enemy_hit,
                                        medium_enemy.rect)
                            medium_enemy.hit = False
                        else:
                            # 绘制图像
                            screen.blit(medium_enemy.enemy, medium_enemy.rect)
                        # 绘制血槽
                        draw_start = (medium_enemy.rect.left,
                                      medium_enemy.rect.top - 5)
                        draw_end = (medium_enemy.rect.right,
                                    medium_enemy.rect.top - 5)
                        pygame.draw.line(screen, RED, draw_start, draw_end, 2)
                        # 计算剩余血量
                        surplus_hp = medium_enemy.hp / enemy.MediumEnemy.hp
                        draw_end = (medium_enemy.rect.left +
                                    medium_enemy.rect.width * surplus_hp,
                                    medium_enemy.rect.top - 5)
                        pygame.draw.line(screen, GREEN, draw_start, draw_end,
                                         2)
                    else:
                        # 销毁敌机
                        if not (delay % destroy_speed):
                            if medium_enemy.spirits_index == 0:
                                # 播放敌机销毁声音
                                enemy2_down_sound.play()
                            # 绘制销毁动画
                            screen.blit(
                                medium_enemy.death_spirits[
                                    medium_enemy.spirits_index],
                                medium_enemy.rect)
                            medium_enemy.spirits_index = medium_enemy.spirits_index + 1
                            if medium_enemy.spirits_index == 4:
                                # 增加分数
                                score += grade2
                                # 重新设置敌机
                                medium_enemy.set_position()

                # 绘制大型敌机图像
                for large_enemy in large_enemise:
                    # 存活判断
                    if large_enemy.survival:
                        # 大型敌机移动
                        large_enemy.move()
                        # 被击中判定
                        if large_enemy.hit:
                            screen.blit(large_enemy.enemy_hit,
                                        large_enemy.rect)
                            large_enemy.hit = False
                        else:
                            # 绘制敌机图形
                            screen.blit(large_enemy.enemy, large_enemy.rect)
                        # 绘制血槽
                        draw_start = (large_enemy.rect.left,
                                      large_enemy.rect.top - 5)
                        draw_end = (large_enemy.rect.right,
                                    large_enemy.rect.top - 5)
                        pygame.draw.line(screen, RED, draw_start, draw_end, 2)
                        # 计算剩余血量
                        surplus_hp = large_enemy.hp / enemy.LargeEnemy.hp
                        draw_end = (large_enemy.rect.left +
                                    large_enemy.rect.width * surplus_hp,
                                    large_enemy.rect.top - 5)
                        pygame.draw.line(screen, GREEN, draw_start, draw_end,
                                         2)
                        if large_enemy.rect.bottom > -50:
                            # 播放敌机飞行声音
                            enemy3_out_sound.play(-1)
                    else:
                        # 销毁敌机
                        if not (delay % destroy_speed):
                            if large_enemy.spirits_index == 0:
                                # 播放敌机销毁声音
                                enemy3_down_sound.play()
                            # 绘制销毁动画
                            screen.blit(
                                large_enemy.death_spirits[
                                    large_enemy.spirits_index],
                                large_enemy.rect)
                            large_enemy.spirits_index = large_enemy.spirits_index + 1
                            if large_enemy.spirits_index == 6:
                                # 增加分数
                                score += grade3
                                # 关闭音效
                                enemy3_out_sound.stop()
                                # 重新设置敌机
                                large_enemy.set_position()

                # 绘制飞机图像
                if hero.survival:
                    # 检测键盘,控制我方飞机移动
                    hero.move()
                    screen.blit(hero.plane, hero.rect)
                else:
                    enemy2_down_sound.play()
                    if not (delay % destroy_speed):
                        # 绘制销毁动画
                        screen.blit(hero.death_spirits[hero.spirits_index],
                                    hero.rect)
                        hero.spirits_index = hero.spirits_index + 1
                        if hero.spirits_index == 3:
                            print("Code Over")
                            life_num -= 1
                            # 重新设置战机
                            hero.set_position()

                # 绘制飞机生命数量
                if life_num:
                    for i in range(life_num):
                        life_left = width - 10 - (i + 1) * life_rect.width
                        life_top = height - 10 - life_rect.height
                        screen.blit(life_image, (life_left, life_top))
            elif life_num == 0:
                # 读取历史最高分
                highest_score = int()
                # 判断记录文件是否存在,不存在则创建
                if not os.path.exists("score.txt"):
                    #os.mknod("score.txt")
                    highest_score = 0
                else:
                    # 文件存在着进行读取
                    with open("score.txt", "r") as f:
                        highest_score = int(f.read())
                        f.close()
                # 若打破记录,则重新写入分数
                if score > highest_score:
                    with open("score.txt", "w+") as f:
                        f.write(str(score))
                        f.close()
                # 绘制游戏结束背景图
                screen.blit(game_over, (0, 0))
                # 绘制最终得分
                if score < highest_score:
                    game_over_text = game_over_font.render(
                        "%s" % str(score), True, WHITE)
                else:
                    game_over_text = game_over_font.render(
                        "%s" % str(score), True, WHITE)
                over_text_width = str(score).__len__() + 50
                screen.blit(game_over_text,
                            ((width - over_text_width) / 2, height / 2))
                # 绘制历史记录
                game_over_text = game_over_font.render(
                    "%s" % "Highest Score: " + str(highest_score), True, WHITE)
                over_text_width = (str(highest_score).__len__() + 15) * 12
                screen.blit(game_over_text,
                            ((width - over_text_width) / 2, height / 2 + 60))
                # 绘制重新开始按钮
                screen.blit(game_restart, game_restart_rect)
                # 停止背景音乐
                pygame.mixer.music.pause()
                # 停止音效
                pygame.mixer.pause()
            else:
                # 绘制游戏停止标志图
                screen.blit(game_stop, ((width - game_stop_rect.width) / 2,
                                        (height - game_stop_rect.height) / 2))
        else:
            # 绘制背景图像
            screen.blit(background, (0, 0))
            # 绘制游戏名称
            screen.blit(game_start, (0, 0))
            # 绘制 loading 图像
            game_loading_X = (width - game_loading_rect.width) / 2
            game_loading_Y = (height - game_loading_rect.height) / 2 + 50
            screen.blit(game_loadings[game_loadings_index],
                        (game_loading_X, game_loading_Y))
            # loding 下标变更
            if not (delay % 8):
                game_loadings_index = (game_loadings_index +
                                       1) % game_loadings_num

        # 绘制界面(双缓冲)
        pygame.display.flip()
        # 帧率设置
        clock.tick(30)
        delay -= 1
        if delay == 0: delay = 10