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

中秋节特别游戏:给玉兔投喂月饼

🖼️ 效果展示

在这里插入图片描述

📜 游戏背景

在中秋这个充满诗意的节日里,玉兔因为贪玩被赶下人间。在这个温柔的夜晚,我们希望通过一个小游戏,让玉兔感受到人间的温暖和关怀。🐰🌙

🎮 游戏设计

人物与目标

  • 玉兔:使用鼠标控制左右移动,目标是接住从天而降的月饼。
  • 月饼:随机从屏幕上方降落,接住加10分,落到地面减5分。
  • 月亮:随机降落,接住减5分并减少一格生命值。

游戏机制

  • 生命值(血条):初始为3格,每接住一个月亮减少一格,归零游戏结束。
  • 开始与重来:点击开始按钮进入游戏,游戏结束后点击重来按钮重新开始。

💻 代码素材

游戏环境:

  • Python 3.10.10
  • Pygame 2.5.2

代码示例

# 隐藏pygame的import欢迎显示
import osos.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = ''
import pygame
import randompygame.init()  # 初始化pygame库
sc = pygame.display.set_mode((600, 695))  # 创建游戏窗口,尺寸为600x695
pygame.display.set_caption("玉兔吃月饼——祝大家中秋节快乐!")  # 设置窗口标题# 加载图片资源
basket = pygame.image.load("img/basket.png")  # 加载篮子的图片
bj = pygame.image.load("img/bj.jpg")  # 加载背景图片
bomb = pygame.image.load("img/bomb.png")  # 加载炸弹图片
coin = pygame.image.load("img/coin.png")  # 加载月饼图片
start = pygame.image.load("img/start.jpg")  # 加载开始画面图片
over = pygame.image.load("img/over.jpg")  # 加载结束画面图片
ihp = pygame.image.load("img/hp.png")  # 加载生命值图标
btn_up = pygame.image.load("img/btn_up.png")  # 加载开始按钮的正常状态图片
btn_down = pygame.image.load("img/btn_down.png")  # 加载开始按钮的按下状态图片
bbtn_up = pygame.image.load("img/bbtn_up.png")  # 加载结束按钮的正常状态图片
bbtn_down = pygame.image.load("img/bbtn_down.png")  # 加载结束按钮的按下状态图片# 加载声音资源
pygame.mixer.init()  # 初始化声音模块
coin_sound = pygame.mixer.Sound("sound/coin.mp3")  # 加载月饼音效
bomb_sound = pygame.mixer.Sound("sound/bomb.mp3")  # 加载炸弹音效
game_start_sound = pygame.mixer.Sound("sound/start.mp3")  # 加载游戏开始音效
game_over_sound = pygame.mixer.Sound("sound/game_over.mp3")  # 加载游戏结束音效word = "HP"  # 生命值文字
font = pygame.font.SysFont("", 32)  # 创建字体对象,大小为32
text = font.render(word, True, (75, 217, 65))  # 渲染生命值文字,颜色为绿色
score = 0  # 初始化分数为0
text1 = font.render(str(score), True, (255, 255, 255))  # 渲染分数,颜色为白色
bx = 0  # 初始化篮子的x坐标
lx, ly = [], []  # 月饼的x和y坐标列表
fx, fy = [], []  # 炸弹的x和y坐标列表
speedy = 1  # 初始速度
hp = 4  # 初始化生命值为4# 初始化月饼的位置
for i in range(0, 4):tx = random.randint(0, 586)  # 随机生成月饼的x坐标ty = (i - 1) * 150  # 计算月饼的y坐标lx.append(tx)  # 将x坐标添加到列表ly.append(ty)  # 将y坐标添加到列表# 初始化炸弹的位置
for i in range(0, 2):x = random.randint(0, 586)  # 随机生成炸弹的x坐标y = (i - 1) * 300  # 计算炸弹的y坐标fx.append(x)  # 将x坐标添加到列表fy.append(y)  # 将y坐标添加到列表class Button(object):def __init__(self, button_up, button_down, position):self.btn_up = button_up  # 按钮的正常状态图self.btn_down = button_down  # 按钮的按下状态图self.position = position  # 按钮的位置(x, y)def is_over(self):point_x, point_y = pygame.mouse.get_pos()  # 获取鼠标的当前坐标x, y = self.position  # 按钮的位置坐标w, h = self.btn_down.get_size()  # 按钮的宽度和高度# 检查鼠标是否在按钮的水平范围内in_x = x - w / 2 < point_x < x + w / 2# 检查鼠标是否在按钮的垂直范围内in_y = y - h / 2 < point_y < y + h / 2return in_x and in_y  # 如果鼠标在按钮范围内则返回Truedef is_pressed(self):if event.type == pygame.MOUSEBUTTONDOWN:  # 如果检测到鼠标按下事件point_x, point_y = pygame.mouse.get_pos()  # 获取鼠标的当前坐标x, y = self.position  # 按钮的位置坐标w, h = self.btn_down.get_size()  # 按钮的宽度和高度# 检查鼠标是否在按钮的水平范围内in_x = x - w / 2 < point_x < x + w / 2# 检查鼠标是否在按钮的垂直范围内in_y = y - h / 2 < point_y < y + h / 2return True  # 如果按钮被按下则返回Truedef render(self):w, h = self.btn_up.get_size()  # 获取按钮的宽度和高度x, y = self.position  # 按钮的位置坐标if self.is_over():  # 如果鼠标在按钮上sc.blit(self.btn_down, (x - w / 2, y - h / 2))  # 绘制按下状态的按钮图else:sc.blit(self.btn_up, (x - w / 2, y - h / 2))  # 绘制正常状态的按钮图button = Button(btn_up, btn_down, (288, 460))  # 创建开始按钮对象
over_button = Button(bbtn_up, bbtn_down, (288, 460))  # 创建结束按钮对象while True:  # 主游戏循环for event in pygame.event.get():  # 处理所有事件if event.type == pygame.QUIT:  # 如果用户点击关闭按钮pygame.quit()  # 退出pygameexit()  # 退出程序sc.blit(start, (0, 0))  # 绘制开始画面over_button.render()  # 渲染结束按钮if over_button.is_pressed():  # 如果点击了结束按钮hp = 3  # 重置生命值score = 0  # 重置分数text1 = font.render(str(score), True, (255, 255, 255))  # 更新分数字符串game_start_sound.play()  # 播放开始游戏音效if 0 < hp < 4 and score >= 0:  # 游戏进行中sc.blit(bj, (0, 0))  # 绘制背景sc.blit(text, (10, 583))  # 绘制生命值文字sc.blit(text1, (570, 570))  # 绘制分数sc.blit(basket, (bx, 540))  # 绘制篮子# 根据分数调整掉落速度if score <= 50:speedy = 0.4elif score > 100:speedy = 0.8elif score > 150:speedy = 1.2elif score > 200:speedy = 1.6# 处理月饼的掉落for i in range(len(lx)):sc.blit(coin, (lx[i], ly[i] - 600))  # 绘制月饼ly[i] += speedy  # 更新月饼的y坐标if ly[i] > 610 + 600:  # 如果月饼掉出屏幕ly[i] = 600  # 重置月饼的y坐标lx[i] = random.randint(0, 540)  # 随机重置月饼的x坐标score -= 5  # 减少分数text1 = font.render(str(score), True, (255, 255, 255))  # 更新分数字符串# 检测月饼是否被篮子接住if bx < lx[i] + 24 < bx + 62 and 1120 <= ly[i] <= 1140:ly[i] = 600  # 重置月饼的y坐标lx[i] = random.randint(0, 586)  # 随机重置月饼的x坐标score += 10  # 增加分数text1 = font.render(str(score), True, (255, 255, 255))  # 更新分数字符串coin_sound.play()  # 播放收集月饼音效# 处理炸弹的掉落for i in range(len(fx)):sc.blit(bomb, (fx[i], fy[i] - 600))  # 绘制炸弹fy[i] += speedy  # 更新炸弹的y坐标if fy[i] > 610 + 600:  # 如果炸弹掉出屏幕fy[i] = 600  # 重置炸弹的y坐标fx[i] = random.randint(0, 545)  # 随机重置炸弹的x坐标# 检测炸弹是否击中篮子if bx < fx[i] + 24 < bx + 62 and 1120 <= fy[i] <= 1140:hp -= 1  # 生命值减少fy[i] = 600  # 重置炸弹的y坐标fx[i] = random.randint(0, 586)  # 随机重置炸弹的x坐标bomb_sound.play()  # 播放炸弹音效if event.type == pygame.MOUSEMOTION:  # 如果鼠标移动事件mx, my = pygame.mouse.get_pos()  # 获取鼠标位置bx = mx - 24  # 更新篮子的x坐标# 边界检测if bx < 0:bx = 0  # 确保篮子不会超出左边界if bx > 610 - 62:bx = 548  # 确保篮子不会超出右边界keys = pygame.key.get_pressed()  # 获取按键状态if keys[pygame.K_a] or keys[pygame.K_RIGHT]:  # 如果按下右键或A键bx += 5  # 向右移动篮子if keys[pygame.K_d] or keys[pygame.K_LEFT]:  # 如果按下左键或D键bx -= 5  # 向左移动篮子# 绘制生命值图标for i in range(0, hp):sc.blit(ihp, (22 * i + 40, 585))# 游戏结束if hp == 0 or score < 0:bx = 0  # 重置篮子位置speedy = 1  # 重置速度# 重置月饼的位置for i in range(len(lx)):lx[i] = random.randint(0, 586)  # 随机重置月饼的x坐标ly[i] = (i - 1) * 150  # 计算月饼的y坐标# 重置炸弹的位置for i in range(len(fx)):fx[i] = random.randint(0, 586)  # 随机重置炸弹的x坐标fy[i] = (i - 1) * 300  # 计算炸弹的y坐标sc.blit(over, (0, 0))  # 绘制结束画面button.render()  # 渲染开始按钮game_over_sound.play()  # 播放游戏结束音效if button.is_pressed():  # 如果点击了开始按钮hp = 3  # 重置生命值score = 0  # 重置分数text1 = font.render(str(score), True, (255, 255, 255))  # 更新分数字符串game_start_sound.play()  # 播放开始游戏音效pygame.display.update()  # 更新屏幕显示

