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标准库之随机数 (math包、random包)介绍
Nov 25 Python
Python实现拼接多张图片的方法
Dec 01 Python
python连接MySQL数据库实例分析
May 12 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 Python
python中logging库的使用总结
Oct 18 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
pygame游戏之旅 如何制作游戏障碍
Nov 20 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
基于python二叉树的构造和打印例子
Aug 09 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
Django+Celery实现动态配置定时任务的方法示例
May 26 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
详解Python中下划线的5种含义
Python操作CSV格式文件的方法大全
openstack中的rpc远程调用的方法
Python实现查询剪贴板自动匹配信息的思路详解
如何利用Python实现一个论文降重工具
python实现MD5进行文件去重的示例代码
深入浅析python3 依赖倒置原则(示例代码)
Jul 09 #Python
You might like
1 Tube Radio
2021/03/02 无线电
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
详解Python3的TFTP文件传输
2018/06/26 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
Python利用命名空间解析XML文档
2020/08/10 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
社区六一儿童节活动总结
2015/02/11 职场文书
中秋节慰问信
2015/02/15 职场文书
刑事上诉状范文
2015/05/22 职场文书