Python小游戏25——黄金矿工
首先,你需要安装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)
GOLD_COLOR = (255, 215, 0)
# 定义矿工和黄金的类
class Miner:
def __init__(self, x, y):
self.x = x
self.y = y
self.image = pygame.image.load("miner.png").convert_alpha()
self.image = pygame.transform.scale(self.image, (50, 50))
self.rect = self.image.get_rect()
self.rect.topleft = (x, y)
def move(self, dx, dy):
self.x += dx
self.y += dy
self.rect.topleft = (self.x, self.y)
def draw(self, screen):
screen.blit(self.image, self.rect.topleft)
class Gold:
def __init__(self, x, y):
self.x = x
self.y = y
self.image = pygame.image.load("gold.png").convert_alpha()
self.image = pygame.transform.scale(self.image, (30, 30))
self.rect = self.image.get_rect()
self.rect.topleft = (x, y)
def draw(self, screen):
screen.blit(self.image, self.rect.topleft)
# 创建矿工和黄金实例
miner = Miner(screen_width // 2, screen_height - 60)
golds = [Gold(random.randint(0, screen_width - 30), random.randint(0, screen_height - 30)) for _ in range(10)]
# 游戏主循环
running = True
clock = pygame.time.Clock()
score = 0
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 获取按键状态
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
miner.move(-10, 0)
if keys[pygame.K_RIGHT]:
miner.move(10, 0)
if keys[pygame.K_UP]:
miner.move(0, -10)
if keys[pygame.K_DOWN]:
miner.move(0, 10)
# 检测矿工是否抓到黄金
for gold in golds[:]:
if miner.rect.colliderect(gold.rect):
score += 10
golds.remove(gold)
# 绘制屏幕
screen.fill(WHITE)
miner.draw(screen)
for gold in golds:
gold.draw(screen)
# 显示分数
font = pygame.font.Font(None, 36)
text = font.render(f"Score: {score}", True, BLACK)
screen.blit(text, (10, 10))
# 更新屏幕
pygame.display.flip()
# 控制帧率
clock.tick(30)
# 退出Pygame
pygame.quit()
- 注意事项
在这个代码示例中,你需要准备两张图片:miner.png(矿工的图片)和gold.png(黄金的图片),并将它们放在与你的Python脚本相同的目录中。
- 知识点总结
1. 游戏初始化:
• 使用pygame.init()初始化pygame模块,为游戏图形和音效处理做准备。
• 设置游戏窗口大小和标题,如pygame.display.set_mode((551, 401), 0, 32)和pygame.display.set_caption("黄金矿工")。
• 加载游戏所需的图像资源,如背景、金矿、石头、钩子等,使用pygame.image.load()函数并调整图像大小。
2. 游戏循环:
• 游戏的主循环是不断更新游戏状态并渲染图像到屏幕上的过程。
• 在主循环中,根据用户输入(键盘、鼠标操作)和游戏逻辑(如时间的流逝、钩子的移动等)来更新游戏状态。
• 使用pygame.display.update()更新整个游戏窗口,使更改可见。
3. 事件监听:
• 使用pygame.event.get()监听用户输入事件,如键盘按键、鼠标点击等。
• 根据事件类型(如pygame.QUIT、pygame.KEYDOWN、pygame.MOUSEBUTTONDOWN等)执行相应的操作。
4. 钩子控制:
• 实现钩子的投放和收回功能,通过检测用户输入(如空格键或鼠标点击)来控制钩子的动作。
• 使用钩子捕捉金块和宝石,当钩子与金块或宝石碰撞时,触发相应的事件(如增加分数、移除物品等)。
5. 碰撞检测:
• 使用pygame的碰撞检测功能,如pygame.sprite.spritecollide(),来检测钩子与金块或宝石是否发生碰撞。
• 碰撞检测是游戏中的关键功能,用于确定钩子是否成功捕捉到目标物品。
6. 分数计算和显示:
• 根据玩家捕捉到的金块和宝石的数量来计算分数。
• 在游戏界面中实时显示玩家的得分和目标分数,激励玩家努力获取高分。
7. 计时器和关卡切换:
• 在游戏界面中设置倒计时器,用于限制玩家的游戏时间。
• 当时间用尽时,游戏自动结束,并根据玩家的得分判断是否过关。
• 过关后,游戏进入下一关,增加游戏的难度和挑战性。
8. 图像渲染:
• 使用pygame的绘图功能,如screen.blit(),将背景、角色、得分和计时等渲染到游戏窗口中。
• 渲染过程是游戏循环的一部分,确保游戏界面的实时更新。
9. 游戏结束和重新开始:
• 当游戏结束时,显示游戏结束界面,并提供重新开始的选项。
• 重新开始时,重置游戏状态并重新开始游戏循环。
- 总结
黄金矿工小游戏涉及了pygame模块的初始化、游戏循环、事件监听、钩子控制、碰撞检测、分数计算和显示、计时器和关卡切换、图像渲染以及游戏结束和重新开始等多个知识点。这些知识点是开发pygame小游戏所必需的基础,也是理解游戏开发流程的关键。
相关文章:
Python小游戏25——黄金矿工
首先,你需要安装Pygame库。 如果你还没有安装,可以使用以下命令进行安装: 【bash】 pip install pygame 【python】代码展示 import pygame import random # 初始化Pygame pygame.init() # 设置屏幕尺寸 screen_width 800 screen_height 60…...
WPF中Prism框架中 IContainerExtension 和 IRegionManager的作用
在Prism框架中,IContainerExtension和IRegionManager扮演着重要的角色,具体作用如下: IContainerExtension IContainerExtension接口是Prism 7中引入的,用于抽象依赖注入容器的操作。它实现了IContainerProvider和IContainerReg…...
C++实现用户分组--学习
第一步实现:ETL的设计分三部分:数据抽取(Data Extraction)、数据的清洗转换(Data Transformation)、数据的加载(Data Loading). 构建一个数据容器类,其中包含转换后的MNIST手写数据。还实现了一个数据处理程序,该数据处理程序将提…...
鸿蒙华为商城APP案例
模拟器运行效果如下: 鸿蒙版APP-华为商城-演示视频...
回首遥望-C++内存对齐的思考
这一章节主要巩固一下学习C/C时内存对齐相关的内容! 文章目录 什么是内存对齐?为什么要有内存对齐?如何进行内存对齐?致谢: 什么是内存对齐? 这里不提及一堆啰嗦概念,就结合实际出发࿰…...
力扣 LeetCode 704. 二分查找(Day1:数组)
解题思路: 二分查找主要分为[ left , right ]左闭右闭和[ left , right )左闭右开两种 此处采取[ left , right ]左闭右闭写法 注意: 1. right的初始化取值 2. while中取等 3. right mid -1 ; class Solution {public int search(int[] nums, i…...
【Mode Management】AUTOSAR架构下唤醒源检测函数EcuM_CheckWakeup详解
目录 前言 正文 1.AUTOSAR标准描述 1.1 EcuM_CheckWakeup用来干什么 1.2 EcuM_CheckWakeup在哪里被调用 1.3 EcuM_CheckWakeup的使用场景 1.3.1 GPT中断检测唤醒源 1.3.2 EcuM轮询GPT检测唤醒源 1.3.3 ICU中断检测唤醒源 1.3.4 其他 2.AUTOSR工具相关配置 3.唤醒源…...
Zabbix基础信息概述
1.Zabbix概述 Zabbix 是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警,这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix 提供了出色的报告和数据可…...
SpringBoot(十二)SpringBoot配置redis
接下来我要实现的webscoket即时聊天中需要使用到redis,我先在项目中配置一下redis。 我这里再windows中做测试,关于redis的安装请移步《Redis(三)Windows系统安装redis》 一:在pom.xml中添加依赖 <!-- springboot redis start --><dependency><grou…...
Pycharm安装
Pycharm安装 返回主目录Pycharm安装1. Pycharm下载PyCharm官网下载地址下载安装包 2. Pycharm安装第一步:双击安装包第二步:进入安装程序第三步:选择安装路径第四步:选择安装选项第五步:安装第六步:完成安装…...
OpenAI大改下代大模型方向,scaling law撞墙?AI社区炸锅了
有研究预计,如果 LLM 保持现在的发展势头,预计在 2028 年左右,已有的数据储量将被全部利用完。届时,基于大数据的大模型的发展将可能放缓甚至陷入停滞。 来自论文《Will we run out of data? Limits of LLM scaling based on hum…...
技术整合与生态构建:Lyft与Mobileye引领自动驾驶新纪元
在科技日新月异的今天,自动驾驶技术正逐渐从科幻电影走进现实生活,成为出行服务领域的一股不可忽视的力量。近日,北美网约车巨头Lyft与自动驾驶技术领先者Mobileye宣布联手合作,共同推动自动驾驶汽车出行服务的广泛商业化进程。此…...
利用huffman树实现对文件A先编码后解码
利用huffman树实现对文件A先编码后解码,范围为ASCII码0-255的值,如何解决特殊符号问题是一个难点,注意应使用unsigned char存储数据,否则ASCII码128-255的值可能会出问题: #define _CRT_SECURE_NO_WARNINGS 1 #includ…...
第三十九章 基于VueCli自定义创建项目
目录 1. 选择创建模式 2. 选择需要的功能 3. 选择历史模式还是哈希模式 4.CSS预处理器 5. 选择ESLint规则 6. 开始创建项目 7. 自定义项目最终结构 1. 选择创建模式 输入创建的项目名,创建项目: 这里选择自定义模式: 2. 选择需要…...
网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施
在数字媒体时代,视频点播已成为用户获取信息和娱乐的重要方式。EasyPlayer.js作为一款流行的点播播放器,以其强大的功能和易用性受到广泛欢迎。然而,在使用过程中,用户可能会遇到视频地址无法播放的问题,这不仅影响用户…...
LLaMA-Factory学习笔记(1)——采用LORA对大模型进行SFT并采用vLLM部署的全流程
该博客是我根据自己学习过程中的思考与总结来写作的,由于初次学习,可能会有错误或者不足的地方,望批评与指正。 1. 安装 1.1 LLaMA-Factory安装 安装可以参考官方 readme (https://github.com/hiyouga/LLaMA-Factory/blob/main/…...
PHP和Python脚本的性能监测方案
目录 1. 说明 2. PHP脚本性能监测方案 2.1 安装xdebug 2.2 配置xdebug.ini 2.3 命令行与VS Code中使用 - 命令行 - VS Code 2.4 QCacheGrind 浏览 3. Python脚本性能监测方案 3.1 命令行 4. 工具 5.参考 1. 说明 获取我们的脚本程序运行时的指标,对分析…...
C语言实现数据结构之堆
文章目录 堆一. 树概念及结构1. 树的概念2. 树的相关概念3. 树的表示4. 树在实际中的运用(表示文件系统的目录树结构) 二. 二叉树概念及结构1. 概念2. 特殊的二叉树3. 二叉树的性质4. 二叉树的存储结构 三. 二叉树的顺序结构及实现1. 二叉树的顺序结构2.…...
战略共赢 软硬兼备|云途半导体与知从科技达成战略合作
2024年11月5日,江苏云途半导体有限公司(以下简称“云途”或“云途半导体”)与上海知从科技有限公司(以下简称“知从科技”)达成战略合作,共同推动智能汽车领域高端汽车电子应用的开发。 云途半导体与知从科…...
python:用 sklearn 构建 K-Means 聚类模型
pip install scikit-learn 或者 直接用 Anaconda3 sklearn 提供了 preprocessing 数据预处理模块、cluster 聚类模型、manifold.TSNE 数据降维模块。 编写 test_sklearn_3.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 构建 K-Means 聚类模型 "&…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
python可视化:俄乌战争时间线关键节点与深层原因
俄乌战争时间线可视化分析:关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一,自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具,系统分析这场战争的时间线、关键节点及其背后的深层原因,全面…...
【Java基础】向上转型(Upcasting)和向下转型(Downcasting)
在面向对象编程中,转型(Casting) 是指改变对象的引用类型,主要涉及 继承关系 和 多态。 向上转型(Upcasting) ⬆️ 定义 将 子类对象 赋值给 父类引用(自动完成,无需强制转换&…...
【自然语言处理】大模型时代的数据标注(主动学习)
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构D 实验设计E 个人总结 A 论文出处 论文题目:FreeAL: Towards Human-Free Active Learning in the Era of Large Language Models发表情况:2023-EMNLP作者单位:浙江大…...
RMQ 算法详解(区间最值问题)
RMQ 算法详解(区间最值问题) 问题介绍解决方法暴力法ST表法基本思想算法步骤C实现 问题介绍 RMQ问题是OI中经常遇到的问题,主要是一下形式: 给你一堆数,不断的对里面的数进行操作,例如:让某个…...