📁 素材

  • basket.png - 玉兔图片
  • bj.jpg - 游戏背景
  • bomb.png - 月亮图片
  • coin.png - 月饼图片
  • start.jpg - 开始界面
  • over.jpg - 游戏结束界面
  • hp.png - 生命值图标
  • btn_up.png, btn_down.png - 按钮图片

🔧 如何使用

  1. 安装Pygame
    pip install pygame
    
  2. 下载代码和素材:将游戏代码和所有素材下载到本地文件夹中。
  3. 运行游戏:右键或终端运行py文件。
  4. 游戏操作
    • 使用鼠标控制玉兔左右移动。
    • 点击开始按钮开始游戏。
    • 游戏过程中,接住月饼加分,接住月亮减分并减少生命值。
    • 游戏结束后,点击重来按钮重新开始。

🌟 游戏功能

  • 动态得分系统:根据接住的月饼和月亮动态计算得分。
  • 生命值管理:通过血条显示玉兔的生命值,增加游戏的挑战性。
  • 难度自适应:随着得分的增加,游戏难度会逐渐提高,增加游戏的可玩性。
  • 重新开始机制:游戏结束后,玩家可以立即重新开始,无需重新加载游戏。

🌟 结束语

“但愿人长久,千里共婵娟”,在这个中秋,让我们一起通过这个游戏,传递温暖和快乐。🌕😊

