我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python实现简单飞机大战小游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python实现简单飞机大战小游戏

为了熟悉Python基础语法,学习了一个经典的案例:飞机大战,最后实现效果如下:

实现步骤:

①下载64位对应python版本的pygamepygame-1.9.6-cp38-cp38-win_amd64.whl

② 更新pippython -m pip install --upgrade pip

③ 安装pygamepip install pygame-1.9.6-cp38-cp38-win_amd64.whl

④ 实现代码如下:

import sys  # 导入系统模块
import random  # 随机数模块
import pygame  # 导入pygame模块
import pygame.locals  # 导入pygame本地策略

ICO_PATH = "images/app.ico"  # APP_ICO
APP_NAME = "飞机大战V1.0"  # APP_NAME
Enemy_IMGS = ("images/enemy1.png", "images/enemy2.png")  # ENEMY_IMGS


# TODO 定义一个公共类
class Model:
    window = None  # 主窗体window对象

    # 初始化函数
    def __init__(self, img_path, x, y):
        self.img = pygame.image.load(img_path)
        self.x = x
        self.y = y

    # 将图片填充到背景中
    def display(self):
        Model.window.blit(self.img, (self.x, self.y))


# TODO 背景
class Background(Model):
    # 背景移动
    def move(self):
        if self.y <= Game.WINDOW_HEIGHT:
            self.y += 1
        else:
            self.y = 0

    # 背景图片展示
    def display(self):
        Model.window.blit(self.img, (self.x, self.y))  # 填充背景
        Model.window.blit(self.img, (self.x, self.y - Game.WINDOW_HEIGHT))  # 填充辅助背景


# TODO 玩家类
class PlayerPlane(Model):
    def __init__(self, img_path, x, y):
        super().__init__(img_path, x, y)
        # 子弹
        self.bullets = []

    def display(self, enemys):
        super().display()
        remove_bullets = []
        for bullet in self.bullets:

            bullet.move()
            bullet.display()
            # 如果子弹小于消失于屏幕,删除子弹
            if bullet.y < -11:
                remove_bullets.append(bullet)
            # 子弹的矩阵
            bullet_rect = pygame.locals.Rect(bullet.x, bullet.y, 5, 11)
            # TODO 进行碰撞检测
            for enemy in enemys:
                # 敌机的矩阵
                enemy_rect = pygame.locals.Rect(enemy.x, enemy.y, 57, 43)
                # 如果碰撞
                if pygame.Rect.colliderect(bullet_rect, enemy_rect):
                    # 随机修改敌机的位置模拟敌机销毁并生成新敌机并删除子弹
                    enemy.img = pygame.image.load(Enemy_IMGS[random.randint(0, 1)])
                    enemy.x = random.randint(0, Game.WINDOW_WIDTH - 57)
                    enemy.y = random.randint(-Game.WINDOW_WIDTH, -43)
                    remove_bullets.append(bullet)
                    break

        for bullet in remove_bullets:
            self.bullets.remove(bullet)


# TODO 敌机类
class EnemyPlane(Model):
    def __init__(self):
        self.img = pygame.image.load(Enemy_IMGS[random.randint(0, 1)])
        self.x = random.randint(0, Game.WINDOW_WIDTH - 57)
        self.y = random.randint(-Game.WINDOW_WIDTH, -43)

    def move(self):
        if self.y > Game.WINDOW_HEIGHT:
            self.y = -43  # 返回初始位置
        else:
            self.y += 1


# TODO 子弹类
class Bullet(Model):
    def move(self):
        self.y -= 1


# TODO 游戏类
class Game:
    WINDOW_WIDTH = 410
    WINDOW_HEIGHT = 614

    # 初始化操作
    def __init__(self):
        self.window = pygame.display.set_mode([Game.WINDOW_WIDTH, Game.WINDOW_HEIGHT])  # 窗口的设置
        self.background = Background("images/background.png", 0, 0)  # 窗体模型的设置

        self.player = PlayerPlane("images/me1.png", 180, 400)
        self.enemyPlanes = []
        for _ in range(5):
            self.enemyPlanes.append(EnemyPlane())

    # 游戏的入口函数
    def run(self):
        self.frame_init()
        while True:
            self.background.move()  # 背景向上移动,模拟环境移动
            self.background.display()  # 将图片塞入到窗体中

            self.player.display(self.enemyPlanes)

            for enemy in self.enemyPlanes:
                enemy.move()
                enemy.display()

            pygame.display.update()  # 刷新窗体
            self.event_init()  # 监听事件

    # 初始化窗口
    def frame_init(self):
        Model.window = self.window  # 将window对象赋值给Model公有类
        ico = pygame.image.load(ICO_PATH)  # 加载图片
        pygame.display.set_icon(ico)  # 设置icon
        pygame.display.set_caption(APP_NAME)  # 设置app_name

    # 事件初始化方法
    def event_init(self):
        for event in pygame.event.get():
            # 关闭事件
            if event.type == pygame.locals.QUIT:
                sys.exit()
            # 监听鼠标事件
            if event.type == pygame.locals.MOUSEMOTION:
                pos = pygame.mouse.get_pos()
                self.player.x = pos[0] - 51
                self.player.y = pos[1] - 63
        focus_state = pygame.mouse.get_pressed()
        if focus_state[0] == 1:
            pos = pygame.mouse.get_pos()
            self.player.bullets.append(Bullet("images/bullet1.png", pos[0], pos[1] - 75))


if __name__ == "__main__":
    Game().run()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python实现简单飞机大战小游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用Python实现小游戏飞机大战

本篇内容介绍了“怎么用Python实现小游戏飞机大战”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、环境安装本文是写的游戏代码,基于Pyg
2023-06-25

Python实现简单飞机大战

本文实例为大家分享了Python实现简单飞机大战的具体代码,供大家参考,具体内容如下 功能 玩家飞机可以移动,可以发射子弹,敌机随机产生,自由坠落。未添加击落敌机的功能。主要用来练习类的封装与继承。 源码# -*- coding=utf-8
2022-06-02

java如何实现飞机大战小游戏

本篇内容介绍了“java如何实现飞机大战小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MyPanel类package P;impor
2023-07-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录