当前位置: 首页 > 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;。如果你对我的…...

好写作AI|从研究空白到初稿呈现:AI在博士论文起步阶段的价值

家人们&#xff0c;谁懂啊&#xff1f; 博士第一年&#xff0c;导师问&#xff1a;“你的研究空白是什么&#xff1f;” 你胸有成竹&#xff1a;“A理论在B场景的应用研究不足&#xff01;” 导师&#xff1a;“那是文献缺口&#xff0c;不是研究空白。” 你懵了&#xff1a;“…...

三自由度机械手-工业机器人(说明书+CAD图纸)

三自由度机械手作为工业机器人领域的典型代表&#xff0c;其核心作用在于通过三个独立运动轴的协同控制&#xff0c;实现末端执行器在三维空间内的精准定位与灵活操作。这种结构通过旋转、俯仰与伸缩三个方向的复合运动&#xff0c;能够覆盖工作空间内的任意目标点&#xff0c;…...

2026别墅地下室保养升值的最好方法:电渗透技术的应用

别墅地下室随着人们日益增长的生活质量&#xff0c;功能也逐渐变得丰厚。当今时代不少业主都会在地下室加装健身房&#xff0c;酒窖以及影视厅等。这些功能区建设完毕初期给人无不良影响&#xff0c;但是随着时间的渐长&#xff0c;湿气不断渗透&#xff0c;首先空气潮湿度会给…...

SEO 推广与传统广告推广有什么区别

SEO 推广与传统广告推广有什么区别 在当今的数字化时代&#xff0c;企业如何有效地推广自己的产品和服务成为了一个亟待解决的问题。两种常见的推广方式——SEO 推广与传统广告推广——各有优劣&#xff0c;企业需要根据自身的需求和市场环境进行选择。本文将详细探讨SEO推广和…...

2026 年 GEO 优化公司推荐:6家服务商综合实力对比分析

一、GEO 行业进入合规技术双轮驱动的爆发期IDC 最新发布的《2026年全球生成式引擎优化市场报告》显示&#xff0c;2026年全球 GEO&#xff08;生成式引擎优化&#xff09;市场规模将达 220 亿美元&#xff0c;年复合增长率高达 122%&#xff0c;中国市场规模预计突破 480 亿元&…...

乙巳马年春联生成终端步骤详解:横批居中与上下联基线对齐的CSS技巧

乙巳马年春联生成终端步骤详解&#xff1a;横批居中与上下联基线对齐的CSS技巧 1. 引言&#xff1a;从创意到像素的挑战 想象一下&#xff0c;你正在开发一个充满年味的Web应用——一个能自动生成马年春联的“皇城大门”。AI模型已经为你写出了文采斐然的上下联和横批&#x…...

XXL-SSO与Active Directory集成:企业级身份管理终极方案

XXL-SSO与Active Directory集成&#xff1a;企业级身份管理终极方案 XXL-SSO是一款分布式单点登录框架&#xff0c;能够帮助企业实现多系统统一身份认证与授权。本文将详细介绍如何将XXL-SSO与Active Directory集成&#xff0c;打造企业级身份管理解决方案&#xff0c;让用户认…...

SWIFT报文格式规范:从字符约束到金融交易安全的深度解析

1. SWIFT报文格式规范的核心价值 第一次接触SWIFT报文时&#xff0c;我被那些看似简单的字母代号震撼到了——谁能想到&#xff0c;像"2!n"这样简单的符号组合&#xff0c;竟然承载着全球金融系统的运转规则&#xff1f;在跨境汇款中输错一个字符可能导致资金滞留数周…...

告别黑屏和错位!Uniapp视频轮播最佳实践:巧用v-if与swiper事件实现无缝切换

Uniapp视频轮播组件深度优化&#xff1a;从黑屏错位到无缝体验的全链路解决方案 在移动应用开发中&#xff0c;视频轮播组件已经成为提升用户参与度的关键元素。然而&#xff0c;当Uniapp开发者尝试在swiper组件中嵌入视频时&#xff0c;常常会遇到视频位置偏移、黑屏闪现、自动…...

OpenClaw学术助手:Qwen2.5-VL-7B自动解析论文图表数据

OpenClaw学术助手&#xff1a;Qwen2.5-VL-7B自动解析论文图表数据 1. 为什么需要自动化论文图表解析 作为一名经常需要阅读大量学术论文的研究者&#xff0c;我发现自己花费了太多时间在手动转录图表数据上。每当遇到一篇包含复杂实验数据的论文&#xff0c;就需要对着PDF截图…...