👇 源码资料获取 · 技术与交流 👇
在这里插入图片描述

相关文章:

中秋节特别游戏:给玉兔投喂月饼

&#x1f5bc;️ 效果展示 &#x1f4dc; 游戏背景 在中秋这个充满诗意的节日里&#xff0c;玉兔因为贪玩被赶下人间。在这个温柔的夜晚&#xff0c;我们希望通过一个小游戏&#xff0c;让玉兔感受到人间的温暖和关怀。&#x1f430;&#x1f319; &#x1f3ae; 游戏设计 人…...

python pdf转word或excel

python pdf转word或excel 直接上源码 main import gradio as gr import pdf2docx as p2d import Pdf2Excel as p2e import utils.id.IdUtil as idUtildef convert_pdf_to(pdf_file, pdf_pwd, pdf_to_type):if pdf_to_type "docx":# Convert PDF to DOCXcv p2d.C…...

GNU链接器(LD):位置计数器(.)功能及实例解析

0 参考资料 GNU-LD-v2.30-中文手册.pdf GNU linker.pdf1 前言 一个完整的编译工具链应该包含以下4个部分&#xff1a; &#xff08;1&#xff09;编译器 &#xff08;2&#xff09;汇编器 &#xff08;3&#xff09;链接器 &#xff08;4&#xff09;lib库 在GNU工具链中&…...

