python_飞机大战_main_py_一
建议从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_一相关推荐
- python_飞机大战_boss_py_六
建议从python_飞机大战_diren_py_一 开始看 import pygame from bullets import * BLACK = (0, 0, 0) RED = (255, 0, 0 ...
- 飞机大战游戏python_基于Python的飞机大战游戏
基于 Python 的飞机大战游戏 杨铠 [期刊名称] <电脑迷> [年 ( 卷 ), 期] 2017(000)021 [摘要] 我们每天都享受到科技带来的好处 , 了解计算机编程对每个人 ...
- 飞机大战游戏python_使用python完成飞机大战游戏
听说做不了飞机大战都不算入门一个编程语言,今儿我们就来完成飞机大战的制作 分析 1.创建窗口:首先需要定义一个游戏运行的窗口(pygame)用来展示游戏的界面 2.移动飞机:能够使飞机通过键盘移动并发 ...
- java飞机大战爆炸效果_Java飞机大战游戏设计与实现
1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...
- 用Three.js写h5小游戏-3d飞机大战
用Three.js写h5小游戏-飞机大战 博主的话 运行图片 目录路径![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829103702978.jpg?x- ...
- 飞机大战html游戏全代码js、jquery操作
飞机大战html游戏全代码 博主的话 运行图片 目录路径 飞机大战.html style.css 进行下一个游戏的开发! 注意事项 博主的话 当时博主只会html,css和原生JavaScript,假 ...
- Python实现飞机大战小游戏,详解每一行代码【不收藏都对不起我】
一.模块 1. 利用 pip 安装 pygame 模块 Windows系统下的安装参考如下文章: https://blog.csdn.net/qq_38721302/article/details/8 ...
- Java多线程编写简易飞机大战(一)
** Java多线程编写简易飞机大战(一) ** 利用多线程编写飞机大战,主要有3个关键: ①继承Thread类,重写run方法: ②线程工作代码在run方法中写: ③启动时,调用线程对象的start ...
- android:怎样用一天时间,写出“飞机大战”这种游戏!(无框架-SurfaceView绘制)...
序言 作为一个android开发人员,时常想开发一个小游戏娱乐一下大家,今天就说说,我是怎么样一天写出一个简单的"飞机大战"的. 体验地址:http://www.wandoujia ...
最新文章
- swagger2中UI界面接口点击无法展开问题解决
- altium designer无法创建工程_前端工程化之开发脚手架及封装自动化构建
- 计算机函数图象,信息技术应用用计算机绘制函数图象
- Java RMI 介绍
- Vertica系列: Vertica 数仓简单介绍
- python程序-怎么用手机编写Python程序?
- java面试题(分布式篇)
- java 空文件夹删除_java创建文件文件夹,删除空文件夹,删除文件夹以及所有文件...
- html思维导图word版,[精选]思维导图(完美排版word).doc
- Vue创建项目的详细步骤
- 基于vmdk文件创建虚拟机
- python爬虫总结,看这篇就够了
- 科学技术法-正则表达式-QT
- 开心一下,39 个奇葩代码注释,看完笑哭了
- np.arange函数
- 大数据热的冷思考:无法取代传统的新闻传播科研方法
- 新奥创:多APP场景端到端的技术体系探索与突破
- vim ctrl + s 终端假死?
- Java Web——基于Jsp+Servlet的大学生社团管理系统
- 细数Mac上那些好用且免费的软件(二)
热门文章
- python懒人小工具:python打包exe 小工具
- 悟饭服务器连接中断,英雄联盟连接服务器失败解决方法
- 一周技术思考(第22期)-编程的基本礼节
- 梯度消失\梯度爆炸(Vanishing/exploding gradients)与解决方案
- php实训心得体会doc,php实训报告心得体会php实训报告心得体会
- 大学计算机信息技术实践教程,清华大学出版社-图书详情-《大学信息技术基础实验教程(Windows7 + Office2010)》...
- Unity3D在windows10下小问题解决
- 周鸿祎亲自站台,360年度新旗舰究竟有何特别?
- linux 部署 程序,Linux 部署配置WEB APP
- 抖音壁纸表情包小程序源码,可对接流量主