当前位置: 首页 > news >正文

Python球球大作战

系列文章

序号直达链接
表白系列
1Python制作一个无法拒绝的表白界面
2Python满屏飘字表白代码
3Python无限弹窗满屏表白代码
4Python李峋同款可写字版跳动的爱心
5Python流星雨代码
6Python漂浮爱心代码
7Python爱心光波代码
8Python普通的玫瑰花代码
9Python炫酷的玫瑰花代码
10Python多彩的玫瑰花代码
节日系列
1Python动漫风烟花秀代码
2Python新年烟花秀代码
3Python圣诞礼物代码
4Python画圣诞树代码
5Python可爱版圣诞树丨绿色
6Python可爱版圣诞树丨粉色
7Python大雪纷飞代码
8Python生日蛋糕代码
9Python五彩气球代码
10Python国庆祝福代码
11Python万圣礼物代码
12Python愚人节礼物代码
13Python浪漫星空代码
14Python樱花树代码
动漫系列
1Python名侦探柯南
2Python喜羊羊
3Python懒羊羊
4Python沸羊羊
5Python小灰灰
6Python小香香
7Python灰太狼
8Python海绵宝宝
9Python哆啦A梦
10Python凯蒂猫
11Python猫和老鼠
12Python草莓熊
13Python迷你皮卡丘
14Python高级皮卡丘
15Python豪华皮卡丘
16Python史迪仔
17Python小熊猫
18Python蜘蛛侠
19Python可爱版蜡笔小新
20Python萌萌的蜡笔小新
21Python罗小黑
22Python猪猪侠
炫酷系列
1  Python张万森下雪了
2Python一闪一闪亮晶晶
3Python黑客帝国代码雨
4Python七彩花朵
5Python模拟3D星空
6Python金榜题名
7Python满天星

写在前面

Python语言实现球球大作战小游戏。

技术需求

  1. Python编程语言

    • 使用Python作为编程语言,结合了面向对象编程(OOP)和常规的函数式编程。
  2. Pygame库

    • 游戏引擎pygame是一个Python游戏开发库,用于创建2D图形和处理用户输入。在本项目中,pygame用于图形显示(绘制小球、背景等),处理键盘和鼠标事件(控制玩家移动和射击),以及管理游戏循环。
    • 图形绘制:利用pygame.draw.circle方法绘制球形,并通过更新窗口显示游戏画面。
    • 事件管理:通过pygame.event.get()捕获用户的输入事件,如键盘按键、鼠标点击等。
    • 定时控制:使用pygame.time.Clock()来控制游戏循环的帧率,确保游戏以固定的速度运行。
  3. 面向对象编程(OOP)

    • 使用Ball类来表示游戏中的球,每个球对象具有位置、半径、颜色、速度等属性,并具有移动、碰撞检测、改变速度等方法。通过这种封装,游戏中所有的球都可以通过统一的类方法进行管理。
  4. 数学与物理

    • 碰撞检测:通过计算两个球之间的距离来判断是否发生碰撞。若距离小于两个球的半径之和,则认为发生了碰撞。
    • 随机数生成:通过random.randint生成随机数用于球的位置、速度、大小和颜色的初始化,使得游戏的每次开始都有不同的体验。
    • 矢量计算:在吐球(射击)时,使用了pygame.math.Vector2进行鼠标位置与球之间的矢量计算,确定球的运动方向。
  5. 用户输入处理

    • 键盘输入:通过pygame.key.get_pressed()获取用户按下的键,控制玩家球的上下左右移动。
    • 鼠标输入:通过pygame.mouse.get_pressed()pygame.mouse.get_pos()检测鼠标按键和位置,控制玩家吐出子弹。

完整代码

import pygame
import random
import math
# 定义常量
WIDTH = 1280
HEIGHT = 640
MAP_WIDTH = WIDTH * 3
MAP_HEIGHT = HEIGHT * 3
ball_NUM = 299
# 定义颜色
RED = (255, 0, 0)
WHITE = (255, 255, 255)# 定义球类
class Ball:def __init__(self, x, y, r, color):self.x = xself.y = yself.r = rself.color = colorself.dx = random.randint(-5, 5)  # 随机速度self.dy = random.randint(-5, 5)def move(self):self.x += self.dxself.y += self.dy# 边界碰撞检测if self.x < 0 or self.x > MAP_WIDTH:self.dx = -self.dxif self.y < 0 or self.y > MAP_HEIGHT:self.dy = -self.dy# 改变方向def change(self):self.dx = random.randint(-3, 3)self.dy = random.randint(-3, 3)# 碰撞检测def collide(self, other):return math.sqrt((self.x - other.x) ** 2 + (self.y - other.y) ** 2) < max(self.r, other.r)……

代码分析