学习记录:js算法(四十三):翻转二叉树

文章目录 翻转二叉树我的思路网上思路递归栈 总结 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点 图一&#xff1a; 图二&#xff1a; 示例 1&#xff1a;&#xff08;如图一&#xff09; 输入&#xff1a;root [4,2,7,1…...

关于 SQL 的 JOIN 操作

关于 SQL 的 JOIN 操作 在关系型数据库中&#xff0c;数据通常分布在多个表中。为了进行有效的数据检索&#xff0c;我们需要从不同的表中组合数据&#xff0c;这时就需要使用 JOIN 操作。本文将深入探讨 SQL 中不同类型的 JOIN 及其用法&#xff0c;以帮助你在数据库查询中更…...

聊聊AUTOSAR:基于Vector MICROSAR的TC8测试开发方案

技术背景 车载以太网技术作为汽车智能化和网联化的重要组成部分&#xff0c;正逐步成为现代汽车网络架构的核心&#xff0c;已广泛应用于汽车诊断&#xff08;如OBD&#xff09;、ECU软件更新、智能座舱系统、高清摄像头环视泊车系统等多个领域。 在这个过程中&#xff0c;ET…...

ES6中迭代器与生成器知识浅析

ES5及以下版本对JS几种集合&#xff0c;要存取数据一般需要用循环语句来遍历&#xff0c;就要初始化一个或多个变量来记录每一次循环在数据集合中的位置或数据值。这里容易出现超出边界问题&#xff0c;造成程序出错。另外&#xff0c;对于多次循环也需要跟踪理清各个变量关系及…...

unix中的vfork函数

一、前言 本文介绍unix中的vfork函数&#xff0c;vfork函数功能和fork函数类似&#xff0c;也是用于创建新的进程&#xff0c;只不过调用vfork函数创建的子进程将共享父进程的进程空间&#xff0c;且只有当子进程调用exec()或者exit()函数后&#xff0c;父进程才会继续运行。 …...

Android 用线程池实现一个简单的任务队列(Kotlin)

关于线程池,Kotlin和java的使用方式一样 在Android中,很多人喜欢用Handler的postDelayed() 去实现延时任务. 要使用postDelayed(),去实现延时任务队列,就不可避免要使用递归. 但是这样做,代码的简洁性,和书写的简易,就远不如使用线程池. 使用线程池的简单程度: private val…...

遨游信息技术的浩瀚宇宙:探索MySQL的深邃奥秘

遨游信息技术的浩瀚宇宙&#xff1a;探索MySQL的深邃奥秘 在信息技术的浩瀚宇宙中&#xff0c;MySQL犹如一颗璀璨的星辰&#xff0c;以其稳定、高效、灵活的特性&#xff0c;照亮了无数开发者与数据管理者的前行之路。作为关系型数据库管理系统的佼佼者&#xff0c;MySQL不仅承…...

