Python小游戏17——飞机大战

  • 运行结果

d8b57dd7ac5249a4ab245c6201c78af7.png

 

bf0a4a6a3756412aab4317f282fd38bc.png

首先,你需要安装Pygame库。如果你还没有安装它,可以使用以下命令来安装:

bash

pip install pygame

 

  • 代码:

python

import pygame

import random

 

# 初始化Pygame

pygame.init()

 

# 屏幕大小

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption("飞机大战")

 

# 颜色定义

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

RED = (255, 0, 0)

 

# 飞机类

class Player(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = pygame.Surface((50, 40))

        self.image.fill(WHITE)

        self.rect = self.image.get_rect()

        self.rect.centerx = SCREEN_WIDTH // 2

        self.rect.bottom = SCREEN_HEIGHT - 10

        self.speed_x = 0

 

    def update(self):

        self.speed_x = 0

        keystate = pygame.key.get_pressed()

        if keystate[pygame.K_LEFT]:

            self.speed_x = -5

        if keystate[pygame.K_RIGHT]:

            self.speed_x = 5

        self.rect.x += self.speed_x

        if self.rect.right > SCREEN_WIDTH:

            self.rect.right = SCREEN_WIDTH

        if self.rect.left < 0:

            self.rect.left = 0

 

    def shoot(self):

        bullet = Bullet(self.rect.centerx, self.rect.top)

        all_sprites.add(bullet)

        bullets.add(bullet)

 

# 子弹类

class Bullet(pygame.sprite.Sprite):

    def __init__(self, x, y):

        super().__init__()

        self.image = pygame.Surface((10, 20))

        self.image.fill(RED)

        self.rect = self.image.get_rect()

        self.rect.centerx = x

        self.rect.bottom = y

        self.speed_y = -10

 

    def update(self):

        self.rect.y += self.speed_y

        if self.rect.bottom < 0:

            self.kill()

 

# 敌人类

class Enemy(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = pygame.Surface((50, 40))

        self.image.fill(RED)

        self.rect = self.image.get_rect()

        self.rect.x = random.randrange(SCREEN_WIDTH - self.rect.width)

        self.rect.y = random.randrange(-100, -40)

        self.speed_y = random.randrange(1, 8)

 

    def update(self):

        self.rect.y += self.speed_y

        if self.rect.top > SCREEN_HEIGHT + 10:

            self.kill()

 

# 创建精灵组

all_sprites = pygame.sprite.Group()

enemies = pygame.sprite.Group()

bullets = pygame.sprite.Group()

 

# 创建玩家实例并添加到精灵组

player = Player()

all_sprites.add(player)

 

# 创建敌人实例并添加到精灵组

for _ in range(8):

    enemy = Enemy()

    all_sprites.add(enemy)

    enemies.add(enemy)

 

# 游戏主循环

running = True

clock = pygame.time.Clock()

 

while running:

    # 事件处理

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_SPACE:

                player.shoot()

 

    # 更新游戏

    all_sprites.update()

 

    # 检查子弹是否击中敌人

    hits = pygame.sprite.groupcollide(enemies, bullets, True, True)

    for hit in hits:

        enemy = Enemy()

        all_sprites.add(enemy)

        enemies.add(enemy)

 

    # 绘制游戏

    screen.fill(BLACK)

    all_sprites.draw(screen)

 

    # 刷新屏幕

    pygame.display.flip()

 

    # 控制帧率

    clock.tick(60)

 

pygame.quit()

 

  • 知识点总结——游戏实现的关键技术

Pygame模块的使用:Pygame是一个用于创建视频游戏的Python库,它提供了图像、声音、事件处理等功能。通过使用Pygame模块,可以很方便地实现《飞机大战》小游戏的图像显示、声音播放、事件监听等功能。

面向对象编程:在《飞机大战》小游戏的实现中,采用了面向对象编程的思想。通过将游戏元素(如英雄飞机、敌机、子弹等)封装成类,可以更方便地管理它们的状态和行为,并实现代码的复用和扩展。

碰撞检测:碰撞检测是游戏实现中的一个重要环节。在《飞机大战》小游戏中,需要检测英雄飞机与敌机、子弹与敌机之间的碰撞情况,并根据碰撞结果进行相应的处理(如扣除生命值、播放动画和音效等)。

事件监听与处理:游戏需要监听玩家的操作(如键盘按键)和系统的事件(如窗口关闭),并根据事件进行相应的处理。例如,当玩家按下方向键时,需要改变英雄飞机的位置;当窗口关闭时,需要退出游戏等。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/904790.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 基本语法与语言环境(1/30)

目录 Java 基本语法与语言环境 1. Java 语言环境搭建 1.1 安装 JDK 1.2 配置系统变量 配置步骤&#xff08;Windows 系统&#xff09; 2. Hello World 程序 2.1 代码解析 2.2 编译与运行 3. Java 程序结构 4. 基本语法规则 4.1 标识符与关键字 4.2 数据类型与变量 …

开源一个开发的聊天应用与AI开发框架,集成 ChatGPT,支持私有部署的源码

大家好&#xff0c;我是一颗甜苞谷&#xff0c;今天分享一个开发的聊天应用与AI开发框架&#xff0c;集成 ChatGPT&#xff0c;支持私有部署的源码。 介绍 当前系统集成了ChatGPT的聊天应用&#xff0c;不仅提供了基本的即时通讯功能&#xff0c;还引入了先进的AI技术&#x…

LSTM——长短期记忆神经网络

目录 1.LSTM 工作原理 2.LSTM的代码实现 3.代码详解 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;用于解决长序列中的长期依赖问题。它通过引入门机制&#xff0c;控制信息的流入、保留和输出&…

大数据新视界 -- 大数据大厂之优化大数据计算框架 Tez 的实践指南

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

dedecms手机搜索不跳转手机页面模板的解决方法

1.找到文件plus/search.php&#xff0c;添加如下代码并保存 $mobile (isset($mobile) && is_numeric($mobile)) ? $mobile : 0; if ( $mobile1 ) {define(DEDEMOB, Y); } 2.来到网站后台&#xff0c;默认模板管理&#xff0c;新建模板 将手机端列表页面的.html文件&…

UE5之5.4 第一人称示例代码阅读2 子弹发射逻辑

TP_WeaponComponent.h 看看头文件 暴露了attach weapon和fire给蓝图 这两个函数意义一看名字吧&#xff0c;就是捡起来枪的时候执行&#xff0c;一个就是发射子弹的时候执行 #pragma once#include "CoreMinimal.h" #include "Components/SkeletalMeshComponen…

matlab读取逐日的1km分辨率中国大陆地区的土壤水数据,并汇总至逐月分辨率

1.前言 ESSD一篇文章介绍了逐日的土壤水数据&#xff1a; ESSD - A 1 km daily soil moisture dataset over China using in situ measurement and machine learning 图片来源&#xff1a;Li et al., 2022, ESSD 中国大陆地区的土壤水的数据下载地址&#xff1a; 国家青藏高…

哈工大《理论力学》第九版课后答案解析及笔记PDF

第九版序 哈工大《理论力学》初版于1961年&#xff0c;先后再版8次&#xff0c;曾获得首届国家优秀教材奖和国家级教学成果奖。本书第8版为“十二五”普通高等教育本科国家级规划教材&#xff0c;并于2021年被国家教材委员会评为首届全国教材建设奖全国优秀教材一等奖。 本书…

MindShare PCIE 3.0 笔记-第三四章

MindShare 官网&#xff0c;地址如下: MindShare Charpter 3: Configuration 概述 主要介绍 PCIe 驱动对 PCIE 设备中 function 的 Config Header 的访问. 1. 总线、设备与功能定义 每一个 PCIE function 都是独一无二的&#xff0c;通过设备号与总线号区分。 2. PCIe 总线…

Windows和Linux等保加固测评(2)

本文以等保2.0为标准,三级等保要求,centos7.6.1810系统为例进行演示。 关于加密 /etc/shadow文件格式和/etc/passwd类似,由若干字段组成,字段之间用“:”隔开 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 ice:$6$5NA…

Redis的删除策略以及内存淘汰机制

在日常开发中&#xff0c;我们使用 Redis 存储 key 时通常会设置一个过期时间&#xff0c;但是 Redis 是怎么删除过期的 key&#xff0c;而且 Redis 是单线程的&#xff0c;删除 key 会不会造成阻塞。要搞清楚这些&#xff0c;就要了解 Redis 的过期策略和内存淘汰机制。 Redi…

h5小游戏5--杀死国王(附源码)

源代码如下 1.游戏基本操作 用空格键攻击&#xff0c;kill the king。 css样式源码 charset "UTF-8";font-face {font-family: "AddLGBitmap09";src: url("https://assets.codepen.io/217233/AddLGBitmap09.woff2") format("woff2"…

CentOS下安装ElasticSearch7.9.2(无坑版)

准备目录 搞一个自己喜欢的目录 mkdir /usr/local/app切换到该目录 cd /usr/local/app下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz选择其他版本 点击进入官网 https://www.elastic.co/guide/en/elasticsea…

Seven 9.20.01 | 趣味个人锻炼挑战,每天7分钟,坚持7个月

这是一款趣味个人锻炼挑战应用&#xff0c;基于《纽约时报杂志》报道的7分钟科学锻炼文章。无需锻炼设备&#xff0c;每天只需几分钟时间&#xff0c;趣味成就和奖励不断鼓励你。只需一张椅子、墙壁和自身的体重&#xff0c;7分钟锻炼基于科学研究&#xff0c;可在较短的时间内…

传智杯 第六届-复赛-A

题目描述&#xff1a; 小红拿到了一个字符串&#xff0c;她准备把这个字符串劈成两部分&#xff0c;使得第一部分的长度恰好是第二部分的两倍。你能帮帮她吗&#xff1f; 输入描述: 一个仅由小写字母组成的字符串&#xff0c;长度不超过10^5。 输出描述: 如果无解&#xff0c…

RFID技术实现产线全自动管理

产线自动化管理是现代制造企业提升竞争力的关键&#xff0c;它通过减少人工干预、提高生产效率、降低成本和增强库存管理的准确性&#xff0c;帮助企业实现精益生产。自动化管理系统能够实时监控生产过程&#xff0c;快速响应市场变化&#xff0c;提高产品的质量和交付速度。在…

CentOS 7 下升级 OpenSSL

升级openssh,下载&#xff1a;https://download.csdn.net/download/weimeilayer/89935114 上传到服务器&#xff0c;然后执行命令 rpm -Uvh *.rpm --nodeps --force安装依赖 yum -y install gcc perl make zlib-devel perl-CPAN下载安装包&#xff1a;https://github.com/ope…

C# 结构型设计模式----装饰器模式

1、简介 简要说明就是动态地给一个对象添加一些额外的职责。适用于需要扩展一个类的功能&#xff0c;或给一个类添加多个变化的情况。 装饰器&#xff0c;顾名思义就是在原有基础上添加一些功能。 装饰器模式中各个角色有&#xff1a; 抽象构件&#xff08;Component&#x…

.NET内网实战:通过白名单文件反序列化漏洞绕过UAC

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏&#xff0c;主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧&#xff0c;对内网和后渗透感兴趣的朋友们可以订阅该电子报刊&#xff0c;解锁更多的报刊内容。 02基本介绍 03原理分析 在渗透测试和红…

基于echarts、php、Mysql开发的数据可视化大屏

大屏效果展示 管理员进入数据可视化页面将看到数据可视化大屏。大屏内容包括两个条形图&#xff0c;用于统计当前网站所有用户的MBTI 16型人格分布&#xff1b;玫瑰图&#xff0c;用于展示当前网站用户MBTI四个维度&#xff0c;八个字母的占比&#xff1b;折线图&#xff0c;用…