建议从python_飞机大战_main_py_一 开始看

import pygame
import random
import time
from background import *
from bullets import *
from Heroplan import *
from diren import *
from Boom import *
from scorebord import *
from jiemian import *
from boss import *
import os
# 主场景
class MainScene(object):
    # 初始化主场景
    def __init__(self):
        # 场景尺寸
        self.size = (512, 768)
        # 场景对象
        self.scene = pygame.display.set_mode([self.size[0], self.size[1]])
        # 设置标题
        pygame.display.set_caption("飞机大战-v1.0")
        #等级
        self.level = 1
        # 创建地图对象
        self.map = Background(self,self.level)
        #英雄飞机
        self.hero_life = 2
        self.hero = HeroPlane(self,self.hero_life)
        #创建多个敌机
        self.enemy_list = [EnemyPlane(self,self.level) for _ in range(2)]
        #创建爆炸对象
        self.booms = [booms(self) for _ in range(9)]
        #创建boss爆炸
        self.bossboom = [booms(self,True) for _ in range(14)]
        #创建游戏面板
        self.pause = False #暂停按钮
        self.scoreboard = ScoreBoard(self)
        #创建游戏开始界面
        self.activity = JieMian(self)
        self.game_start = True
        self.game_end = False
        #创建敌人飞机
        self.boss = Boss(self,self.level)
        #创建间隔
        self.jiange = [0,300]
        #jiange[1] = 0 控制英雄飞机死亡复活间隔
        #jiange[2] = 500 控制等级显示时长
        
        
    
    # 绘制
    def draw_elements(self):
        self.map.draw()
        
        #绘制英雄飞机
        self.hero.draw()
        
        #依次绘制英雄飞机每一颗发射出去的子弹
        for bullet in self.hero.bullets:
            if bullet.visible:
                bullet.draw()
        #绘制敌人boss飞机和飞机子弹
        self.boss.draw()
        #绘制boss血条
        self.boss.blood_bar()
        for bullet in self.boss.bullets:
            if bullet.visible:
                bullet.draw()
        for plane in self.enemy_list:
            plane.draw()
        #绘制爆炸图片
        for boom in self.booms:
            if boom.visible:
                boom.draw()
        #绘制boss爆炸图片
        for boom in self.bossboom:
            if boom.visible:
                boom.draw()
        #绘制得分界面
        self.scoreboard.prep_score()
        self.scoreboard.prep_distance()
        #绘制暂停按钮
        self.scoreboard.prep_pause()
        
        # 动作
    def action_elements(self):
        self.map.action()
        #计算距离数
        self.scoreboard.fly_action(self.scoreboard.siwang)
        self.boss.move()
        # 依次计算英雄飞机每一颗发射子弹的坐标
        for bullet in self.hero.bullets:
            if bullet.visible:
                bullet.action()
        # 计算敌人飞机和其飞机子弹
        for plane in self.enemy_list:
            plane.action()
        for bu in self.boss.bullets:
            if bu.visible:
                bu.action()
        #切换爆炸图片
        for boom in self.booms:
            if boom.visible:
                boom.action()
        for boom in self.bossboom:
            if boom.visible:
                boom.action()
 
    # 处理事件
    def handle_event(self):
        
        # 如果玩家点击右上角的X按钮,则关闭窗口
        event_list = pygame.event.get()
        # 遍历事件列表
        for event in event_list:
            # 如果判断用户点击了X按钮,则结束程序
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()
            #开始游戏按钮
            if event.type == pygame.MOUSEBUTTONDOWN:
                if self.activity.game_start_button:
                    x,y = pygame.mouse.get_pos()
                    if self.activity.start_rect.collidepoint(x,y):
                        self.game_start = False
                
            #继续游戏按钮
            if event.type == pygame.MOUSEBUTTONDOWN:
                if self.pause:
                    x,y = pygame.mouse.get_pos()
                    if self.scoreboard.game_start_rect.collidepoint(x,y):
                        self.pause = False
            
            #再来一盘点击
            if event.type == pygame.MOUSEBUTTONDOWN:
                if self.activity.again:
                    x,y = pygame.mouse.get_pos()
                    if self.activity.play_again_rect.collidepoint(x,y):
                        #创建新的主场景,由于是重新开始,所以跳过开始游戏界面
                        mainScene = MainScene()
                        mainScene.game_start = False
                        # 开始游戏
                        mainScene.run_game()
            #结束游戏点击
            if event.type == pygame.MOUSEBUTTONDOWN:
                if self.activity.game_end:
                    x,y = pygame.mouse.get_pos()
                    if self.activity.game_end_rect.collidepoint(x,y):
                        os._exit(0)