这段代码实现了一个简单的球球大作战游戏。该游戏是一个2D平面的多人在线游戏,玩家扮演一个小球,通过吃其他小球来增大自己的体积,同时也可以通过吐出自己的小球来攻击其他玩家。

在代码中,首先导入了需要的pygame模块以及其他一些必要的模块。然后定义了一些常量,包括窗口的宽度和高度,地图的宽度和高度以及球的数量。接着定义了一些颜色常量。

代码中定义了一个球类,球类的属性包括位置(x, y),半径(r),颜色(color)和速度(dx, dy)。球类还包括移动(move)方法,用于更新球的位置;改变方向(change)方法,用于随机改变球的速度和方向;碰撞检测(collide)方法,用于判断两个球是否碰撞。

接下来定义了玩家移动(player_move)函数,该函数根据键盘输入来移动玩家球的位置。然后定义了吃食物(eat_ball)函数,该函数检测玩家球与其他球的碰撞,并根据碰撞结果进行相应的操作。如果玩家球碰撞了其他球且体积足够大,玩家球会吞噬该球,并增加自己的体积和分数;如果玩家球碰撞了其他球但体积不够大,玩家球会被重置,并分数归零;如果两个其他球碰撞,较大的球会吞噬较小的球,并增加自己的体积。

接下来定义了显示游戏界面(show)函数,该函数使用pygame绘制游戏界面,并在界面上显示当前分数。游戏界面包括玩家球和其他球的位置以及大小。最后定义了用户控制小球吐出小球(shoot_ball)的函数,该函数通过鼠标点击事件来控制,当鼠标左键被点击时,玩家球会吐出一个小球,并根据鼠标的位置和速度来确定吐出小球的方向。吐出小球会消耗玩家球一定的体积。

在主循环中,首先初始化pygame并创建游戏窗口。然后初始化游戏元素,包括玩家球和其他球的位置、大小和速度。接着进入游戏主循环,处理事件、移动球、吃食物、吐出小球、显示游戏界面,并保持一定的帧率。最后退出游戏。

总的来说,这段代码实现了一个简单的球球大作战游戏,玩家可以通过键盘控制自己的小球移动和吐出小球,通过吃其他球来增加分数,同时还可以击败其他玩家。游戏界面简单美观,操作简单易上手,给玩家带来了一定的娱乐和挑战。

注意事项

如未安装Pygame库,请先安装:

pip install pygame

写在后面

我是一只有趣的兔子,感谢你的喜欢!

相关文章:

Python球球大作战

系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…...

入侵他人电脑,实现远程控制(待补充)

待补充 在获取他人无线网网络密码后&#xff0c;进一步的操作是实现入侵他人电脑&#xff0c;这一步需要获取对方的IP地址并需要制作自己的代码工具自动化的开启或者打开对方的远程访问权限。 1、获取IP地址&#xff08;通过伪造的网页、伪造的Windows窗口、hook&#xff0c;信…...

数据分析实战—IMDB电影数据分析

1.实战内容 1.加载数据到movies_df&#xff0c;输出前5行&#xff0c;输出movies_df.info(),movies_df.describe() # &#xff08;1&#xff09;加载数据集&#xff0c;输出前5行 #导入库 import pandas as pd import numpy as np import matplotlib import matplotlib.pyplo…...

Google guava 最佳实践 学习指南之08 `BiMap`(双向映射)

guava 最佳实践 学习指南 Google Guava 库中的 BiMap&#xff08;双向映射&#xff09;是一种特殊的映射类型&#xff0c;它维护了映射的反向视图&#xff0c;并确保不存在重复值&#xff0c;且始终可以安全地使用值获取对应的键。以下是关于 Guava BiMap 的一些介绍和用法&am…...

【设计模式】空接口

&#xff08;空&#xff09;接口的用法总结 接口用于定义某个类的特定能力或特性。在工作流或任务管理系统中&#xff0c;接口可以帮助标识哪些任务可以在特定阶段执行。通过实现这些接口&#xff0c;任务类可以被标识为在相应的阶段可以执行&#xff0c;从而在验证和执行逻辑…...

Grad-CAM-解释CNN决策过程的可视化技术

Grad-CAM&#xff08;Gradient-weighted Class Activation Mapping&#xff09;是一种用于解释卷积神经网络&#xff08;CNN&#xff09;决策过程的可视化技术。其核心思想是通过计算分类分数相对于网络确定的卷积特征的梯度&#xff0c;来识别图像中哪些部分对分类结果最为重要…...

前后端学习中本周遇到的内容

一、RequiresPermissions注解 例如&#xff1a; RequiresPermissions("demo:staff:save") void saveStaff(); 权限控制&#xff0c;要求含有demo:staff:save的权限才能执行方法saveStaff()。 二、遇到的细节问题 在进行增删改查时&#xff0c;发送http请求时&…...