【Bug解决】Nacos启动成功,但却无法访问(提示:无法访问此网站,192.168.10.88的响应时间过长)

项目场景&#xff1a; 在虚拟机上通过Docker创建Nacos容器&#xff0c;已经创建成功&#xff0c;查看Nacos启动日志也是成功。但通过端口号加8848/nacos&#xff08;如&#xff1a;http://IP:8848/nacos&#xff09;无法访问到Nacos管理页面。 愿意分析一&#xff1a; 先检查好…...

【AI创作组】工程方向的硕士研究生学习Matlab的路径

1. MATLAB软件概述 1.1 MATLAB发展历程 MATLAB自20世纪70年代诞生以来,已经经历了多次重要的版本更新和功能扩展。 初始版本:MATLAB的前身只是一个简单的交互式矩阵计算器,由Cleve B. Moler博士在1970年代初期开发,目的是为了方便学生和研究人员使用线性代数软件包LINPAC…...

Mac使用Nginx设置代理,并禁用自带Apache

Mac自带Apache服务&#xff0c;并占用80端口&#xff0c;如果需要使用Nginx&#xff0c;需要禁用Apache并自己安装Nginx 一、禁用自带Apache 1.关闭Apache sudo apachectl -k stop 如果出现如下报错&#xff1a;httpd: Could not reliably determine the server’s fully q…...

AlmaLinux 安裝JDK8

在 AlmaLinux 上安装 JDK 8 可以通过包管理器 dnf 来完成。AlmaLinux 是基于 RHEL 的一个开源发行版&#xff0c;因此其包管理系统和 RHEL 类似。以下是详细的步骤来安装 OpenJDK 8 1. 更新系统包列表 sudo dnf update -y 2. 安装 OpenJDK 8 使用 dnf 安装 OpenJDK 8。你可…...

Set 和 Map 的模拟实现

1、引言 在数据结构与算法的学习与实践中&#xff0c;关联容器&#xff08;associative containers&#xff09;是不可忽视的重要工具。作为高效管理数据的一类容器&#xff0c;C 标准库中的 set 和 map 在现代软件开发中扮演着关键角色。这两个容器通过平衡二叉搜索树&#x…...

深度学习自编码器 - 预测稀疏分解(PSD)篇

序言 在数据科学与机器学习的广阔领域中&#xff0c;深度学习作为一股不可忽视的力量&#xff0c;正引领着技术革新的浪潮。其中&#xff0c;自编码器&#xff08; Autoencoder \text{Autoencoder} Autoencoder&#xff09;作为一种特殊的神经网络结构&#xff0c;以其独特的自…...

如何检测出来这个ip是共享ip不安全

检测一个IP是否为共享IP以及其安全性可以通过以下几种方法和工具来进行分析。共享IP通常是指多个用户共享一个IP地址&#xff0c;常见于公共代理服务器、VPN服务或数据中心IP。如果你想评估一个IP是否为共享IP以及其安全性&#xff0c;以下方法和工具可以帮助你进行检测和分析。…...

TMStarget学习——T1 Segmentation数据处理及解bug

最新学习季公俊老师的神器 TMStarget 的第一个模块基于结构像的靶区计算T1 segmentation。下面上步骤&#xff1a; (1)在github 上下载 TMStarget https://github.com/jigongjun/Neuroimaging-and-Neuromodulation (2)按照要求下载依赖工具软件AFQ、vistasoft、SPM12 &#…...

锁策略, cas 和 synchronized 优化过程

1.1 常見的鎖策略 預測鎖衝突概率 樂觀鎖&#xff1a;加鎖的時候&#xff0c;假設出現鎖衝突的概率不大。圍繞加鎖做的工作會更少。 悲觀鎖&#xff1a;加鎖的時候&#xff0c;假設鎖出現衝突的概率很大。圍繞加鎖做的工作會更多。 synchronized “自適應” 初始是樂觀的。鎖…...

【HTML5】html5开篇基础(2)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...