def move_plane(self):               
        # 如果玩家点击右上角的X按钮,则关闭窗口
        event_list = pygame.event.get()
        # 遍历事件列表
        for event in event_list:
            # 如果判断用户点击了X按钮,则结束程序
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()
            #暂停按钮
            if event.type == pygame.MOUSEBUTTONDOWN:            
                if self.pause == False:
                    x,y = pygame.mouse.get_pos()
                    if self.scoreboard.game_pause_rect.collidepoint(x,y):
                        self.pause = True
            # 判断事件类型是否是键盘按下事件
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    self.hero.moving_right = True
                elif event.key == pygame.K_LEFT:
                    self.hero.moving_left = True
                elif event.key == pygame.K_UP:
                    self.hero.moving_up = True
                elif event.key == pygame.K_DOWN:
                    self.hero.moving_down = True
            
            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_RIGHT:
                    self.hero.moving_right = False
                elif event.key == pygame.K_LEFT:
                    self.hero.moving_left = False
                elif event.key == pygame.K_UP:
                    self.hero.moving_up = False
                elif event.key == pygame.K_DOWN:
                    self.hero.moving_down = False
        
 
    # 碰撞检测
    def detect_conlision(self):
        
        # 检测英雄子弹是否和敌机碰撞
        for bullet in self.hero.bullets:
            # 如果子弹不可见,说明子弹处于闲置状态,直接continue
            if not bullet.visible:
                continue
            for enemy in self.enemy_list:
                if not self.boss.visible:
                    #判断英雄级的矩形和飞机的矩形是否相交
                    if pygame.Rect.colliderect(self.hero.rect, enemy.rect):
                        self.hero.visible = False
                        bullet.visible = False
                        for boom in self.booms:
                            if not boom.visible:
                                boom.set_pos(self.hero.rect[0] + 40,self.hero.rect[1])
                                boom.visible = True
                  
                    # 判断英雄子弹的矩形和敌人飞机的矩形是否相交
                    if pygame.Rect.colliderect(bullet.rect, enemy.rect):
                        # 子弹设置为不可见
                        bullet.visible = False
                        #计算得分数
                        self.scoreboard.score_action()
                        # 从预先创建完毕的爆炸中取出一个爆炸对象
                        for boom in self.booms:
                            if not boom.visible:
                                # 爆炸对象设置爆炸位置
                                boom.set_pos(enemy.rect[0], enemy.rect[1])
                                # 爆炸对象状态设置为True
                                boom.visible = True
                                break
                        # 敌人飞机重新设置位置和速度
                        enemy.set_pos(random.randint(0, self.size[0] - enemy.rect[2] - 20), 0)
                        enemy.speed = random.randint(1 + self.level, 4 + self.level)
                        break
                    
            # 判断英雄子弹的矩形和boss飞机的矩形是否相交
            if self.boss.visible:
                if pygame.Rect.colliderect(bullet.rect, self.boss.rect):
                    # 子弹设置为不可见
                    bullet.visible = False
                    self.boss.hurt_blood += 20
                    if self.boss.hurt_blood >= self.boss.blood:
                        # 从预先创建完毕的爆炸中取出一个爆炸对象
                        self.boss.hurt_blood = self.boss.blood
                        self.scoreboard.score = self.scoreboard.score + self.level*200
                        
                        for bo in self.bossboom:
                            if not bo.visible:
                                # 爆炸对象设置爆炸位置
                                bo.set_pos(self.boss.rect[0], self.boss.rect[1])
                                # 爆炸对象状态设置为True
                                bo.visible = True
                                break
                        #等级提升
                        self.level +=1
                        if self.level < 6:
                            self.boss = Boss(self,self.level)
                            self.enemy_list = [EnemyPlane(self,self.level) for _ in range(2)]
                            self.map = Background(self,self.level)
                            self.jiange[1] = 300
                            self.jiange[1] -= 1
                            if self.jiange[1] >= 0:
                                self.map.levelname()
                        #等级到六级后结束游戏
                        else:
                            self.hero.visible = False
                            self.hero_life = -1
                            self.game_end = True
                        
            #判断boss飞机子弹是否与英雄碰撞
            for bossbullet in self.boss.bullets:
                # 判断boss子弹的矩形和飞机子弹的矩形是否相交
                if pygame.Rect.colliderect(bossbullet.rect, bullet.rect):
                    bossbullet.visible = False
                    bullet.visible = False
                    
                #判断boss子弹的矩形是否和英雄飞机的矩形相交
                if pygame.Rect.colliderect(bossbullet.rect, self.hero.rect):
                    bossbullet.visible = False
                    self.hero.visible = False
                    for boom in self.booms:
                        if not boom.visible:
                            boom.set_pos(self.hero.rect[0] + 40,self.hero.rect[1])
                            boom.visible = True
    # 主循环,主要处理各种事件
    def run_game(self):
        p_b_j = [0,0] #控制无限子弹间隔、plane_bullet_jiange
        while True:
            #游戏开始界面加载, 引用界面的game_start 为真说明开始游戏,为假执行else的语句           
            if not self.game_start:
                if not self.pause:
                    # 计算元素坐标
                    self.action_elements()
                    # 绘制元素图片
                    self.draw_elements()
                    #飞机移动
                    self.move_plane()
                   
                    #绘制死亡后重生的英雄飞机
                    self.jiange[0] += 1
                    if not self.hero.visible:
                        
                        if self.hero_life > 0:
                            self.hero.hero_lifes()
                            if self.jiange[0] % 150 == 0:
                                self.hero_life -= 1
                                self.hero = HeroPlane(self,self.hero_life)
                                self.hero.draw()
                                self.jiange[0] = 0
                        elif self.game_end:
                            self.scoreboard.siwang = True
                            self.activity.tongguan(self.scoreboard.score,self.scoreboard.fly_distance)
                        else:
                            self.scoreboard.siwang = True
                            self.activity.draw(self.scoreboard.score,self.scoreboard.fly_distance)
                            self.activity.again = True
                            self.activity.game_end = True
                            self.handle_event()
                    # 飞机移动
                    self.hero.moving()
                    #英雄无限发射子弹
                    p_b_j[0] += 1
                    if p_b_j[0] % 50 == 0:
                        self.hero.shot()
                        p_b_j[0] = 0
                    #boss无限发射子弹
                    p_b_j[1] += 1
                    if p_b_j[1] % 100 == 0:
                        self.boss.auto_shot()
                        p_b_j[1] = 0
                    # 碰撞检测
                    self.detect_conlision()
                    #过关等级提升
                    if self.scoreboard.score >= 2000 * self.level: 
                        #创建敌人boss飞机
                        self.boss.visible = True
                        for enemy in self.enemy_list:
                            enemy.visible = False
                        
                    self.jiange[1] -= 1
                    if self.jiange[1] >= 0:
                        self.map.levelname()
                    # 刷新显示
                    pygame.display.update()
                else:
                    self.scoreboard.prep_start()
                    pygame.display.update()
                    #调用继续游戏
                    self.handle_event()
            else:
                #自动加载游戏开始界面
                pygame.display.update()
                self.handle_event()

