2020-10-19。小白自学:飞机大战源码改造。(新手入门,学习总结。从零开始,步步为营。不同版本,独立运行。完整代码,感谢原著。)

#简介:
#小白自学:飞机大战源码改造。(新手入门,学习总结。)
#从零开始:完全重写代码框架。(步步为营,完整代码。)
#简单就好:删除各种自定函数。(讨厌函数跳转,喜欢层次分明。)
#文本归一:方便编辑搜索调试。(讨厌多个文件,喜欢唯一文本。)

#目录:(代码末尾,编辑指令:Main3_13() 。#根据目录,运行游戏,不同版本,独立执行。)
#'程序版本0.01。'def Main0_1():#修改文本,增加时间控制模块time。
#'程序版本0.02。'def Main1_1():#纠正麻烦(如果无限循环,Python反应迟缓)。
#'程序版本0.03。'def Main2_1():#绘制静态背景。绘制静态英雄飞机。
#'程序版本0.04。'def Main2_2():#调试背景动画。背景初步运动起来。
#'程序版本0.05。'def Main2_3():#调试背景动画。背景协调运动起来。
#'程序版本0.06。'def Main3_1():#调试键盘反馈。英雄初步运动起来。观察鼠标键盘反馈。
#'程序版本0.07。'def Main3_2():#调试键盘反馈。英雄运动,响应键盘反馈。
#'程序版本0.08。'def Main3_3():#调试子弹发射。英雄静止,首发子弹射出。
#'程序版本0.09。'def Main3_4():#调试子弹发射。英雄静止,多发子弹循环射出。
#'程序版本0.10。'def Main3_5():#调试子弹发射。英雄运动,调整子弹射出坐标,跟随英雄。
#'程序版本0.11。'def Main3_6():#调试敌机。首架敌机飞过。
#'程序版本0.12。'def Main3_7():#可以移动英雄,击毁首架敌机。发现Bug,摧毁首架敌机之后,原地不能增加炮弹!
#'程序版本0.13。'def Main3_8():#调试敌机。击毁首架敌机。解决Bug。
#'程序版本0.14。'def Main3_9():#调试敌机。随机出现多个敌机。
#'程序版本0.15。'def Main3_10():#调试炮弹。可以摧毁敌机。英雄无敌。
#'程序版本0.16。'def Main3_11():#英雄取消无敌。首架敌机可以杀死英雄。
#'程序版本0.17。'def Main3_12():#改成无限循环,初步完工。
#'程序版本0.18。'def Main3_13():#精简代码。取消首架敌机。

#参考1:CSDN博客文章:《python实现飞机大战完整代码,可运行》。作者:垢浪_明珠。发布日期:2018-09-27 10:37:39。
#参考2:CSDN博客文章:《Python实现飞机大战游戏(后附完整代码文件和素材)》。作者:the best messi。发布日期: 2020-03-09 17:41:13。

def Main0_1():#修改文本。
    import pygame
    import time
    pygame.init()#运行模块pygame。                                                                                
    print("Hello,World!")
    print('程序版本0.01。')
    print("准备编写游戏代码...")
    for i in range(6):
        time.sleep(0.5)
        print(i,'延时等待:',0.5,'秒钟。')
    pygame.quit()#退出模块pygame。

def Main1_1():#纠正麻烦。
    import pygame
    import time #导入模块time。
    #pygame.init()
    print("Hello,World!")
    print('程序版本0.02。')
    print("创建游戏窗口。")# 开始编写游戏代码。
    pygame.display.set_mode((480, 700))# 创建游戏窗口。
    time.sleep(2) #延时2秒钟,避免无限循环,Python程序(无反应)提示。
    print('延时等待:',2,'秒钟。')
    pygame.quit()