基于海思soc的智能产品开发(巧用mcu芯片)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于开发车规级嵌入式软件的同学来说&#xff0c;socmcu这样的组合&#xff0c;他们并不陌生。但是传统的工业领域&#xff0c;比如发动机、医疗或…...

批量DWG文件转dxf(CAD图转dxf)——c#插件实现

此插件可将指定文件夹及子文件夹下的dwg文件批量转为dxf文件。 &#xff08;使用方法&#xff1a;命令行输入 “netload” 加载插件&#xff0c;然后输入“dwg2dxf”运行&#xff0c;选择文件夹即可。&#xff09; 生成dxf在此新建的文件夹路径下&#xff0c;包含子文件夹内的…...

flask flask-socketio创建一个网页聊天应用

应用所需环境&#xff1a; python 3.11.11 其他 只需要通过这个命令即可 pip install flask3.1.0 Flask-SocketIO5.4.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 最好是用conda创建一个新的虚拟环境来验证 完整的pip list如下 Package Version ----…...

使用CNN模型训练图片识别(键盘,椅子,眼镜,水杯,鼠标)

首先是环境&#xff1a; 我是在Anaconda3中的Jupyter Notebook (tensorflow)中进行训练&#xff0c;环境各位自行安装 数据集&#xff1a; 本次数据集五个类型&#xff08;键盘&#xff0c;椅子&#xff0c;眼镜&#xff0c;水杯&#xff0c;鼠标&#xff09;我收集了每个接近两…...

Gitlab 数据备份全攻略:命令、方法与注意事项

文章目录 1、备份命令2、备份目录名称说明3、手工备份配置文件3.1 备份配置文件3.2 备份ssh文件 4、备份注意事项4.1 停止puma和sicdekiq组件4.2 copy策略需要更多磁盘空间 5、数据备份方法5.1 docker命令备份5.2 kubectl命令备份5.3 参数说明5.4、选择性备份5.5、非tar备份5.6…...

Vue|scoped样式

在 Vue.js 中&#xff0c;scoped 是一个非常有用的特性&#xff0c;允许你将样式限制在当前组件的作用域内&#xff0c;避免样式泄漏到其他组件。它是通过 Vue 的单文件组件&#xff08;.vue 文件&#xff09;中的 <style> 标签实现的。 目录 案例演示创建多个vue文件如何…...

eBPF试一下(TODO)

eBPF程序跟踪linux内核软中断 eBPF (Extended Berkeley Packet Filter) 是一种强大的 Linux 内核技术&#xff0c;最初用于网络数据包过滤&#xff0c;但现在它已经扩展到了多个领域&#xff0c;如性能监控、安全性、跟踪等。eBPF 允许用户在内核中执行代码&#xff08;以一种安…...

【数据安全】如何保证其安全

数据安全风险 数字经济时代&#xff0c;数据已成为重要的生产要素。智慧城市、智慧政务的建设&#xff0c;正以数据为核心&#xff0c;推动城市管理的智能化和公共服务的优化。然而&#xff0c;公共数据开放共享与隐私保护之间的矛盾日益凸显&#xff0c;如何在确保数据安全的…...

[创业之路-196]:华为成功经验的总结与教训简单总结

目录 前言&#xff1a; 成功经验 教训归纳 前言&#xff1a; 华为作为世界领先的通信设备制造商&#xff0c;其成功经验与教训值得深入探讨。 以下是对华为成功经验的总结与教训的归纳&#xff1a; 成功经验 战略定位明确&#xff1a; 华为始终坚持“死死抓住核心技术”…...

使用 NVIDIA DALI 计算视频的光流

引言 光流&#xff08;Optical Flow&#xff09;是计算机视觉中的一种技术&#xff0c;主要用于估计视频中连续帧之间的运动信息。它通过分析像素在时间维度上的移动来预测运动场&#xff0c;广泛应用于目标跟踪、动作识别、视频稳定等领域。 光流的计算传统上依赖 CPU 或 GP…...