# 入口函数
if __name__ == "__main__":
    high_score = 0
    # 创建主场景
    mainScene = MainScene()
    # 开始游戏
    mainScene.run_game()

python_飞机大战_main_py_一相关推荐

  1. python_飞机大战_boss_py_六

    建议从python_飞机大战_diren_py_一 开始看 import pygame from bullets import * BLACK = (0, 0, 0) RED = (255, 0, 0 ...

  2. 飞机大战游戏python_基于Python的飞机大战游戏

    基于 Python 的飞机大战游戏 杨铠 [期刊名称] <电脑迷> [年 ( 卷 ), 期] 2017(000)021 [摘要] 我们每天都享受到科技带来的好处 , 了解计算机编程对每个人 ...

  3. 飞机大战游戏python_使用python完成飞机大战游戏

    听说做不了飞机大战都不算入门一个编程语言,今儿我们就来完成飞机大战的制作 分析 1.创建窗口:首先需要定义一个游戏运行的窗口(pygame)用来展示游戏的界面 2.移动飞机:能够使飞机通过键盘移动并发 ...

  4. java飞机大战爆炸效果_Java飞机大战游戏设计与实现

    1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...

  5. 用Three.js写h5小游戏-3d飞机大战

    用Three.js写h5小游戏-飞机大战 博主的话 运行图片 目录路径![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829103702978.jpg?x- ...

  6. 飞机大战html游戏全代码js、jquery操作

    飞机大战html游戏全代码 博主的话 运行图片 目录路径 飞机大战.html style.css 进行下一个游戏的开发! 注意事项 博主的话 当时博主只会html,css和原生JavaScript,假 ...

  7. Python实现飞机大战小游戏,详解每一行代码【不收藏都对不起我】

    一.模块 1. 利用 pip 安装 pygame 模块 Windows系统下的安装参考如下文章: https://blog.csdn.net/qq_38721302/article/details/8 ...

  8. Java多线程编写简易飞机大战(一)

    ** Java多线程编写简易飞机大战(一) ** 利用多线程编写飞机大战,主要有3个关键: ①继承Thread类,重写run方法: ②线程工作代码在run方法中写: ③启动时,调用线程对象的start ...

  9. android:怎样用一天时间,写出“飞机大战”这种游戏!(无框架-SurfaceView绘制)...

    序言 作为一个android开发人员,时常想开发一个小游戏娱乐一下大家,今天就说说,我是怎么样一天写出一个简单的"飞机大战"的. 体验地址:http://www.wandoujia ...

最新文章

  1. swagger2中UI界面接口点击无法展开问题解决
  2. altium designer无法创建工程_前端工程化之开发脚手架及封装自动化构建
  3. 计算机函数图象,信息技术应用用计算机绘制函数图象
  4. Java RMI 介绍
  5. Vertica系列: Vertica 数仓简单介绍
  6. python程序-怎么用手机编写Python程序?
  7. java面试题(分布式篇)
  8. java 空文件夹删除_java创建文件文件夹,删除空文件夹,删除文件夹以及所有文件...
  9. html思维导图word版,[精选]思维导图(完美排版word).doc
  10. Vue创建项目的详细步骤
  11. 基于vmdk文件创建虚拟机
  12. python爬虫总结,看这篇就够了
  13. 科学技术法-正则表达式-QT
  14. 开心一下,39 个奇葩代码注释,看完笑哭了
  15. np.arange函数
  16. 大数据热的冷思考:无法取代传统的新闻传播科研方法
  17. 新奥创:多APP场景端到端的技术体系探索与突破
  18. vim ctrl + s 终端假死?
  19. Java Web——基于Jsp+Servlet的大学生社团管理系统
  20. 细数Mac上那些好用且免费的软件(二)

热门文章

  1. python懒人小工具:python打包exe 小工具
  2. 悟饭服务器连接中断,英雄联盟连接服务器失败解决方法
  3. 一周技术思考(第22期)-编程的基本礼节
  4. 梯度消失\梯度爆炸(Vanishing/exploding gradients)与解决方案
  5. php实训心得体会doc,php实训报告心得体会php实训报告心得体会
  6. 大学计算机信息技术实践教程,清华大学出版社-图书详情-《大学信息技术基础实验教程(Windows7 + Office2010)》...
  7. Unity3D在windows10下小问题解决
  8. 周鸿祎亲自站台,360年度新旗舰究竟有何特别?
  9. linux 部署 程序,Linux 部署配置WEB APP
  10. 抖音壁纸表情包小程序源码,可对接流量主