def Main2_1():#增加静态背景,静态英雄。延时依次显示。
    import pygame
    import time
    print("Hello,World!")
    print('程序版本0.03。')
    print("增加静态背景,静态英雄飞机。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg = pygame.image.load("./images/background.png")# 加载背景图像。
    screen.blit(bg, (0, 0))#绘制背景图像。
    pygame.display.update()#更新屏幕显示。
    time.sleep(2) #增加延时3秒钟,观察分布更新屏幕显示。
    print('延时等待:',2,'秒钟。')
    hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
    screen.blit(hero, (180,500))#绘制英雄飞机图像。
    pygame.display.update()#更新屏幕显示。
    time.sleep(2)
    print('再次等待:',2,'秒钟。')
    pygame.quit()

def Main2_2():#调试背景动画。
    import pygame
    import time
    print("Hello,World!")
    print('程序版本0.04。')
    print("背景初步运动起来(欠缺协调)。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
    y=0
    for i in range(180):
        if i % 30 == 0:
            print('30整数倍数:',i)
        time.sleep(0.016)
        screen.blit(bg1, (0, 0))#绘制背景图像。
        screen.blit(bg2, (0, y))#绘制背景图像。
        screen.blit(hero, (180,500))#绘制英雄飞机图像。
        pygame.display.update()#更新屏幕显示。
        y+=1
    pygame.quit()

def Main2_3():#调试背景动画。
    import pygame
    import time
    print("Hello,World!")
    print('程序版本0.05。')
    print("背景协调运动起来。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
    y1=-700;y2=0
    for i in range(180):
        time.sleep(0.016)
        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, (180,500))#绘制英雄飞机图像。
        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_1():#调试键盘反馈。
    import pygame
    import time
    print("Hello,World!")
    print('程序版本0.06。')
    print("英雄飞机初步自动运动起来。观察鼠标键盘反馈。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
    y1=-700;y2=0
    for i in range(300):
        time.sleep(0.016)
        event_list = pygame.event.get()# 监听事件。
        if len(event_list) > 0:
            print(event_list)
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 480
        hero_rect.x -= 1# 2.修改英雄位置。
        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_2():#调试键盘反馈。
    import pygame
    import time
    print("Hello,World!")
    print('程序版本0.07。')
    print("调试英雄飞机,响应键盘反馈。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
    y1=-700;y2=0
    for i in range(180):
        time.sleep(0.016)
        event_list = pygame.event.get()# 监听事件。
        if len(event_list) > 0:
            print(event_list)
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        print(hero_rect)

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_3():#调试子弹发射。
    import pygame
    import time
    print("Hello,World!")
    print('程序版本0.08。')
    print("英雄飞机静止,首发子弹射出。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)# 次发炮弹。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 次发炮弹。
    y1=-700;y2=0#背景初始坐标。
    for i in range(180):
        time.sleep(0.016)
        event_list = pygame.event.get()# 监听事件。
        if len(event_list) > 0:
            print(event_list)
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        print(hero_rect)

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        screen.blit(bullet0, bullet0_rect)#绘制英雄飞机图像。
        bullet1_speed = -2
        bullet1_rect.x = hero_rect.x + 46
        bullet1_rect.y += bullet1_speed
        screen.blit(bullet0, bullet1_rect)
        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_4():#调试子弹发射。
    import pygame
    import time

    print("Hello,World!")
    print('程序版本0.09。')
    print("英雄飞机静止,多发子弹循环射出。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)#库存炮弹。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)#首发炮弹。
    bullet_rect=[1,196,640]
    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 次发炮弹。
    y1=-700;y2=0#背景初始坐标。
    for j in range(180):
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。
        bullet1_speed = -2
        bullet1_rect.x = hero_rect.x + 46
        bullet1_rect.y += bullet1_speed
        if j % 30 == 0:#判断是否30倍数。0.016*30=~0.5秒钟。
            bullet_rect=[1,196,640]
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
            #print(j,List_bullet)
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。
        screen.blit(bullet0, bullet1_rect)
        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_5():#调试子弹发射。
    import pygame
    import time

    print("Hello,World!")
    print('程序版本0.10。')
    print("控制英雄飞机运动,子弹射出坐标跟随改变位置。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")#)# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)#英雄飞机位置、尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)#库存炮弹。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)#首发炮弹。
    bullet_rect=[1,196,640]
    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 次发炮弹。
    y1=-700;y2=0#背景初始坐标。
    for j in range(180):
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        bullet0_rect.x = hero_rect.x + 46
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。

        if j % 30 == 0:#0.016*30=~0.5秒钟。
            bullet_rect=[1,hero_rect.x + 46,640]
            
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
            #print(j,List_bullet)
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。

        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_6():#调试敌机。
    import pygame
    import time

    print("Hello,World!")
    print('程序版本0.11。')
    print("首架敌机飞过。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
    bullet_rect=[1,196,640]
    enemy = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
    enemy_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。

    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    y1=-700;y2=0#背景初始坐标。
    for j in range(180):
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        enemy_rect.y += 4
        if enemy_rect.y >= 6660:
            enemy_rect.y = 700

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        screen.blit(enemy, enemy_rect)#绘制敌机。

        bullet0_rect.x = hero_rect.x + 46
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。

        if j % 30 == 0:#0.016*30=~0.5秒钟。
            bullet_rect=[1,hero_rect.x + 46,640]
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。

        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_7():#调试敌机。
    import pygame
    import time

    print("Hello,World!")
    print('程序版本0.12。')
    print("可以移动英雄,击毁首架敌机。发现Bug,摧毁之后,炮弹暂停!")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
    bullet_rect=[1,196,640]
    enemy = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
    enemy_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。

    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    y1=-700;y2=0#背景初始坐标。
    for j in range(300):
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        enemy_rect.y += 4
        if enemy_rect.y >= 6660:
            enemy_rect.y = 700

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        screen.blit(enemy, enemy_rect)#绘制敌机。

        bullet0_rect.x = hero_rect.x + 46
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。

        if j % 30 == 0:#0.016*30=~0.5秒钟。
            bullet_rect=[1,hero_rect.x + 46,640]
            
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
            #print(j,List_bullet)
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
            if bullet[1] > enemy_rect.x - 9 and bullet[1] < enemy_rect.x + 56: 
                if bullet[2] < enemy_rect.y + 48:
                    List_bullet.remove(bullet) #销毁炮弹。
                    enemy_rect.y = 700 #隐藏敌机,等同销毁。
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。

        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_8():#调试敌机。
    import pygame
    import time
    import random

    print("Hello,World!")
    print('程序版本0.13。')
    print("击毁首架敌机。解决Bug。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
    bullet_rect=[1,196,640]
    enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
    enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。

    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    y1=-700;y2=0#背景初始坐标。
    for j in range(180):
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        enemy0_rect.y += 2
        if enemy0_rect.y >= 666: #如果首架敌机超出游戏显示范围,隐藏。
            enemy0_rect.y = 700

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        screen.blit(enemy0, enemy0_rect)#绘制首架敌机。

        bullet0_rect.x = hero_rect.x + 46
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。

        if j % 30 == 0:#0.016*30=~0.5秒钟。
            bullet_rect=[1,hero_rect.x + 46,640]
            print(j,bullet_rect)
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
            print(j,List_bullet)
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
            if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56: 
                if bullet[2] < enemy0_rect.y + 48:
                    List_bullet.remove(bullet) #销毁炮弹。
                    enemy0_rect.x = -100
                    enemy0_rect.y = -100 #隐藏敌机,等同销毁。
                    print('摧毁一架敌机!')
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。

        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_9():#调试敌机。
    import pygame
    import time
    import random

    print("Hello,World!");print('程序版本0.14。')
    print("随机出现多个敌机。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
    bullet_rect=[1,196,640]
    enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
    enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。

    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
    enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。
    y1=-700;y2=0#背景初始坐标。
    for j in range(180):
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        enemy0_rect.y += 2
        if enemy0_rect.y >= 666:
            enemy0_rect.y = 700

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        screen.blit(enemy0, enemy0_rect)#绘制首架敌机。

        if j % 60 == 0:#60倍数。0.016*60=~1秒钟。
            enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
            print(j,enemy_num)
            List_enemy.append(enemy_num)
        for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
            if List_enemy[i][2] >= 666:
                List_enemy[i][0] = 0
        for enemy in List_enemy:
            if enemy[0]==0: #根据状态,销毁炮弹。
                List_enemy.remove(enemy)
        for i in range(len(List_enemy)):#循环显示所有敌机。
            enemy_rect[0] = List_enemy[i][1]
            List_enemy[i][2] += List_enemy[i][3]
            enemy_rect[1] = List_enemy[i][2]
            screen.blit(enemy0, enemy_rect)#绘制敌机。

        bullet0_rect.x = hero_rect.x + 46
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。

        if j % 30 == 0:#0.016*30=~0.5秒钟。
            bullet_rect=[1,hero_rect.x + 46,640]
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
            if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56: 
                if bullet[2] < enemy0_rect.y + 48:
                    List_bullet.remove(bullet) #销毁炮弹。
                    enemy0_rect.x = -100
                    enemy0_rect.y = -100 #隐藏敌机,等同销毁。
                    print('摧毁一架敌机!')
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。

        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_10():#调试炮弹。
    import pygame
    import time
    import random

    print("Hello,World!");print('程序版本0.15。')
    print("可以摧毁敌机。英雄飞机无敌。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
    bullet_rect=[1,196,640]
    enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
    enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。

    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
    enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。
    y1=-700;y2=0#背景初始坐标。
    for j in range(180):
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        enemy0_rect.y += 2
        if enemy0_rect.y >= 666:
            enemy0_rect.y = 700

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        screen.blit(enemy0, enemy0_rect)#绘制首架敌机。

        if j % 60 == 0:#60倍数。0.016*60=~1秒钟。
            enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
            print(j,enemy_num)
            List_enemy.append(enemy_num)
        for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
            if List_enemy[i][2] >= 666:
                List_enemy[i][0] = 0
        for enemy in List_enemy:
            if enemy[0]==0: #根据状态,销毁炮弹。
                List_enemy.remove(enemy)
        for i in range(len(List_enemy)):#循环显示所有敌机。
            enemy_rect[0] = List_enemy[i][1]
            List_enemy[i][2] += List_enemy[i][3]
            enemy_rect[1] = List_enemy[i][2]
            screen.blit(enemy0, enemy_rect)#绘制敌机。

        bullet0_rect.x = hero_rect.x + 46
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。

        if j % 30 == 0:#0.016*30=~0.5秒钟。
            bullet_rect=[1,hero_rect.x + 46,640]
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
            if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56: 
                if bullet[2] < enemy0_rect.y + 48:
                    List_bullet.remove(bullet) #销毁炮弹。
                    enemy0_rect.x = -100
                    enemy0_rect.y = -100 #隐藏敌机,等同销毁。
                    print('摧毁一架敌机!First blood!')
            for enemy in List_enemy:
                if bullet[1] > enemy[1] - 9 and bullet[1] < enemy[1] + 56:
                    if bullet[2] > enemy[2] and bullet[2] < enemy[2] + 48:
                        List_bullet.remove(bullet) #销毁一发炮弹。
                        List_enemy.remove(enemy) #销毁一架敌机。
                        print('再次摧毁一架敌机!One more!')
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。

        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_11():#调试战斗。
    import pygame
    import time
    import random

    print("Hello,World!");print('程序版本0.16。')
    print("英雄取消无敌。首架敌机可以杀死英雄。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
    bullet_rect=[1,196,640]
    enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
    enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。

    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
    enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。
    y1=-700;y2=0#背景初始坐标。
    for j in range(180):
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        enemy0_rect.y += 2
        if enemy0_rect.y >= 666:
            enemy0_rect.y = 700

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        screen.blit(enemy0, enemy0_rect)#绘制首架敌机。

        if j % 60 == 0:#60倍数。0.016*60=~1秒钟。
            enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
            print(j,enemy_num)
            List_enemy.append(enemy_num)
        for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
            if List_enemy[i][2] >= 666:
                List_enemy[i][0] = 0
        for enemy in List_enemy:
            if enemy[0]==0: #根据状态,销毁炮弹。
                List_enemy.remove(enemy)
        for i in range(len(List_enemy)):#循环显示所有敌机。
            enemy_rect[0] = List_enemy[i][1]
            List_enemy[i][2] += List_enemy[i][3]
            enemy_rect[1] = List_enemy[i][2]
            screen.blit(enemy0, enemy_rect)#绘制敌机。

        bullet0_rect.x = hero_rect.x + 46
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。

        if j % 30 == 0:#0.016*30=~0.5秒钟。
            bullet_rect=[1,hero_rect.x + 46,640]
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
            if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56: 
                if bullet[2] < enemy0_rect.y + 48:
                    List_bullet.remove(bullet) #销毁炮弹。
                    enemy0_rect.x = -100
                    enemy0_rect.y = -100 #隐藏敌机,等同销毁。
                    print('摧毁一架敌机!First blood!')
            if enemy0_rect.x > hero_rect.x - 59 and enemy0_rect.x < hero_rect.x + 99:
                if enemy0_rect.y > hero_rect.y - 55:
                    enemy0_rect.x = -100
                    enemy0_rect.y = -100
                    hero_rect.x = -200
                    hero_rect.y = -200
                    print("英雄牺牲!游戏结束。")
                    pygame.quit()# 结束游戏
                    exit()
            for enemy in List_enemy:
                if bullet[1] > enemy[1] - 9 and bullet[1] < enemy[1] + 56:
                    if bullet[2] > enemy[2] and bullet[2] < enemy[2] + 48:
                        List_bullet.remove(bullet) #销毁一发炮弹。
                        List_enemy.remove(enemy) #销毁一架敌机。
                        print('再次摧毁一架敌机!One more!')
                if enemy[1] > hero_rect.x - 59 and enemy[1] < hero_rect.x + 99:
                    if enemy[2] > hero_rect.y - 55:
                        List_enemy.remove(enemy) #敌机碰撞消失。
                        hero_rect.x = -200
                        hero_rect.y = -200
                        print("英雄牺牲!游戏结束。")
                        pygame.quit()# 结束游戏
                        exit()
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。

        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
    pygame.quit()

def Main3_12():#取消游戏时间控制。
    import pygame
    import time
    import random
    print("Hello,World!");print('程序版本0.17。')
    print("无限循环。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
    bullet_rect=[1,196,640]
    enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
    enemy0_rect = pygame.Rect(100, 100, 58, 48)# 定义敌机初始位置,尺寸。
    enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。

    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
    y1=-700;y2=0#背景初始坐标。
    j=0
    while True:
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0
        enemy0_rect.y += 2 #首架敌机。
        if enemy0_rect.y >= 666: #如果首架敌机超出游戏显示范围,隐藏。
            enemy0_rect.y = 700

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。
        screen.blit(enemy0, enemy0_rect)#绘制首架敌机。

        if j % 60 == 0:#判断60倍数。0.016*60=~1秒钟。产生敌机。
            enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
            List_enemy.append(enemy_num)
        for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
            if List_enemy[i][2] >= 666:
                List_enemy[i][0] = 0
        for enemy in List_enemy:
            if enemy[0]==0: #根据状态,销毁炮弹。
                List_enemy.remove(enemy)
        for i in range(len(List_enemy)):#循环显示所有敌机。
            enemy_rect[0] = List_enemy[i][1]
            List_enemy[i][2] += List_enemy[i][3]
            enemy_rect[1] = List_enemy[i][2]
            screen.blit(enemy0, enemy_rect)#绘制敌机。

        bullet0_rect.x = hero_rect.x + 46 #机舱炮弹。
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。

        if j % 30 == 0:#判断60倍数。0.016*30=~0.5秒钟。产生炮弹。
            bullet_rect=[1,hero_rect.x + 46,640]
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
            if bullet[1] > enemy0_rect.x - 9 and bullet[1] < enemy0_rect.x + 56: 
                if bullet[2] < enemy0_rect.y + 48:
                    List_bullet.remove(bullet) #销毁炮弹。
                    enemy0_rect.x = -100
                    enemy0_rect.y = -100 #隐藏首架敌机,等同销毁。
                    print('摧毁一架敌机!First blood!')
            if enemy0_rect.x > hero_rect.x - 59 and enemy0_rect.x < hero_rect.x + 99:
                if enemy0_rect.y > hero_rect.y - 55:
                    enemy0_rect.x = -100
                    enemy0_rect.y = -100
                    hero_rect.x = -200
                    hero_rect.y = -200
                    print("英雄牺牲!游戏结束。")
                    pygame.quit()# 结束游戏。
                    exit()
            for enemy in List_enemy:
                if bullet[1] > enemy[1] - 9 and bullet[1] < enemy[1] + 56: 
                    if bullet[2] > enemy[2] and bullet[2] < enemy[2] + 48:
                        List_bullet.remove(bullet) #销毁一发炮弹。
                        List_enemy.remove(enemy) #销毁一架敌机。
                        print('再次摧毁一架敌机!One more!')
                if enemy[1] > hero_rect.x - 55 and enemy[1] < hero_rect.x + 99:
                    if enemy[2] > hero_rect.y - 55:
                        List_enemy.remove(enemy) #敌机碰撞消失。
                        hero_rect.x = -200
                        hero_rect.y = -200
                        print("英雄牺牲!游戏结束。")
                        pygame.quit()# 结束游戏
                        exit()
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。

        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
        j+=1
    pygame.quit()

def Main3_13():#精简代码,初步完工。取消首架敌机。
    import pygame;import time;import random
    print("Hello,World!");print('程序版本0.18。')
    print("飞机大战游戏开始。")
    screen = pygame.display.set_mode((480, 700))# 设置游戏窗口尺寸。
    bg1 = pygame.image.load("./images/background.png")# 加载背景图像。
    bg2 = pygame.image.load("./images/background.png")# 加载背景图像。
    hero = pygame.image.load("./images/me1.png")# 加载英雄飞机图像。
    hero_rect = pygame.Rect(150, 580, 102, 126)# 定义英雄初始位置,尺寸。
    bullet0 = pygame.image.load("./images/bullet1.png")#加载炮弹图像。
    bullet0_rect = pygame.Rect(196, 640, 11, 18)# 库存炮弹位置、尺寸。
    bullet1_rect = pygame.Rect(196, 640, 11, 18)# 首发炮弹位置、尺寸。
    bullet_rect=[1,196,640]
    enemy0 = pygame.image.load("./images/enemy1.png")# 加载敌机图像。
    enemy_rect = pygame.Rect(100, 100, 58, 48)# 次生敌机初始位置,尺寸。

    List_bullet=[]#子弹列表。[[1,196,640]]。[状态,横向坐标,纵向坐标]。
    List_enemy=[]#敌机列表。[[1,100,100,2]]。[状态,横标,纵标,速度]。
    y1=-700;y2=0#两个背景图像,刷新初始纵向坐标。
    j=0
    while True:
        time.sleep(0.016)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:# 判断是否退出游戏。
                print("游戏结束")
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()#获取键盘反馈。
        if keys_pressed[pygame.K_RIGHT]:# 判断按键,箭头向右。
            hero_speed = 4
        elif keys_pressed[pygame.K_LEFT]:# 判断按键,箭头向左。
            hero_speed = -4
        else:
            hero_speed = 0
        hero_rect.x += hero_speed
        if hero_rect.x >= 380:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 380
        if hero_rect.x <= 0:# 判断英雄位置,如果超出屏幕,转移对边。
            hero_rect.x = 0

        screen.blit(bg1, (0, y1))#绘制背景图像。
        screen.blit(bg2, (0, y2))#绘制背景图像。
        screen.blit(hero, hero_rect)#绘制英雄飞机图像。

        if j % 60 == 0:#判断60倍数。0.016*60=~1秒钟。产生敌机。
            enemy_num=[1,random.randint(0,420),0,random.randint(1,3)]
            List_enemy.append(enemy_num)
        for i in range(len(List_enemy)):#超出游戏范围,销毁敌机。
            if List_enemy[i][2] >= 666:
                List_enemy[i][0] = 0
        for enemy in List_enemy:
            if enemy[0]==0: #根据状态,销毁敌机。
                List_enemy.remove(enemy)
        for i in range(len(List_enemy)):#循环显示所有敌机。
            enemy_rect[0] = List_enemy[i][1]
            List_enemy[i][2] += List_enemy[i][3]
            enemy_rect[1] = List_enemy[i][2]
            screen.blit(enemy0, enemy_rect)#绘制敌机。

        bullet0_rect.x = hero_rect.x + 46 #机舱炮弹。
        screen.blit(bullet0, bullet0_rect)#绘制炮弹。

        if j % 30 == 0:#判断60倍数。0.016*30=~0.5秒钟。产生炮弹。
            bullet_rect=[1,hero_rect.x + 46,640]
            List_bullet.append(bullet_rect) #英雄发射一枚子弹。
        for i in range(len(List_bullet)):#超出游戏范围,销毁炮弹。
            if List_bullet[i][2] < 0:
                List_bullet[i][0] = 0
        for bullet in List_bullet:
            if bullet[0]==0: #根据状态,销毁炮弹。
                List_bullet.remove(bullet)
            for enemy in List_enemy:
                if bullet[1] > enemy[1] - 9 and bullet[1] < enemy[1] + 56: 
                    if bullet[2] > enemy[2] and bullet[2] < enemy[2] + 48:
                        List_bullet.remove(bullet) #销毁一发炮弹。
                        List_enemy.remove(enemy) #销毁一架敌机。
                        print('摧毁一架敌机!Good job!')
                if enemy[1] > hero_rect.x - 55 and enemy[1] < hero_rect.x + 99:
                    if enemy[2] > hero_rect.y - 55:
                        List_enemy.remove(enemy) #敌机碰撞消失。
                        hero_rect.x = -200
                        hero_rect.y = -200
                        print("英雄牺牲!游戏结束。Game Over")
                        pygame.quit()# 结束游戏
                        exit()
        for i in range(len(List_bullet)):#循环显示所有炮弹。
            bullet1_rect[0] = List_bullet[i][1]
            List_bullet[i][2] -= 2
            bullet1_rect[1] = List_bullet[i][2]
            screen.blit(bullet0, bullet1_rect)#绘制炮弹。

        pygame.display.update()#更新屏幕显示。
        y1+=1;y2+=1
        if y1==700:
            y1=-700
        if y2==700:
            y2=-700
        j+=1
    pygame.quit()

Main3_13() #根据目录,运行游戏,不同版本,独立执行。

游戏素材: 

me1.png

bullet1.png

enemy1.png 

background.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值