【UE5】pmx导入UE5,套动作。(防止“气球人”现象。

参考视频&#xff1a;UE5Animation 16: MMD模型與動作導入 (繁中自動字幕) 问题所在&#xff1a; 做法记录&#xff08;自用&#xff09; 1.导入pmx&#xff0c;删除这两个。 2.转换给blender&#xff0c;清理节点。 3.导出时&#xff0c;内嵌贴图&#xff0c;选“复制”。 …...

vue预览和下载 pdf、ppt、word、excel文档,文件类型为链接或者base64格式或者文件流,

** 方法1&#xff1a;word、xls、ppt、pdf 这些文件&#xff0c; 如果预览的文件是链接可以直接打开&#xff0c;可用微软官方的预览地址 ** <iframe width"100%" :src"textVisibleURl " id"myFramePPT" style"border: none;backgroun…...

前端如何实现大文件上传

‌在前端实现大文件上传的主要方法包括分片上传、断点续传、WebSocket上传和通过第三方服务上传。‌ ‌分片上传‌&#xff1a;将大文件切割成多个小片段&#xff0c;然后分别上传。可以使用HTML5的File API和Blob对象&#xff0c;通过FileReader读取文件内容&#xff0c;然后使…...

2026年DevOps平台选型推荐:聚焦国产化适配与效能提升的关键考量

在数字化转型进入深水区的当下&#xff0c;中国企业对于DevOps平台的选型标准已发生深刻变化&#xff0c;从基础功能的完备性转向对本土化适配深度、安全合规能力与长期技术演进空间的综合权衡。2026年&#xff0c;这一趋势将更为显著&#xff0c;企业决策者需要在众多方案中寻…...

BilibiliDown:三步搞定B站无损音频提取,构建你的专属音乐库

BilibiliDown&#xff1a;三步搞定B站无损音频提取&#xff0c;构建你的专属音乐库 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.…...

从赛博朋克到量子有机体,未来主义风格演进全图谱,深度解析MJ 5.2→6.2→NijiV6的渲染范式跃迁

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;赛博朋克到量子有机体&#xff1a;未来主义视觉范式的哲学跃迁 当霓虹雨巷中的义体少女凝视全息广告牌&#xff0c;她瞳孔倒映的已不仅是资本编码的欲望图景&#xff0c;而是意识与拓扑量子态耦合的初始…...

全面掌握AWD-Watchbird:PHP Web应用防火墙实战部署指南

全面掌握AWD-Watchbird&#xff1a;PHP Web应用防火墙实战部署指南 【免费下载链接】awd-watchbird A powerful PHP WAF for AWD 项目地址: https://gitcode.com/gh_mirrors/aw/awd-watchbird 在当今网络安全威胁日益复杂的背景下&#xff0c;Web应用防火墙&#xff08;…...

5大理由:为什么UAV Log Viewer是你的无人机飞行数据分析终极工具

5大理由&#xff1a;为什么UAV Log Viewer是你的无人机飞行数据分析终极工具 【免费下载链接】UAVLogViewer An online viewer for UAV log files 项目地址: https://gitcode.com/gh_mirrors/ua/UAVLogViewer UAV Log Viewer是一款基于JavaScript开发的免费开源无人机飞…...

构建插件化搜索聚合服务:从架构设计到Go语言实现

1. 项目概述与核心价值最近在折腾一个个人项目&#xff0c;需要实现一个轻量级的在线搜索聚合功能。我的需求很简单&#xff1a;不想在代码里写死一堆搜索引擎的API调用&#xff0c;也不想每次加个新搜索源就改一遍逻辑。就在我到处翻找有没有现成的轮子时&#xff0c;一个叫st…...

【NotebookLM艺术学研究加速器】:20年数字人文专家亲授5大冷启动技巧,3天构建专属艺术文献知识图谱

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM艺术学研究辅助的范式革命 NotebookLM 作为 Google 推出的基于用户上传文档进行深度语义理解的 AI 助手&#xff0c;正悄然重构艺术学研究的知识生产逻辑。它不再依赖通用网络语料&#xff0…...

告别依赖地狱:手把手教你用Docker一键部署带GUI的Kettle(避坑libwebkitgtk)

告别依赖地狱&#xff1a;用Docker容器化部署Kettle的终极实践指南 每次在Linux服务器上安装Kettle时&#xff0c;你是否也经历过这样的噩梦&#xff1f;先是提示缺少libwebkitgtk库&#xff0c;然后发现yum仓库里根本没有这个包&#xff0c;接着开始疯狂搜索各种第三方源&…...

AI系统提示词与模型仓库:提升大模型输出质量的关键

1. 项目概述&#xff1a;AI工具的系统提示词与模型仓库最近在折腾各种AI工具时&#xff0c;我越来越深刻地意识到一个核心问题&#xff1a;决定AI输出质量的&#xff0c;往往不是模型本身&#xff0c;而是你给它的“指令”。这个指令&#xff0c;在专业领域里被称为“系统提示词…...

Spring Boot TransactionTemplate 实战:从声明式到编程式事务的进阶指南

1. 为什么需要编程式事务&#xff1f; 在Spring Boot开发中&#xff0c;事务管理就像给数据库操作上的保险。我们最熟悉的Transactional注解确实方便&#xff0c;就像自动驾驶模式——简单标注一下&#xff0c;Spring就会自动帮我们处理事务的开启、提交和回滚。但实际开发中总…...