python开发飞机大战游戏


Posted in Python onJuly 15, 2021

本文实例为大家分享了python开发飞机大战游戏的具体代码,供大家参考,具体内容如下

import pygame
import random
import math  # 数学模块
 
# 初始化界面
pygame.init()
# 设置窗口大小
windows = pygame.display.set_mode((800, 600))
# 设置窗口标题
pygame.display.set_caption("小赵同学")
# 引入图片 logo
icon = pygame.image.load('logo.jpg')
pygame.display.set_icon(icon)
 
# 4.游戏获取背景
bgcolor = pygame.image.load('bj.png')
# 5.设置玩家飞机
playerimg = pygame.image.load('fj.png')
X = 350  # 设置玩家X轴
Y = 480  # 设置玩家Y轴
# 停止移动就可以将palyerStep改为0。控制一个变量来指定飞机指定移动
playerStep = 0
 
# 添加背景音乐
pygame.mixer.music.load('bj.mp3')
pygame.mixer.music.play(-1)
# 添加射中的音效
# bao_music = pygame.mixer.Sound('bj.mp3')
 
 
# 分数
score = 0
# 添加字体和大小
font = pygame.font.Font('freesansbold.ttf', 32)
 
 
# 字体类
def show_score():
    # 显示的文字
    text = f"Score:{score}"
    # 渲染然后显示 显示text True表示24位的字
    score_render = font.render(text, True, (0, 255, 0))
    # 指定字体放到那个位置
    windows.blit(score_render, (10, 10))
 
 
# 游戏结束的变量
over = False
over_font = pygame.font.Font('freesansbold.ttf', 64)
 
# 结束的提示语
def check_over():
    if over:
        text = "Game Over"
        render = font.render(text, True, (255, 0, 0))
        windows.blit(render, (320, 200))
 
 
# 8.添加敌人.
 
# 11.添加多个敌人
number_enemy = 6
 
 
# 敌人类
class Enemy:
    def __init__(self):
        #
        self.img = pygame.image.load('enemy.png')
        self.x = random.randint(200, 600)  # 随机产生X
        self.y = random.randint(50, 250)  # 随机产生Y
        self.step = random.randint(2, 4)  # 随机产生速度
 
    # 当被射中时恢复位置
    def reset(self):
        self.x = random.randint(200, 600)
        self.y = random.randint(50, 180)
 
 
def distance(bx, by, ex, ey):
    a = bx - ex
    b = by - ey
    return math.sqrt(a * a + b * b)  # 开根号
 
 
# 保存所有的敌人
enemis = []
for i in range(number_enemy):  # 每次循环都都在class Enemy中过一边,所以随机产生一个敌人的参数并且保存到列表中
    enemis.append(Enemy())
 
 
# 显示敌人并且实现敌人的移动下沉
def enemy():  # 循环保存敌人的列表,每个敌人都过在这个for循环里被限制了移动的轨迹
    global over
    for e in enemis:
        windows.blit(e.img, (e.x, e.y))
        e.x += e.step
        if e.x > 750 or e.x < 0:  # 判断敌人是否到了边界
            e.step *= -1  # 敌人碰到界面往返
            e.y += 40  # 设置敌人往下沉
            # 判断敌人的位置如果到达指定的地方则游戏结束
            if e.y > 436:
                over = True
                print("游戏结束啦")
                enemis.clear()
 
 
# 设置飞机及飞机移动范围的函数 == 飞机类型
def fiji_type():  # 设置飞机的坐标和飞机X Y轴最大的移动位置
    global X, Y
    # 5. 设置飞机
    windows.blit(playerimg, (X, Y))
    # 6.飞机移动
    X += plagerStep
    # 预防飞机出界
    if X > 680:
        X = 680
    if X < 0:
        X = 0
 
 
# 子弹的类
class Bullet:
    def __init__(self):
        self.img = pygame.image.load('bullet.png')
        self.x = X + 55  # 设置子弹的X轴
        self.y = Y + 5  # 子弹出现在玩家的上方
        self.step = 2  # 子弹移动的速度
 
    # 击中敌人
    def hit(self):
        global score
        for e in enemis:
            if distance(self.x, self.y, e.x, e.y) < 30:
                # 射中了
                bullets.remove(self)
                e.reset()  # 重置敌人
                # 没击中加10分
                score += 10
 
 
bullets = []  # 保存现有的子弹
 
 
# 显示子弹移动
def show_bullets():
    for b in bullets:
        windows.blit(b.img, (b.x, b.y))
        b.hit()  # 查看是否击中了敌人
        b.y -= b.step  # 往上移动
        # 判断子弹是否出了界面
        if b.y < 0:
            bullets.remove(b)
 
 
# 3.游戏主循环
running = True
while running:
    # 4.背景
    # 每个循环是画一张画组成的
    # 画出来bgcolor
    windows.blit(bgcolor, (0, 0))
    # 调用这个字体
    show_score()
    # event.get操作事件
    for event in pygame.event.get():
        # 判断操作类型是不是QUIT
        if event.type == pygame.QUIT:
            # 如果程序为False就会停止则关闭
            running = False
        # 7.控制飞机的移动
        # 通过控制键盘的事件来控制(playerStep值)飞机的移动
        if event.type == pygame.KEYDOWN:
            # 判断按下键盘右键,按下则移动
            if event.key == pygame.K_RIGHT:
                plagerStep = 3
                # 判断按下左键
            elif event.key == pygame.K_LEFT:
                plagerStep = -3
            # 判断按下空格健的反应
            elif event.key == pygame.K_SPACE:
                # 创建一个子弹
                b = Bullet()
                bullets.append(b)
 
                # 判断松来按键停止,
        if event.type == pygame.KEYUP:
            plagerStep = 0
    # 调用飞机的类型的函数
    fiji_type()
    # 调用敌人这个函数
    enemy()
    show_bullets()  # 显示子弹
    # 游戏结束语
    check_over()
    # 刷新更新数据
    pygame.display.update()
# global 设置全局变量
 
 
''' 游戏结构
1.设置窗口大小
2.背景图
3.显示飞机
4.移动飞机
5.控制出界
6.获取键盘事件
7.显示敌人
8.敌人移动
9.下沉和随机位置
10.显示多个敌人
11.响应空格键
12.添加子弹
13.发射子弹
14.射中检测之距离
15.射中检测
16.添加音效 
17.添加并显示分数
18.游戏结束
19.结束提示
'''

python开发飞机大战游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例详解Python中的split()函数的使用方法
Apr 07 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
python3+mysql查询数据并通过邮件群发excel附件
Feb 24 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 Python
详解Python中下划线的5种含义
Python操作CSV格式文件的方法大全
openstack中的rpc远程调用的方法
Python实现查询剪贴板自动匹配信息的思路详解
如何利用Python实现一个论文降重工具
python实现MD5进行文件去重的示例代码
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
You might like
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
Yii PHP Framework实用入门教程(详细介绍)
2013/06/18 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
jQuery 自定义函数写法分享
2012/03/30 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
js同源策略详解
2015/05/21 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
详解Python网络爬虫功能的基本写法
2016/01/28 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
通过python3实现投票功能代码实例
2019/09/26 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
高中生自我鉴定范文
2013/10/30 职场文书
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
求职信范文怎么写
2015/03/19 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
详解Python中__new__方法的作用
2022/03/31 Python
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server